一、引言

在机器人研究领域,仿真技术为我们提供了一个低成本、高效的实验环境。结合 ROS(机器人操作系统)强大的功能和强化学习的智能决策能力,我们能够在 Ubantu 系统上实现对 turtlebot3 的高级仿真。本文将详细介绍这一过程,基于ROS1 Melodic架构和ubantu18.04.06系统,帮助读者搭建起属于自己的机器人仿真平台。同时,为了让大家对 turtlebot3 有更全面的了解,下面先来探讨下它的发展历程。支持如下:

二、turtlebot3 的发展

(一)起源与诞生背景

turtlebot 系列旨在为 ROS 学习和研究提供一个低成本、开源的机器人平台。最初的 turtlebot 由 Willow Garage 的 Melonee Wise 和 Tully Foote 在 2010 年 11 月创建 ,它的出现让更多人能够以较低的成本接触和学习机器人技术以及 ROS 系统。随后在 2012 年,turtlebot 2 问世,并逐渐成为学习 ROS 的参考平台。然而,turtlebot 2 存在体积较大等问题。为了进一步降低成本、减小体积,同时不牺牲机器人的能力、功能和质量,Robotis 和 OSRF 合作研发了新一代移动机器人 turtlebot3。2016 年,在 ROS 开发者大会(ROSCon)上,turtlebot3 首次被介绍,其设计理念和目标吸引了众多关注。到 2017 年,turtlebot3 在国际机器人与自动化会议(ICRA)上正式发布,一经推出就受到了机器人爱好者、科研人员以及教育工作者的广泛关注。

(二)发布后的发展与改进

自发布以来,turtlebot3 不断发展完善。在硬件方面,其模块化、可定制的特点得到了进一步优化。提供了更多可选的底盘、计算机和传感器部件,用户可以根据自己的需求进行个性化配置。例如,其三种主要模型 burger、waffle、waffle_pi,分别适用于不同的应用场景和预算范围。Burger 模型采用树莓派作为计算核心,成本较低,适合初学者和简单应用场景;Waffle 和 Waffle_pi 则配备了更强大的计算能力,能够处理更复杂的任务,如搭载 Intel Joule 等性能更强的单板计算机,满足科研和工业应用的部分需求 。同时,在传感器配置上,turtlebot3 不断升级,默认配置中包含 360 度激光雷达(LIDAR),一些型号还配备了深度传感器,如 Waffle 模型中的 Realsense 传感器,这大大提升了机器人对周围环境的感知能力,为 SLAM(同步定位与地图构建)和自主导航等功能的实现提供了更有力的支持。

在软件方面,turtlebot3 依托 ROS 生态系统持续发展。ROS 社区不断为 turtlebot3 开发新的功能包和工具,丰富了其应用场景。例如,turtlebot3 相关的仿真功能包不断优化,使得在 Gazebo 等仿真环境中能够更真实地模拟机器人在各种场景下的运行情况,为开发者提供了便捷的测试和开发环境。同时,针对不同的应用领域,如教育、科研、物流等,都有相应的 ROS 软件包被开发出来,促进了 turtlebot3 在这些领域的应用和发展。

(三)应用领域拓展

随着 turtlebot3 的发展,其应用领域不断拓展。在教育领域,它成为了众多高校和中小学机器人课程的重要教学工具。由于其开源、低成本、易上手的特点,能够帮助学生快速了解机器人的基本原理和 ROS 系统的应用,激发学生对机器人技术和人工智能的兴趣。在科研领域,turtlebot3 为研究人员提供了一个便捷的实验平台,用于研究 SLAM 算法的优化、强化学习在机器人控制中的应用、多机器人协作等前沿课题。许多科研成果都基于 turtlebot3 进行实验验证和算法迭代。在工业和商业领域,turtlebot3 也逐渐崭露头角,一些企业利用其进行室内物流配送、巡检等任务的初步探索和原型开发,为未来的实际应用奠定基础。

三、环境准备

(一)Ubantu 系统安装

