rqt_plot工具——ROS中查看变量时间趋势线

rqt_plot工具——ROS中查看变量时间趋势线

工欲善其事,必先利其器

本篇博文依旧是小白教程,最近在写利用二次规划方法优化机械臂关节轨迹的代码。想要通过查看误差变量的时间趋势线看一下控制效果。百度了一下,有rqt_plot这个亲民的小白包。

1.百度到了什么?

https://blog.csdn.net/ktigerhero3/article/details/80927310
这个博主的博文讲得比较清楚,就没有继续往下搜了。

2.然后看到了什么?

注意,由于rqt_plot开启了一个节点,所以要先运行roscore,把master运行起来。

$ roscore
$ rosrun rqt_plot rqt_plot

这个时候,我们会看到弹出了一个窗口,先不管他。知己知彼百战不殆,姑且从宏观的角度看一下这个节点的信息。

$ rostopic list

然后没有弹出什么特别的与rqt_plot相关的东西,也就是说,这个rqt_plot本身不会发布消息。

$ rosnode list

可以看到一个匿名发布的节点,也就是说,可以任意开n个rqt_plot也是不影响的。
$ rosnode info rqt_gui_py_node_xxx
查看一下这个节点的信息,看到该节点没有订阅消息,提供了两种服务,没有发布任何消息。

$ rosnode info /rqt_gui_py_node_23864 
--------------------------------------------------------------------------------
Node [/rqt_gui_py_node_23864]
Publications: 
 * /rosout [rosgraph_msgs/Log]

Subscriptions: None

Services: 
 * /rqt_gui_py_node_23864/get_loggers
 * /rqt_gui_py_node_23864/set_logger_level


contacting node http://dianyehuang-G7-7588:33125/ ...
Pid: 23864
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS

3.怎么用?

从功能上看,rqt_plot需要订阅消息,接收这些消息然后按时间序列画出曲线。在弹出的窗口中,我们可以在topic的文本框中填写我们自己编写的发布的“topic”。接下来需要考虑的是,消息的类型应该是怎么样子的?由前面的博主的代码中我们可以看到,可以是单个变量,也可以是向量。Vector3的类型是怎么样的?我们可以通过rosmsg show 来看一下:

$ rosmsg show geometry_msgs/Vector3
float64 x
float64 y
float64 z

可见,当我们自定义msg的时候,能够对应上变量就可以了。

4. 测试代码

自定义msg

rqtpltMsg,msg
float64 x
float64 y
int32 z

rqt_plot工具——ROS中查看变量时间趋势线_第1张图片对应代码如下:

#include 
#include "my_package/rqtpltMsg.h"
#include 
#include 

using namespace std;

int main(int argc, char** argv)
{
    ros::init(argc,argv, "test_rqtplt");
    ros::NodeHandle nh;
    ros::Publisher my_pub = nh.advertise<my_package::rqtpltMsg>("my_msg_plt",1);

    my_package::rqtpltMsg msg;
    ros::Rate loopRate(200);
    double t=0;
    while(ros::ok()){
        msg.x=0.1*sin(2*t);
        msg.y=0.2*cos(t);
        msg.z=0;
        my_pub.publish(msg);
        loopRate.sleep();
        t+=1.0/200.0;
    }
}

你可能感兴趣的:(ROS,机械臂控制)