ROS——常用工具

本章主要介绍了ROS开发时常常使用的工具,分别是:

  • Gazebo
  • RViz
  • rqt
  • rosbag
  • rosbridge
  • moveit!

这六个工具是我们开发常常用到的工具,gazebo是一种最常用的ROS仿真工具,也是目前仿真ROS效果最好的工具;RViz是可视化工具,是将接收到的信息呈现出来;rqt则是非常好用的数据流可视化工具,有了它我们可以直观的看到消息的通信架构和流通路径;rosbag则是对软件包进行操作的一个命令,此外还提供代码API,对包进行操作编写。rosbridge是一个沟通ROS和外界的功能包,moveit!是目前为止应用最广泛的开源操作软件。好好学习本章,熟练使用这几款工具对于我们的ROS学习和开发都有极大的好处,可以事半功倍。

5.1 Gazebo

5.1.1 简介

ROS中的工具就是帮助我们完成一系列的操作,使得我们的工作更加轻松高效。ROS工具的功能大概有以下几个方向:仿真、调试、可视化。本节课我们要学习的Gazebo就是实现了仿真的功能,而调试与可视化由Rviz、rqt来实现,我们下节再依次介绍。

5.1.2 认识 Gazebo

对于Gazebo,大家可能并不陌生,因为我们在前面的学习过程中已经数次用到这个仿真环境,无论是在topic通信还是在service通信中,我们的demo都是在Gazebo中实现。

Gazebo是一个机器人仿真工具,模拟器,也是一个独立的开源机器人仿真平台。当今市面上还有其他的仿真工具例如V—Rep、Webots等等。但是Gazebo不仅开源,也是是兼容ROS最好的仿真工具。

Gazebo的功能很强大,最大的优点是对ROS的支持很好,因为Gazebo和ROS都由OSRF(Open Source Robotics Foundation)开源机器人组织来维护,Gazebo支持很多开源的物理引擎比如最典型的ODE。可以进行机器人的运动学、动力学仿真,能够模拟机器人常用的传感器(如激光雷达、摄像头、IMU等),也可以加载自定义的环境和场景。

5.1.3 仿真的意义

仿真不仅仅只是做出一个很酷的3D场景,更重要的是给机器人一个逼近现实的虚拟物理环境,比如光照条件、物理距离等等。设定好具体的参数,让机器人完成我们设定的目标任务。比如一些有危险因素的测试,就可以让机器人在仿真的环境中去完成,例如无人车在交通环境复杂的交通要道的效果,我们就可以在仿真的环境下测试各种情况无人车的反应与效果,如车辆的性能、驾驶的策略、车流人流的行为模式等,又或者各种不可控因素如雨雪天气,突发事故,车辆故障等,从而收集结果参数指标信息等等,只有更大程度的逼近现实,才能得出车辆的真实效果。直到无人车在仿真条件下做到万无一失,才能放心的投放到真实环境中去使用,这即避免了危险因素对实验者的威胁,也节约了时间和资源,这就是仿真的意义。

通常一些不依赖于具体硬件的算法和场景都可以在Gazebo上仿真,例如图像识别、传感器数据融合处理、路径规划、SLAM等任务完全可以在Gazebo上仿真实现,大大减轻了对硬件的依赖。

5.1.4 演示

和我们前面的实例测试一样,我们打开教材的模拟场景,输入roslaunch robot_sim_demo robot_spawn_launch

扫描二维码关注公众号,回复: 4436812 查看本文章

操作说明

  • 平移:鼠标左键
  • 旋转:鼠标滚轮中键
  • 放缩:鼠标滚轮
  • 界面左侧是控制面板
  • 导入模型就在控制面板的insert,可以直接拖入模拟空间,也可以按需自制模型拖入。

5.1.5 小结

虽然Gazebo目前的功能还称不上强大,同时还存在着一些BUG,但是对于我们的入门学习也已经是足够了,随着版本的更新,Gazebo也在越来越强大。

5.2 RViz

5.2.1 简介

本节课介绍的是我们在ROS开发中非常常用的一个工具,基本上的调试和开发都离不开这个工具——RViz(the Robit Visualization tool)机器人可视化工具,可视化的作用是直观的,它极大的方便了监控和调试等操作。

5.2.2 演示

依然打开教材的模拟场景,输入roslaunch robot_sim_demo robot_spawn_launch,之后在命令行打开新的终端直接输入$ rviz 打开工具。

