连载文章,长期更新,欢迎关注:
写在前面
第1章-ROS入门必备知识
1.1 ROS简介
1.2 ROS开发环境搭建
1.3 ROS系统架构
1.4 ROS调试工具
1.5 ROS节点通信
1.6 ROS其他重要概念
1.7 ROS2.0展望
第2章-C++编程范式
第3章-OpenCV图像处理
第4章-机器人传感器
第5章-机器人主机
第6章-机器人底盘
第7章-SLAM中的数学基础
第8章-激光SLAM系统
第9章-视觉SLAM系统
第10章-其他SLAM系统
第11章-自主导航中的数学基础
第12章-典型自主导航系统
第13章-机器人SLAM导航综合实战
虽然ROS系统很复杂,但其附带了大量工具用于ROS开发调试。这些调试工具大致分为命令行工具和可视化工具两种,掌握这些工具能够大大提高开发效率。
ROS命令行工具能在shell终端直接输入使用,类似于Linux命令。这里对经常用到的命令进行介绍,比如运行执行、信息显示、catkin操作和功能包操作这几类相关命令。想了解更多ROS命令,可以参考官方wiki教程。
1.运行执行相关的命令
运行执行相关的命令主要分为3个,即roscore、rosrun和roslaunch。其中roscore是启动主节点master的命令,rosrun是启动单个节点的命令,roslaunch是同时启动多个节点的命令。这几个命令的具体用法,如表1-1所示。
表1-1 运行执行相关的命令
命令 |
说明 |
roscore |
启动主节点master |
rosrun [功能包名] [节点名] |
启动指定功能包中的某个节点 |
roslaunch [功能包名] [launch文件名] |
通过launch文件启动多个节点 |
2.信息显示相关的命令
rosnode是跟节点相关的命令,rostopic是跟话题相关的命令,rosservice是跟服务相关的命令,rosparam是跟参数相关的命令,rosmsg是跟消息类型相关的命令,rossrv是跟服务类型相关的命令,rosbag是跟数据包相关的命令。这几个命令的具体用法,如表1-2所示。
表1-2 信息显示相关的命令
命令 |
说明 |
rosnode list rosnode kill [节点名] rosnode cleanup rosnode info [节点名] |
列出当前运行的所有节点 强制停止指定节点的运行 删除失连节点的注册信息 显示指定节点的状态信息 |
rostopic list rostopic echo [话题名] rostopic pub [话题名] [消息类型] [数据] rostopic hz [话题名] rostopic info [话题名] |
列出当前可用的所有话题 实时显示话题中的消息数据 向指定话题发送消息数据 显示指定话题中消息发布频率 显示指定话题的状态信息 |
rosservice list rosservice args [服务名] rosservice call [服务名] [数据] rosservice info [服务名] |
列出当前可用的所有服务 显示指定服务的消息参数 向指定服务发起请求 显示指定服务的状态信息 |
rosparam list rosparam get [参数名] rosparam set [参数名] rosparam dump [文件名] rosparam load [文件名] rosparam delete [参数名] |
列出当前可用的所有参数 获取指定参数的值 设置指定参数的值 将参数保存到指定文件 从文件中载入参数值 删除指定参数 |
rosmsg list rosmsg show [消息类型] rosmsg package [功能包名] |
显示ROS中可用的所有消息类型 显示指定消息类型的格式 显示指定功能包中用到的所有消息类型 |
rossrv list rossrv show [消息类型] rossrv package [功能包名] |
显示ROS中可用的所有服务类型 显示指定服务类型的格式 显示指定功能包中用到的所有服务类型 |
rosbag record [可选项] [话题名] rosbag play [bag文件名] rosbag info [bag文件名] |
将指定话题中的消息录制到bag文件 将bag文件中话题的消息回放出来 查看bag文件的状态信息 |
3.catkin操作相关的命令
catkin_init_workspace是用于初始化catkin工作空间的命令,catkin_create_pkg是创建功能包的命令,catkin_make是编译功能包的命令。这几个命令的具体用法,如表1-3所示。
表1-3 catkin操作相关的命令
命令 |
说明 |
catkin_init_workspace |
初始化catkin工作空间 |
catkin_create_pkg [功能包名] [依赖功能包] ... |
创建一个功能包 |
catkin_make [可选项] |
编译功能包 |
4.功能包操作相关的命令
rospack是查询功能包信息的命令,rosinstall是安装功能包更新的命令,rosdep是功能包依赖的命令。这几个命令的具体用法,如表1-4所示。
表1-4 功能包操作相关的命令
命令 |
说明 |
rospack list rospack depends [功能包名] rospack profile |
列出本机上所有功能包 查询指定功能包的所有依赖功能包 为系统重建功能包索引 |
rosinstall |
为功能包自动安装更新 |
rosdep check [功能包名] rosdep install [功能包名] rosdep init rosdep update |
检测指定功能包的依赖关系 安装指定包的依赖功能包 rosdep初始化 rosdep更新 |
除了上面提到的命令行工具,这里的可视化工具是很好的补充。下面重点介绍rviz和rqt两个开发过程中频繁使用的可视化工具。
1.rviz
rviz是ROS自带的三维可视化工具,可以让用户通过图形界面非常方便地开发调试ROS。比如可视化显示激光雷达、深度相机、超声波等传感器的数据、显示机器人的三维几何模型、显示路径规划实时轨迹、发送导航目标点等。启动rviz的方法很简单,命令如下。
#在终端,先启动roscore
roscore
#在另一个终端,启动rviz
rviz
rviz正常启动后,就会进入默认的主界面,如图1-8所示。界面主要分为上侧菜单区、左侧显示内容设置区、中间显示区、右侧显示视角设置区、下侧ROS状态区。
图1-8 rviz主界面
启动rviz界面后,首先要对Global Options进行设置,Global Options里面的参数是一些全局显示相关的参数。其中的Fixed Frame参数是全局显示区域依托的坐标系,我们知道机器人中有很多坐标系,坐标系之间有各自的转换关系,有些是静态关系,有些是动态关系,不同的Fixed Frame参数有不同的显示效果。在rviz中用户可以灵活地添加想要显示的ROS话题,点击rviz界面左下角add按钮,选择你要查看的话题就行了。
在后面的机器人导航中,会经常用到rviz中设置初始位置和发送目标点的功能。点击2D Pose Estimate按钮,然后在地图中找到机器人大致的位置后再次点击鼠标左键并保持按下状态,拖动鼠标来指定机器人的朝向,最后松手就完成对机器人初始位置的设定了。通过2D Nav Goal按钮让机器人自动导航到我们的指定的位置。
为了能使用当前设置好的显示项启动以后的rviz,可以将当前的rviz显示风格以配置文件的方式保存,下次启动rviz时只需要载入这个配置文件就能进入相应的显示风格。很简单,点击rviz左上角file菜单,在下拉中选择Save Config As,在弹出来的对话框中给配置文件取一个名字,然后直接Save,*.rviz配置文件会被保存到系统中rviz默认的目录。下次启动rviz时,通过点击rviz左上角file菜单,在下拉中选择Open Config,打开相应的配置文件就行了。
2.rqt
除了上面的rviz可视化工具,ROS中还提供了支持用户自己开发的图形化工具rqt。rqt是基于Qt来开发的,因此rqt用户可以自由添加和编写插件来实现自己的功能。启动rqt的方法很简答,命令如下。
#在终端,先启动roscore
roscore
#在另一个终端,启动rqt
rqt
rqt正常启动后,就会进入默认的主界面,如图1-9所示。主界面内置了很多默认的插件,显示、调试、配置等丰富的功能。
图1-9 rqt主界面
由于rqt包含的插件太多了,很难列举出所有插件来逐一介绍。下面列出一些很常用的rqt插件:
除了通过从上面的rqt主界面启动rqt的各种插件,还可以在命令行中直接启动某个rqt插件。以rqt_graph插件为例,启动方法如下。
#在终端,先启动roscore
roscore
#在另一个终端,启动rqt_graph插件
rqt_graph
Github下载:github.com/xiihoo/Books_Robot_SLAM_Navigation
Gitee下载(国内访问速度快):gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation
【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.