前言
顾名思义,标记工具就是在数据可视化的基础上加上用户自定义标记,用来强调某种特征或者添加用户自己想加上的东西
visualization stack 现在已经包含到RViz中,但是我们主要还是要学习这个包集中的东西
目录
参考
visuallization_msgs/markers
Sending Basic Shapes to RViz
基本原理
- 注册一个visualization::marker消息,定义好,然后发出去,RViz在收到后在指定位置显示特定形状
关键代码
- package.xml
1 |
|
- CMakeList.txt
1 |
|
- .cpp
1 |
|
Sending Points and lines
- 本质同发送基本形状,都是定义一个消息,然后发送即可,只是点和线可能是数组数据结构,定义起来麻烦一点
Interactive Marker
基本原理
不仅是将特定形状显示在RViz中,而且用户可以使用鼠标和上下文菜单进行交互,从而实现更复杂的任务
依然是由消息类型来定义,visualization_msgs/InteractiveMarker,这个消息包含一个上下文菜单,多个控件(visualization_msgs/InteractiveMarkerControl消息类型表示)。这些控件用来定义交互式标记的各个部分,每一部分都有不同功能。
要使用交互式标记,需要在节点中实例化一个InteractiveMarkerServer对象,作为与RViz联系的代理服务器,RViz作为客户端向节点发送不同的消息通知,以此来产生交互。
相关的消息类型有
visualization_msgs/InteractiveMarker
visualization_msgs/InteractiveMarkerControl
visualization_msgs/InteractiveMarkerFeedback
此外还有MenuHandler
Simple Interactive Marker Server
关键思想
InteractiveMarker–>control–>Marker,标记包含控件,类间是组合关系,均是一对多。
咦?为什么同时有将control赋给marker的属性和将marker赋给control的属性?原来如此
Server给RViz发送Update消息,RViz给Server发送Feedback,Server处定义对Feedback的响应函数
关键代码
1 |
|
Basic Control
告诉你怎样制作一个6-DOF的控件(包括在控制时控件和场景一起移动的,和控件固定的)
关键代码
1 |
按钮
基本思路
就像菜单栏中的按钮一样
默认是响应鼠标左键
关键代码
1 |
|
Context Menu
基本思路
- 将静态菜单附着到一个交互式标记(Interactive Marker)上
多客户端单服务器交互
意义
可以同时有多个RViz客户端控制一个或多个交互式控件Marker
这个例子实现了一个简易乒乓球游戏
以后再学吧。
[为RViz写插件]
- 感觉没有学这个的需求啊。。。
使用QT和librviz进行窗口程序设计
- 这个相当于是使用QT对RViz进行简单的二次开发,感觉应该要学,既不需要深度了解QT,又可以编出像样的界面,哈哈!