和Gazebo一样,也会显示出一个3D环境,不过操作上有所不同,具体操作如下:

  • 平移:鼠标滚轮中键
  • 旋转:鼠标左键
  • 放缩:鼠标滚轮
  • 左侧控制面板,可以添加插件

RViz的插件种类繁多功能强大,非常适合我们开发调试ROS程序。

5.2.3 差异

虽然从界面上来看,RViz和Gazebo非常相似,但实际上两者有着很大的不同,Gazebo实现的是仿真,提供一个虚拟的世界,RViz实现的是可视化,呈现接收到的信息。左侧的插件相当于是一个个的subscriber,RViz接收信息,并且显示。所以RViz和Gazebo有本质的差异。

5.2.4 小结

RViz和Gazebo是我们常用的ROS工具,更好的利用这些工具是我们ROS进阶的基础。具体的操作和使用可以参考我们的官方演示视频,跟着视频去实战演练,熟悉这两个工具。

5.3 rqt

5.3.1 简介

rqt是一个基于qt开发的可视化工具,拥有扩展性好、灵活易用、跨平台等特点,主要作用和RViz一致都是可视化,但是和RViz相比,rqt要高级一个层次,。

5.3.2 命令

  • rqt_graph :显示通信架构
  • rqt_plot :绘制曲线
  • rqt_console :查看日志

rqt_graph

rqt_graph是来显示通信架构,也就是我们上一章所讲的内容节点、主题等等,当前有哪些Node和topic在运行,消息的流向是怎样,都能通过这个语句显示出来。此命令由于能显示系统的全貌,所以非常的常用。

rqt_plot

rqt_plot将一些参数,尤其是动态参数以曲线的形式绘制出来。当我们在开发时查看机器人的原始数据,我们就能利用rqt_plot将这些原始数据用曲线绘制出来,非常的直观,利于我们分析数据。

rqt_console

rqt_console里存在一些过滤器,我们可以利用它方便的查到我们需要的日志。

5.3.3 实例测试

  1. 首先打开我们教材的模拟场景,输入roslaunch robot_sim_demo robot_spawn_launch
  2. 输入命令语句rqt_graph,显示出了当前环境下运行的Node和topic,十分直观的看到通信结构以及消息流向。注意在椭圆形的代表节点,矩形代表topic。
  3. 输入命令语句rqt_plot,显示出曲线坐标窗口,在上方输入框里添加或者删除topic,比如我们查看速度,可以在框里设置好topic后,移动机器人,就可以看到自动绘制的线速度或者角速度曲线。
  4. 输入命令语句rqt_console,显示日志的输出,配合rqt_logger_level查看日志的级别。

5.3.4 小结

rqt_graph这个功能是强大的,它使得我们初学者可以直观的看到ROS的通信架构和信息流,方便我们理解的同时,也使得我们能够最快的纠错等等。rqt_plot绘制数据曲线图,也是极大的帮助我们了解数据的变化态势,理解数据流的作用,用曲线来显示我们的操作,精确直观。rqt_console配合rqt_logger_level,查看日志,对于查找错误和DeBug都有很大帮助。

5.4 Rosbag

5.4.1 简介

rosbag是一个这是一套用于记录和回放ROS主题的工具。它旨在提高性能,并避免消息的反序列化和重新排序。rosbag package提供了命令行工具和代码API,可以用C++或者python来编写包。而且rosbag命令行工具和代码API是稳定的,始终保持向后的兼容性。

5.4.2 命令

rosbag对软件包来操作,一个包是ROS用于存储ROS消息数据的文件格式,rosbag命令可以记录、回放和操作包。指令列表如下:

命令 作用
cheak 确定一个包是否可以在当前系统中进行,或者是否可以迁移。
decompress 压缩一个或多个包文件。
filter 解压一个或多个包文件。
fix 在包文件中修复消息,以便在当前系统中播放。
help 获取相关命令指示帮助信息
info 总结一个或多个包文件的内容。
play 以一种时间同步的方式回放一个或多个包文件的内容。
record 用指定主题的内容记录一个包文件。
reindex

重新索引一个或多个包文件。

一、bag基本操作指令

$rosbag record -a

-all 保存所有的话题

$rosbag record  -O  w   /turtle1/cmd_vel  

接收话题 /turtle1/cmd_vel  的数据包,并命名为w.bag

$rosbag info <bag>

显示包的详细信息

$rosbag play <bag>

播放bag包

$rosbag play -r 2 <bag>

以2Hz的频率播放bag 包

二、bag_to_pcd

(1)从bag包转pcd

$ rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>
$ rosrun pcl_ros bag_to_pcd data.bag /velodyne_points ./wtj

从data.bag中提取/velodyne_points 话题数据到wtj 文件夹中。

(2)  通过发布,订阅实时转

 
  1. 检查topic:rosbag info XXX.bag

  2. 发送message: $ rosbag play XXX.bag

  3. 订阅需要的话题:$rosrun pcl_ros pointcloud_to_pcd input:=/velodyne_points

在当前目录下将话题实时转为pcd文件。

(3)显示生成的pcd文件

$pcl_viewer  1513648255448748.pcd

5.5 Rosbridge

5.5.1 简介

Rosbridge是一个用在ROS系统和其他系统之间的一个功能包,就像是它的名字一样,起到一个"桥梁"的作用,使得ros系统和其他系统能够进行交互.Rosbridge为非ROS程序提供了一个JSON API,有许多与Rosbridge进行交互的前端,包括一个用于Web浏览器交互的WebSocket服务器。Rosbridge_suite是一个包含Rosbridge的元程序包,用于Rosbridge的各种前端程序包(如WebSocket程序包)和帮助程序包。

5.5.2 协议和实现

Rosbridge主要包含两部分内容:协议(Potocol)和实现(Implementation)

协议

Rosbridge Protocol提供了非ROS程序与ROS通信的具体的格式规范,规范基于JSON格式,包括订阅topic,发布message,调用server,设置参数,压缩消息等等.例如订阅topic的格式规范如下:

{ "op": "subscribe",
    "topic": "/cmd_vel",
    "type": "geometry_msgs/Twist"
  }

此规范与所用的编程语言和传输方式无关,任何可以发送JSON格式的语音和传输方式都可以Rosbridge protocol进行交流,并且与ROS进行交互.

实现

Rosbridge_suite元程序包是实现Rosbridge Protocol并提供WebSocket传输层的包的集合。

这些软件包包括:

  • Rosbridge_library : 核心rosbridge软件包。Rosbridge_library负责获取JSON字符串并将命令发送到ROS,反过来接收处理ROS发过来的信息,将之转换为JSON字符串,并将结果转交给非ROS程序。

  • rosapi : 通过服务调用来访问某些ROS操作,这些服务通常为ROS客户端库保留的服务.这些操作包括获取和设置参数,获取主题列表等等。

    +

  • rosbridge_server : 虽然Rosbridge_library提供JSON到ROS转换,但它将传输层留给其他人。Rosbridge_server提供了一个WebSocket连接,所以浏览器可以与ROS“交谈”。Roslibjs是一个浏览器的JavaScript库,可以通过rosbridge_server与ROS进行交流。

源码

5.5.3 安装与使用

安装

Rosbridge是基于ROS的,首先要确保自己正确的安装完成了ROS之后可以启动终端执行命令:

sudo apt-get install ros- <rosdistro> -rosbridge-server

中间的为自己的ROS版本,依照自己的版本进行安装.

使用

关于更深入的使用,可以参考本课程的视频课程,简单的入门使用可以参考链接如下:

参考链接

5.6 moveit!

5.6.1 简介

2012年,一款叫做moveit!的移动操作软件诞生了,moveit!最初在Willow Garage由Sachin Chitta,Ioan Sucan,Gil E. Jones,Acorn Pooley,Suat Gedikli,Dave Hershberger开发,它融合了研究者在运动规划、操纵、3D感知、运动学、控制和导航方面的最新进展,为操作者提供了一个易于使用的平台,使用它可以开发先进的机器人应用,也被广泛应用于工业,商业,研发和其他领域。由于以上特性,moveit!一跃成为在机器人上最广泛使用的开源操作软件,截止2017年,已经被用于超过65台机器人。

5.6.2 使用

moveit!的使用通过为用户提供接口来调用它,包括C++、Python、GUI三种接口。ROS中的move_group节点充当整合器,整合多个独立组件,提供ROS风格的Action和service。move_group通过ROS topic和action与机器人通讯,获取机器人的位置、节点等状态,获取数据再传递给机器人的控制器。

move_group节点获取到节点状态信息或者机器人变换信息时候,会通过控制器的接口去处理这些信息,比如进行坐标转换、规划场景、3D感知。另外,move_group的结构比较容易扩展,不仅具有独立的能力如抓放,运动规划,也可扩展自公共类,但实际作为独立的插件运行。moveit!系统结构图如下:

官网链接

猜你喜欢

转载自blog.csdn.net/github_39611196/article/details/82956368