首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ROS技术点滴——rviz plugin

rviz是ROS官方提供的一款3D可视化工具,几乎我们需要用到的所有机器人相关数据都可以在rviz中展现。当然由于机器人系统的需求不同,很多时候rviz中已有的一些功能仍然无法满足我们的需求,这个时候rviz的plugin机制就派上用场了。

rviz作为一种可扩展化的视图工具,可以使用插件机制来扩展丰富的功能,进行二次开发,我们在rviz中常常使用的激光数据可视化显示、图像数据可视化显示,其实都是官方提供的插件。

所以,我们完全可以在rviz的基础上,打造属于我们自己的机器人人机界面

— 目标—

在《Mastering ROS for Robotics Programming》的第六章,讲解了一个发布速度控制的rviz plugin,这里我们就根据这个plugin的实现来学习。

plugin的整体效果如下:

从上边的图片我们有一个大致的感性认识:

首先,这是一个可视化的界面,在ros的编程中,好像没有可视化的编程语句,那么如何实现可视化编程呢?如果你使用过ROS的rqt工具箱,应该就会想到Qt,没错,Qt是一个实现GUI的优秀框架,ROS中的可视化工具绝大部分都是基于Qt进行开发的,rviz的plugin也不例外。所以我们需要了解Qt的一些相关知识。

其次,这个界面里包含三个输入框,分别对应topic名称、线速度值、角速度值,这就需要我们读取用户的输入,然后转换成ROS的topic,这里也会涉及到Qt中的重要概念——信号、槽,类似于回调函数,可以自行百度学习一下。

好的,接下来,我们就分步骤看一下如何实现这个plugin。

— 创建功能包—

首先,我们创建一个功能包,用来放置plugin的所有相关代码:

这个功能包依赖于rviz,因为rviz是基于Qt开发的,所以省去了对Qt的依赖。

— 代码实现—

接下来,我们在功能包的src文件夹下开始做代码的实现,这个plugin相对简单,只需要一个cpp文件就可以完成,当然还要有头文件。

1. 头文件

首先是头文件teleop_pad.h:

2. cpp文件

接下来是cpp代码文件 teleop_pad.cpp:

代码文件就是这样,并没有很多代码,已经加入了中文注释,应该还是比较好理解的。

— 编译—

为了编译成功,还需要完成一些编译文件的设置。

1. plugin的描述文件

在功能包的根目录下需要创建一个plugin的描述文件 plugin_description.xml:

2. package.xml

然后在 package.xml文件里添加plugin_description.xml。

3. CMakeLists.txt

当然, CMakeLists.txt文件也必须要加入相应的编译规则:

现在就可以使用catkin_make编译了!

— 实现效果—

编译成功后,运行rviz:

运行前一定要source devel文件夹下的setup脚本,设置环境变量,否则会找不到插件

点击“OK”,就会弹出“TeleopPanel”插件啦:

分别填写三行所对应的内容:

然后打开一个终端查看消息:

OK,实现一个rviz的plugin是不是很简单,重点是理解ROS和Qt的结合使用。使用类似的方法和Qt的编程技巧,就可以基于rviz打造属于自己的人机交互界面了!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180709G1UIWI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券