首先,确保你已经安装了 Ubantu 18.04.06操作系统。如果没有,基于VMware安装ubantu18.04的虚拟机。安装过程中,注意选择合适的配置。提供两个建议,安装vscode和terminator完成基础配置

 sudo apt-get install terminator

配置好vscode后可通过

code .

在vscode打开当前文件夹。

(二)ROS 安装

Fishros 是一个面向机器人开发者的一站式开发环境,它提供了一键安装 ROS 的便捷方式,极大地简化了安装流程,降低了安装难度。下面介绍使用 fishros 一键安装 ROS 的步骤:

  1. 安装 fishros 工具:打开终端,输入以下命令下载并运行 fishros 的安装脚本。
    wget http://fishros.com/install -O fishros && . fishros
    

    运行脚本后,按照提示进行操作,选择安装 ROS 的版本以及相关依赖。在正式安装前必须进行更换系统源操作,并添加ROS1源。

    2. 安装完成后的配置:fishros 安装完成后,会自动配置 ROS 的环境变量。你可以通过以下命令检查环境变量是否配置成功。

    echo $ROS_DISTRO

    如果正确显示安装的 ROS 版本,说明环境变量配置成功。四、turtlebot3 仿真配置 

四、turtlebot3 仿真配置 

(一)相关软件安装

  • Anaconda 安装

    你可以下载适用于 Python 2.7 版本的 Anaconda 5.2.0。下载完成后,进入下载文件所在目录,并在终端中输入以下命令: 

bash Anaconda2 - 5.2.0 - linux - x86_64.sh

        在终端中输入yes以查看并接受许可条款。同时,将 Anaconda2 的安装位置添加到.bashrc文件的 PATH 中。

        安装 Anaconda 后,执行以下命令:

$ source ~/.bashrc
$ python -V

        如果 Anaconda 安装成功,终端将返回Python 2.7.xx :: Anaconda, Inc.

  • ROS 依赖包安装

    首先安装所需的包:

    pip install msgpack argparse

为了同时使用 ROS 和 Anaconda,你还必须额外安装 ROS 依赖包:

pip install -U rosinstall empy defusedxml netifaces
  • 然后需启动 conda环境,在conda环境中安装tensor,keras以及numpy
conda create -n py3.6 pip pyhton==3.6 
  • Tensorflow 安装:
    本教程仅使用 Python 2.7(仅 CPU)。如果你想使用其他 Python 版本和 GPU,请参考 TensorFlow 官方文档。

由于tensorflow需要在2.7版本下运行,而安装过程中protobuf需要python>=3.7,所以需要conda创建python3 3.6环境用于安装protobuf,而conda本身python环境为Python 2.7.xx :: Anaconda, Inc。

pip install --ignore - installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow - 1.8.0 - cp27 - none - linux_x86_64.whl
  • Keras 安装:

    Keras 是一个高级神经网络 API,用 Python 编写,能够在 TensorFlow 之上运行。

pip install keras==2.1.5

关于 tensorboard 的不兼容错误消息可以忽略,因为在此示例中未使用它,但可以通过如下安装 tensorboard 来解决:

pip install tensorboard
  • 机器学习包安装:

    警告:在安装此包之前,请先安装 turtlebot3、turtlebot3_msgs 和 turtlebot3_simulations 包。

$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS - GIT/turtlebot3_machine_learning.git
$ cd ~/catkin_ws && catkin_make

机器学习在 Gazebo 仿真世界中运行。如果你尚未安装 TurtleBot3 仿真包,请使用以下命令安装:

$ cd ~/catkin_ws/src/
$ git clone -b melodic - devel https://github.com/ROBOTIS - GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws && catkin_make

完全卸载并重新安装 numpy 以纠正问题。你可能需要执行几次卸载操作,直到 numpy 完全卸载。

$ pip uninstall numpy
$ pip show numpy
$ pip uninstall numpy
$ pip show numpy

此时,numpy 应该已完全卸载,并且当输入pip show numpy时,你不应看到任何 numpy 信息。

重新安装 numpy:

$ pip install numpy pyqtgraph

五、强化学习在 turtlebot3 仿真中的应用

