Day7 ROS 工具介绍

在前几天我们大概理解了整个 ROS 的架构,接下来要介绍几个 ROS 开发上蛮常用到的工具。

今天主要介绍的套件为以下几种

  • Gazebo
  • RViz
  • rqt
  • rosbag
  • rosbridge

以上这五款工具是目前 ROS 开发最常用到的几个工具之一,Gazebo 可以说是目前 ROS 领域中模拟做的最好的一款工具,RViz 则是目前将实时数据进行视觉化部分做的最棒的一款了,rqt 则是一款将资讯流进行可视化的一款软件,有了他我们可以很方便地去观察整个资讯的流通方式跟通讯架构。rosbag是一款对 package 进行使用的一个指令,并提供了 API 可以让我们去使用。 rosbridge 是一款让 ROS 跟外界能够进行沟通的一个工具。

依照以上几个包我们可以整理成四个方向:

  • 模拟
    • Gazebo
  • 可视化
    • RViz
    • rqt
  • 指令
    • rosbag
    • rosbridge

Gazebo

当然模拟类型的工具包有很多种,像是 carsim 就是在做汽车模拟的还有 Webots 、 v rep 等等,有在开发人型机器人的应该都有听过 Webots , 有兴趣的读者也可以去使用看看。

那为什麽我们使用 Gazebo 呢? 主要是他跟 ROS 是一家人,都是由OSRF(Open Source Robotics Foundation)来共同维护,所以他对 ROS 新版本的支援通常是最快的也是最好的,Gazebo 他也支持了很多物理引擎,像是最典型的 ODE (Open Dynamics Engine),他可以进行机器人运动学、动力仿真学、多种感测器与真实场地的模拟。

这边要注意的是模拟并不只单纯只是模拟而已,而是要去设计出一个跟现实应用场景很像的一个场景,你需要去考量光照、物理距离等等的参数,在设定好後再让我们的机器人在模拟环境中跑跑看,是否可以完成我们所想要他完成的任务,像是自驾车、无人机等等的都是可以先在模拟中进行,并收集相对应的数据来进行改良,毕竟有些实验是需要机器人在暴雨、台风等等极端环境下进行测试,若可以在模拟中先进行调整後,可以让我们在实际实验时,能节省大量的金钱与时间。

操作

界面的左测是控制区

  • 平移:滑鼠左键
  • 旋转:滑鼠滚轮中键
  • 放缩:滑鼠滚轮
  • 导入模型的位置在控制区的 insert ,或是直接拖曳进去空间。

在这边只是给一个基本介绍,详细的使用会在後面的文章中来提到~

RViz

RViz(the Robit Visualization tool) , 他是一款可视化工具,他提供了级时的监测,像是 SLAM 蛮长会用到这个工具的,他跟 Gazebo 相同都会弹出一个 3D 的空间,但是他使用上会有点不同,并且 Gazebo 是一个虚拟的空间,但是 RViz 他是真实的空间。 他在左侧的插件控制区,相当是一群订阅者,在负责接收讯息,并将其显示出来。

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

rqt

rqt 他是基於 QT 来进行开发的一个工具,所以他的扩展性很高,我们可以自己去写一些插件来用。

我们常用的功能有这三个功能

  • rqt_graph
    • 显示通讯架构
  • rqt_plot
    • 绘制曲线
  • rqt_console
    • 查看 log ,并且会依照严重等级来做区分,帮助我们看 log

rqt_graph

上面是一张小乌龟跟他的控制器所绘制出来的 rqt_graph , 其中圆圈包住的便是我们的 node,你可以看到两个节点是怎麽去做沟通的,节点跟节点间会有一个箭头,代表着他讯息发送的方向,然後我们可以把 Nodes only 改成 Nodes Topics 就可以看到里面的 topic 了

rqt_plot

接下来是 rqt_plot 的部分,在这个功能呢我们可以监听某一个节点他现在的状态,并将其进行绘图,你要监听哪一个 Topic 需要在在面 Topic 那边去打上你要的 Topic ,这样就可以了

rqt_console

rqt_console 里有一些选项,可以让我们把不要的资讯给隐藏,我们可以利用他来查到我们需要的 log。

rosbag

他的用途在於查看过去的纪录并且去看 VCR(回放) 我们的资讯, 我们通常会用 record 这个指令,并指定说我们要去记录哪一个 topic ,接下来他会生成一个 .bag 档,我们可以拿它来做回放,查看那一段时间发生了什麽。

指令

纪录某些 topic 到 bag 中

rosbag record <topic 名称>

纪录所有 topic

rosbag record -a

回到 bag , 也就是去回放刚刚录下来的东西

rosbag play <bag-files>

其他的指令

指令 作用
cheak 确定一个 package 是否可以在系统中运行,或者是否可以迁移。
decompress 压缩一个或多个 package 文件。
filter 解压一个或多个 package 文件。
fix 在 package 中修复消息,以便在目前的系统中播放。
help 获取帮助讯息
info 总结一个或多个 package 的内容。
reindex 重新索引一个或多个 package 文件。

Rosbridge

Rosbridge 是一个用在 ROS 中和其他系统之间的一个工具,就跟他的名子一样,把他当成桥梁就对了,让 ROS 跟其他的系统能够互相的跑来跑去,而 Rosbridge 给非 ROS 的程序一个 JSON 的 API

Rosbridge 主要包含两部分: 协议 (Potocol)和 执行 (Implementation)

Protocol

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

规范如下:

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

此规范与跟你用哪一种语言和传输方式是没有任何关系的,只要你可以发送 JSON 的传输方式都是可以用的,也就是说可以跟 Rosbridge protocol 进行交流,并且与 ROS 进行沟通.

Implementation

Rosbridge_suite 是满足了 Rosbridge Protocol 并提供 WebSocket 传输层套件的集合。

这些套件包含:

  • Rosbridge_library

核心 rosbridge 的套件包。 Rosbridge_library 负责拿到 JSON 并将命令发送到 ROS,反过来接收处理 ROS 发过来的讯息,将他转换为 JSON ,并将结果转交给非 ROS 程序去跑。

  • rosapi

通过服务调用来跟某些 ROS 进行联系与运行,这些服务通常为 ROS 客户端保留的服务. 这些动作包含拿参数和设参数,拿到 topic list 等等。

  • rosbridge_server :

虽然 Rosbridge_library 提供 JSON 到 ROS 的转换,但它将传输层留给其他人。Rosbridge_server 提供了一个 WebSocket 的串连方式,所以浏览器可以与 ROS 进行通讯。
Roslibjs 是一个浏览器的 JavaScript 套件 ,可以让rosbridge_server 跟 ROS 互传讯息。

他的原程序码在这边~ Github

结语

今天的部分就到这边,今天介绍了一些 ROS 的开发工具如何使用,在後面会有一些实作的部分,会让读者更佳的熟悉这些工具如何进行使用
#Arm Arm Platforms


<<:  Day7# Array & Slice(上)

>>:  [DAY 07] EC2 - 关於储存空间 EFS

【C++】Binary Search

Binary Search 是一个搜寻演算法~ 它的时间复杂度只有O log(n)~ 但使用它之前要...

html div水平并列

我们昨天写出了标题栏上的一个按钮,今天想要多写几个按钮出来,但是当我们复制了多个but1的div时,...

[DAY 30] 复刻 Rails - View 威力加强版 - 2

终於到最後一天了,那就不罗嗦直接进入正题吧! 关於 rendering.rb 之前我们的做法是把 r...

课堂笔记 - 物联网概论(4)

应用层 1.节能 智慧电网系统 自动将感测到家庭家电上的用电资料并上传到网路 电力公司才可以藉由智...

Guaranteed Results with Updated SASM PDF Questions

Passing Scrum SASM certification exam with minimum...