最近学习ROS Melodic,网上有一些安装教程,但是不够详细,自己动手做了下,随手记下整个安装流程,并详细记录细节和遇到的问题,为后来者节省10来分钟足矣。本文参考《机器人开发实战》,作者无为斋主。
ROS作为目前最受欢迎的机器人操作系统,它的核心代码采用C++编写并经由BSD许可发布。ROS源于2007年斯坦福大学和机器人技术公司Willow Garage合作项目Switchyard。2012年,ROS团队从Willlow Garage独立出来,并成立了一家非营利组织,即开源机器人基金会(Open Source Robotics Foundation, OSRF),ROS自2013年起移交该基金会管理。
自2010年3月推出第一个发行版Box Turtle以来,ROS以每年1~2个版本的节奏已经发行了多个版本。ROS作为次级操作系统,官方推荐基于Ubuntu操作系统运行,并跟随Ubuntu发布节奏发布,在偶数年发布维护周期为5年的长期演进版本,奇数年发布维护周期为2年的普通版本。但2019年未发布新版本。ROS已发布的历史版本如表1-1所示。
发行版本 | 发布日期 | 截止日期 | Ubuntu版本 | 备注 |
---|---|---|---|---|
Melodic Morenia | 2018年5月 | 2023年5月 | 18.04 LTS | LTS |
Lunar Loggerhead | 2017年5月 | 2019年5月 | 17.04 | |
Kinetic Kame | 2016年5月 | 2021年5月 | 16.04 LTS | LTS |
Jade Turtle | 2015年5月 | 2017年5月 | 15.04 | |
Indigo Igloo | 2014年7月 | 2019年4月 | 14.04 LTS | LTS |
Hydro Medusa | 2013年9月 | 2015年5月 | 13.04 | |
Groovy Galapagos | 2012年12月 | 2014年7月 | 12.10 | |
Fuerte Turtle | 2012年4月 | 12.04 LTS | ||
Electric Emys | 2011年8月 | 11.10 | ||
Diamondback | 2011年3月 | 11.04 | ||
C Turtle | 2010年8月 | 10.04 LTS | ||
Box Turtle | 2010年3月 | 9.10 |
文章采用ROS版本为ROS Melodic,操作系统为Ubuntu 18.04 LTS 64bit。操作系统安装教程请参考作者上一篇博文推荐的链接。
详细安装步骤如下:
为了安装ROS Melodic,首先需要在Ubuntu 18.04 LTS上添加安装源到source.list,方法如下:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
另外ROS提供了国内的安装源,添加国内中国科学技术大学的安装源示例代码如下:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
添加秘钥到本地的trusted数据库中并加以验证,方法如下:
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
若密钥服务器hkp://ha.pool.sks-keyservers.net:80无法添加成功,则可以尝试hkp://pgp.mit.edu:80或者hkp://keyserver.ubuntu.com:80。
在更新之前,需要安装公钥,否则无法验证签名,这一步也是原书没有的,需要朋友们注意,命令如下:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
更新Ubuntu 18.04 LTS的最新可用软件包列表:
sudo apt update
下面开始安装ROS,推荐安装桌面完整版,这样就可以将ROS、rqt、rviz、机器人通用库、2D/3D仿真器、导航、2D/3D感知等功能一次性安装完成。
安装之前,需要安装其他依赖库,一次性安装如下:
sudo apt install libvtk6-jni libvtk6-java libvtk6-dev libvtk6-qt-dev libpcl-dev
sudo apt install ros-melodic-pcl-conversions ros-melodic-pcl-ros ros-melodic-perception-pcl ros-melodic-perception
有的人之前安装过某些库,我的机器之前安装opencv时装过vtk7,版本不兼容,识别不到,所以不得已卸载后安装vtk6,最好把这些库的安装都执行一遍。
最后终于开始安装ROS Melodic,方法如下:
sudo apt install ros-melodic-desktop-full
如果希望安装特定的ROS程序包,则可以首先查看当前可用的程序包列表,然后选择自己需要的程序包进行安装,示例代码如下:
apt-cache search ros-melodic
sudo apt install ros-melodic-slam-gmapping
开始使用ROS之前,还需要安装rosdep,rosdep是ROS一些核心组件的运行基础,会在编译ROS源码时检查和安装程序包依赖。安装ROS方法如下:
sudo rosdep init
# fix-permission限制权限为当前用户
sudo rosdep fix-permissions
# 可能由于网络原因会失败,多运行几次即可
rosdep update
默认情况下,ROS_HOME的路径为"~/.ros",该目录保存着日志文件和测试结果文件。另外,第一次启动ROS时,需要进行环境变量配置,命令如下:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
查看环境变量是否设置正确,命令如下:
env | grep ROS
笔者查看环境变量结果如下:
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
ROS_ROOT=/opt/ros/melodic/share/ros
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROS_PYTHON_VERSION=2
ROS_PACKAGE_PATH=/opt/ros/melodic/share
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=melodic
至此,ROS的核心程序包安装完毕。
为了构建和管理开发者自己的ROS工作空间,还需要安装rosinstall,方法如下:
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
成功安装后,就可以体验ROS和创建ROS应用了。
如果希望基于ROS源代码进行学习,则可以下载完整的ROS源代码,方法如下:
sudo apt-get install python-rosdep python-rosinstall-generator python-rosinstall python-wstool build-essential
mkdir ~/ros_catkin_ws/ && cd ~/ros_catkin_ws/
rosinstall_generator desktop_full --rosdistro melodic --deps --tar > melodic-desktop-full.rosinstall
wstool init -j8 src melodic-desktop-full.rosinstall
ROS将使用wstool进行版本管理。如果希望在网络发生中断后可以以断点续传的方式继续下载,那么命令如下:
wstool update -j 8 -t src
至于如何通过ROS源代码学习ROS的更多实现细节,可以在Ubuntu 18.04 LTS下通过安装oepngrok进行浏览,笔者打算在下一篇文章中介绍。
turtlesim时ROS系统自带的小海龟仿真程序。分步骤介绍如下:
为了启动turtlesim,首先运行roscore启动ROS的节点管理器,方法及结果如下:
simon@bert:~$ roscore
... logging to /home/simon/.ros/log/6b8e52d4-1597-11ea-ade6-000ec6c8c4f9/roslaunch-bert-2594.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://bert:44267/
ros_comm version 1.14.3
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.3
NODES
auto-starting new master
process[master]: started with pid [2604]
ROS_MASTER_URI=http://bert:11311/
setting /run_id to 6b8e52d4-1597-11ea-ade6-000ec6c8c4f9
process[rosout-1]: started with pid [2615]
started core service [/rosout]
roscore会启动一个ROS Master、一个ROS参数服务器和一个名为rosout的日志节点。ROS Master默认运行于11311端口,如果想指定端口,可参照如下:
roscore -p 11312
利用Ctrl+Shift+T快捷键另外打开一个终端,启动turtlesim的节点turtlesim_node,命令如下:
simon@bert:~$ rosrun turtlesim turtlesim_node
[ INFO] [1575452194.366400729]: Starting turtlesim with node name /turtlesim
[ INFO] [1575452194.371807393]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
如果希望小海龟能够移动,可以启动turtlesim的键盘控制节点turtle_teleop_key,利用Ctrl+Shift+T快捷键另外再打开一个终端,输入命令:
simon@bert:~$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.