ROS机器人操作系统学习笔记(四)常用工具
4.1 Gazebo
ROS中的工具就是帮助我们完成一系列的操作,使得我们的工作更加轻松高效。ROS工具的功能大概有以下几个方向:仿真、调试、可视化。本节课我们要学习的Gazebo就是实现了仿真的功能,而调试与可视化由Rviz、rqt来实现,我们下节再依次介绍。
4.1.1 认识Gazebo
对于Gazebo,大家可能并不陌生,因为我们在前面的学习过程中已经数次用到这个仿真环境,无论是在topic通信还是在service通信中,我们的demo都是在Gazebo中实现。
Gazebo是一个机器人仿真工具,模拟器,也是一个独立的开源机器人仿真平台。当今市面上还有其他的仿真工具例如V—Rep、Webots等等。但是Gazebo不仅开源,也是是兼容ROS最好的仿真工具。
Gazebo的功能很强大,最大的优点是对ROS的支持很好,因为Gazebo和ROS都由OSRF(Open Source Robotics Foundation)开源机器人组织来维护,Gazebo支持很多开源的物理引擎比如最典型的ODE。可以进行机器人的运动学、动力学仿真,能够模拟机器人常用的传感器(如激光雷达、摄像头、IMU等),也可以加载自定义的环境和场景。
和我们前面的实例测试一样,我们打开教材的模拟场景,输入roslaunch robot_sim_demo robot_spawn_launch
操作说明
- 平移:鼠标左键
- 旋转:鼠标滚轮中键
- 放缩:鼠标滚轮
- 界面左侧是控制面板
- 导入模型就在控制面板的insert,可以直接拖入模拟空间,也可以按需自制模型拖入。
4.2 RViz
RViz(the Robit Visualization tool)机器人可视化工具,可视化的作用是直观的,它极大的方便了监控和调试等操作。
4.2.1 演示
依然打开教材的模拟场景,输入roslaunch robot_sim_demo robot_spawn_launch
,之后在命令行打开新的终端直接输入$ rviz
打开工具。
和Gazebo一样,也会显示出一个3D环境,不过操作上有所不同,具体操作如下:
- 平移:鼠标滚轮中键
- 旋转:鼠标左键
- 放缩:鼠标滚轮
- 左侧控制面板,可以添加插件
RViz的插件种类繁多功能强大,非常适合我们开发调试ROS程序。
RViz和Gazebo是我们常用的ROS工具,更好的利用这些工具是我们ROS进阶的基础。
4.3 rqt
rqt是一个基于qt开发的可视化工具,拥有扩展性好、灵活易用、跨平台等特点,主要作用和RViz一致都是可视化,但是和RViz相比,rqt要高级一个层次。
4.3.1 命令
- rqt_graph :显示通信架构
- rqt_plot :绘制曲线
- rqt_console :查看日志
rqt_graph
rqt_graph是来显示通信架构,也就是我们上一章所讲的内容节点、主题等等,当前有哪些Node和topic在运行,消息的流向是怎样,都能通过这个语句显示出来。此命令由于能显示系统的全貌,所以非常的常用。
rqt_plot
rqt_plot将一些参数,尤其是动态参数以曲线的形式绘制出来。当我们在开发时查看机器人的原始数据,我们就能利用rqt_plot将这些原始数据用曲线绘制出来,非常的直观,利于我们分析数据。
rqt_console
rqt_console里存在一些过滤器,我们可以利用它方便的查到我们需要的日志。
4.3.2 测试
- 首先打开我们教材的模拟场景,输入
roslaunch robot_sim_demo robot_spawn_launch
- 输入命令语句
rqt_graph
,显示出了当前环境下运行的Node和topic,十分直观的看到通信结构以及消息流向。注意在椭圆形的代表节点,矩形代表topic。 - 输入命令语句
rqt_plot
,显示出曲线坐标窗口,在上方输入框里添加或者删除topic,比如我们查看速度,可以在框里设置好topic后,移动机器人,就可以看到自动绘制的线速度或者角速度曲线。 - 输入命令语句
rqt_console
,显示日志的输出,配合rqt_logger_level
查看日志的级别。
4.4 Rosbag
rosbag是一个这是一套用于记录和回放ROS主题的工具。它旨在提高性能,并避免消息的反序列化和重新排序。rosbag package提供了命令行工具和代码API,可以用C++或者python来编写包。而且rosbag命令行工具和代码API是稳定的,始终保持向后的兼容性。
4.4.1 命令
rosbag对软件包来操作,一个包是ROS用于存储ROS消息数据的文件格式,rosbag命令可以记录、回放和操作包。指令列表如下:
命令 | 作用 |
---|---|
cheak | 确定一个包是否可以在当前系统中进行,或者是否可以迁移。 |
decompress | 压缩一个或多个包文件。 |
filter | 解压一个或多个包文件。 |
fix | 在包文件中修复消息,以便在当前系统中播放。 |
help | 获取相关命令指示帮助信息 |
info | 总结一个或多个包文件的内容。 |
play | 以一种时间同步的方式回放一个或多个包文件的内容。 |
record | 用指定主题的内容记录一个包文件。 |
reindex | 重新索引一个或多个包文件。 |
4.5 Rosbridge
Rosbridge是一个用在ROS系统和其他系统之间的一个功能包,就像是它的名字一样,起到一个"桥梁"的作用,使得ros系统和其他系统能够进行交互.Rosbridge为非ROS程序提供了一个JSON API,有许多与Rosbridge进行交互的前端,包括一个用于Web浏览器交互的WebSocket服务器。Rosbridge_suite是一个包含Rosbridge的元程序包,用于Rosbridge的各种前端程序包(如WebSocket程序包)和帮助程序包。
4.5.1 协议与实现
Rosbridge是一个用在ROS系统和其他系统之间的一个功能包,就像是它的名字一样,起到一个"桥梁"的作用,使得ros系统和其他系统能够进行交互.Rosbridge为非ROS程序提供了一个JSON API,有许多与Rosbridge进行交互的前端,包括一个用于Web浏览器交互的WebSocket服务器。Rosbridge_suite是一个包含Rosbridge的元程序包,用于Rosbridge的各种前端程序包(如WebSocket程序包)和帮助程序包。
Rosbridge是基于ROS的,首先要确保自己正确的安装完成了ROS之后可以启动终端执行命令:
sudo apt-get install ros- <rosdistro> -rosbridge-server
中间的为自己的ROS版本,依照自己的版本进行安装.
4.6 moveit!
2012年,一款叫做moveit!的移动操作软件诞生了,moveit!最初在Willow Garage由Sachin Chitta,Ioan Sucan,Gil E. Jones,Acorn Pooley,Suat Gedikli,Dave Hershberger开发,它融合了研究者在运动规划、操纵、3D感知、运动学、控制和导航方面的最新进展,为操作者提供了一个易于使用的平台,使用它可以开发先进的机器人应用,也被广泛应用于工业,商业,研发和其他领域。由于以上特性,moveit!一跃成为在机器人上最广泛使用的开源操作软件,截止2017年,已经被用于超过65台机器人。
4.6.1 使用
moveit!的使用通过为用户提供接口来调用它,包括C++、Python、GUI三种接口。ROS中的move_group
节点充当整合器,整合多个独立组件,提供ROS风格的Action和service。move_group
通过ROS topic和action与机器人通讯,获取机器人的位置、节点等状态,获取数据再传递给机器人的控制器。
roup节点充当整合器,整合多个独立组件,提供ROS风格的Action和service。
move_group`通过ROS topic和action与机器人通讯,获取机器人的位置、节点等状态,获取数据再传递给机器人的控制器。
move_group
节点获取到节点状态信息或者机器人变换信息时候,会通过控制器的接口去处理这些信息,比如进行坐标转换、规划场景、3D感知。另外,move_group
的结构比较容易扩展,不仅具有独立的能力如抓放,运动规划,也可扩展自公共类,但实际作为独立的插件运行。moveit!系统结构图如下: