早在2015年,ROS就已经发布了第一个ROS2.0的alpha版本,现在已经发布有五个正式版了。考虑到要与时俱进嘛,所以就安装了ROS2和gazebo来学习下ROS2相关的操作,过来和大家分享下。
安装ROS2
ROS2现在有5个正式版本,因为在第四个正式版dashing的时候又进行了较大的代码改动,且官方支持维护两年,支持到2021年,所以我就选择了dashing进行安装。
下面介绍下大致的安装使用过程。
首先设置语言环境:
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
添加软件源:
$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add –
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
安装ROS2软件包:
$ sudo apt update
$ sudo apt install ros-dashing-desktop
设置环境变量:
$ echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
安装argcomplete(可选):
ROS 2命令行工具使用argcomplete自动完成。因此,如果要自动补全,则必须安装,个人建议安装。
$ sudo apt install python3-argcomplete
安装完成后可以用自带的例程测试下ROS2是否安装成功:
安装gazebo
ROS2默认是不包含Gazebo的,所以需要自行安装。同时,ROS2只能使用gazebo9及之后版本,这里我就选择安装gazebo9。Gazebo官网提供了两种安装方式,脚本安装或者是逐步安装。
脚本安装
$ curl -sSL http://get.gazebosim.org | sh
逐步安装
设置软件源:
$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
添加key:
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
安装gazebo9:
$ sudo apt-get update
$ sudo apt-get install gazebo9*
在安装过程中,我遇到了网络不好的问题,有下载失败的概率,所以个人推荐逐步安装。
turtlebot3测试
为了熟悉下ROS2的基本操作,我用turtlebot3在gazebo中进行仿真,以熟悉一些来了解ROS2的基本操作。
首先和ROS1一样建立工作空间turtlebot3_ws,然后下载源代码放到src目录中,注意要选择dashing-devel的分支,gitclone可以使用-b指定分支。下面是所需的相关源码链接:
https://github.com/ROBOTIS-GIT/turtlebot3/tree/dashing-devel
https://github.com/ROBOTIS-GIT/turtlebot3_msgs/tree/dashing-devel
https://github.com/ROBOTIS-GIT/turtlebot3_simulations/tree/dashing-devel
最后src中应该有以下文件:
安装编译工具:
$ sudo apt install python3-colcon-common-extensions
进入turtlebot3_ws下编译:
$ colcon build
设置环境变量:
$ echo "~/turtlebot3/install/setup.bash" >> ~/.bashrc
$ echo " export TURTLEBOT3_MODEL= burger" >> ~/.bashrc #turtlebot3有burger,、waffle、waffle_pi三种,所以需要指定型号
安装相关的一些功能包:
$ sudo apt install ros-dashing-gazebo-* ros-dashing-cartographer* ros-dashing-navigation2 ros-dashing-nav2-* python3-vcstool
这里我记不太清楚具体安装了哪些功能包了,可能有些已经包含ros-dashing-desktop中了,也有可能还缺少某些功能包。如果您遇到了什么问题,可以在评论中指出。
然后需要把turtlebot3的模型文件添加模型文件至gazebo的models文件夹中,即将turtlebot3_gazebo/models中的全部文件复制到~/.gazebo/models中。.gazebo文件夹为隐藏文件夹,可在home下使用ctrl+h快捷键显示。若.gazebo中没有models文件夹,可自行创建该文件夹。如下图所示:
建图&导航
基本的安装都已经完成了,那么就来进行测试吧。
首先打开第一个终端,运行gazebo环境:
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
然后打开第二个终端,使用Cartographer进行建图:
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
再打开第三个终端运行键盘控制节点:
$ ros2 run turtlebot3_teleop teleop_keyboard
然后你就能愉快的建图了。
完成建图后,再打开一个终端保存地图:
$ ros2 run nav2_map_server map_saver -f ~/turtlebot3_ws/src/turtlebot3_navigation2/map/map
然后关闭cartographer和键盘程序,再打开navigation2导航程序:
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True
之后和ROS1中的操作一致,先使用2D Pose Estimate对机器人的位置进行初始化,之后就可以用2D New Goal指定目标进行导航了。
经过一番折腾,终于搞定了ROS2的安装与使用。同时也感受到了和ROS1的一些直管的区别:
①最直接的,编译系统换了,编译命令也相应改变了 ;
② 同时launch等基本指令也换成了对应的ros2指令;
③取消了ROSMaster,更加方便各个节点的分布式布置。
另外,ROS2还有一些其他的特点,比如支持多系统之类的暂时就没有体现出来。ROS2的具体体会还是需要多多使用之后才能感受到啊,如果大家有什么问题,也欢迎大家在评论区指出,一起交流学习。