(一)强化学习基本概念

强化学习是一种基于环境反馈进行决策的机器学习方法。在 turtlebot3 仿真中,我们可以将机器人在环境中的状态作为输入,通过策略网络输出动作,根据环境反馈的奖励来优化策略。

(二)实现思路

  1. 状态定义:将 turtlebot3 的位置、速度、传感器数据等作为状态。在基于 DQN 算法的应用中,状态是对环境的一种观测,用于描述当前的状况。这里,状态维度(state_size)为 26,其中包含 24 个激光测距传感器(LDS)值、到目标的距离以及到目标的角度。Turtlebot3 的 LDS 默认设置为 360。若你想要修改 LDS 的采样数量,可以在turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.gazebo.xacro文件中进行操作。相关代码如下:

 

<xacro:arg name="laser_visual" default="false"/>  # Visualization of LDS. If you want to see LDS, set to `true`

 

<scan>
    <horizontal>
        <samples>360</samples>       # The number of sample. Modify it to 24
        <resolution>1</resolution>
        <min_angle>0.0</min_angle>
        <max_angle>6.28319</max_angle>
    </horizontal>
</scan>

     上述代码中,samples标签对应采样数量,默认值为 360,可将其修改为 24 以符合状态定义中的 LDS 值数量设定。

    1. 2. 动作定义:动作是智能体在每个状态下可以执行的操作。在 turtlebot3 仿真中,turtlebot3 始终具有 0.15 m/s 的线速度,角速度由动作决定,具体如下:

       
      动作 角速度(rad/s)
      0 -1.5
      1 -0.75
      2 0
      3 0.75
      4 1.5
    2. 奖励函数设计:当 turtlebot3 在某一状态下执行一个动作时,它会获得一个奖励。奖励设计对于学习过程非常重要,奖励可以是正的或负的。当 turtlebot3 到达目标时,它会得到一个较大的正奖励;当 turtlebot3 与障碍物碰撞时,它会得到一个较大的负奖励。如果你想应用自己的奖励设计,可以在/turtlebot3_machine_learning/turtlebot3_dqn/src/turtlebot3_dqn/environment_stage_#.py文件中修改setReward函数。
    3. 超参数设置:本教程使用 DQN 进行学习。DQN 是一种通过逼近动作 - 值函数(Q - 值)来选择深度神经网络的强化学习方法。智能体在/turtlebot3_machine_learning/turtlebot3_dqn/nodes/turtlebot3_dqn_stage_#中具有以下超参数。

     

    (三)运行机器学习示例


    在这个机器学习示例中,使用了 24 个激光雷达(Lidar)样本,这应按照 “设置参数” 部分中所述进行修改。你可以观看相关的 TurtleBot3 机器学习教程视频(如图所示)以获取更直观的理解。

    roslaunch turtlebot3_gazebo turtlebot3_stage_1.launch

    然后打开另一个终端,输入以下命令启动 DQN 相关节点:

    roslaunch turtlebot3_dqn turtlebot3_dqn_stage_1.launch
    roslaunch turtlebot3_dqn result_graph.launch

    在遇到没有安装的包一路pip install就ok了,在启动gazebo渲染过程中会出现VMware: vmw_ioctl_command error Invalid argument的bugger,这是因为虚拟机没有主机显卡驱动,没有了3D图形加速功能意味着我们的虚拟机不能使用主机的GPU,而关闭3D图形加速也是简单粗暴的一个不错的解决方法哈,或者可以使用命令,配置环境。

    echo "export SVGA_VGPU10=0" >> ~/.bashrc

    而出现Gazebo [Err] [REST.cc:205] Error in REST

    sudo gedit ~/.ignition/fuel/config.yaml
    然后将  url : https://api.ignitionfuel.org   用 # 注释掉
    添加 url: https://api.ignitionrobotics.org  

    request提示是因为ip限制,网站无法进入,加入以上代码就ok

    至此关于模型创建运行就完成了,后续会继续拆解代码算法部分及论文

     

    Logo

    魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

    更多推荐