在实际应用中,我们可能想发布自己的消息类型,就像众所周知的Twist类型或者航向信息Odometry一样,那么到底如何定制自己想要的消息类型?本文楼主以自己调试过程中监控机器人左右轮速度来进行演示。

文章内容包括:消息的定制和使用,以及使用rqt_plot来绘制曲线,建议大家先阅读官网教程,一些细节事项也可参见这个自定义消息msg。

首先在你的package创建msg文件夹,然后新建一个空白文档,命名为Num.msg,将下面的左右轮速度复制进去,保存。当然你可以按照官网方式在终端里输入指令来执行上的流程。

这里我定义来一个左右轮速度的如下:

float32 leftspeed
float32 rightspeed</span>

如果你想定义为数组类型的,如下:

float32[]  leftspeed
float32[]  rightspeed

注意这里的数组使用的是无长度限制的,也就是方扩号内没有东西。在使用的时候,不能够直接用数组赋值那样去做,它实际上是一个向量,往里面填充数据应使用c++中vector的push_back、resize之类的函数。详细内容可参看该ros answer,该例程使用push_back填充数据.也可以参见官方教程中laserscan的发布,laserscan消息中的ranges就是这样一个向量,在程序中laserscan是使用的resize先设定容器大小,再往里填充数据的.

  36     scan.ranges.resize(num_readings);//使用resize设定激光点的多少
  37     scan.intensities.resize(num_readings);
  38     for(unsigned int i = 0; i < num_readings; ++i){  39       scan.ranges[i] = ranges[i];    //再往里面填数据
  40       scan.intensities[i] = intensities[i];
  41     }

定义完以后,注意在package.xml文件里添加:

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

如果你之前创建过消息已经有了上面两句就不用再添加了。

然后在 CMakeLists.txt文件的find_packag里添加一些必要的语句,这个参见前面提到的官网教程。
最主要的是在add_message_files里添加上你自定义的消息。

## Generate messages in the 'msg' folder
add_message_files(FILESNum.msgcarOdom.msg
)

如果都完成以后,新开一个终端,输入一下指令,编译一下:

cd ~/catkin_ws
catkin_make

在程序中首先使用下面的语句引进该消息msg类型

from  beginner_tutorials.msg import Num       #beginner_tutorials 为自己建立的package,放在catkin_ws/src下

在程序中使用自己已经定义的消息:
car_speed = Num() #注意 消息的使用car_speed.leftspeed = a  car_speed.rightspeed = b 这里贴一个自己的完整程序在下面,这个程序里包含了Lz自己写的串口模块,这里贴出来只是让大家知道怎么调用自定义的msg。

程序如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import roslib;roslib.load_manifest('beginner_tutorials')
import rospy
from  beginner_tutorials.msg import Num       #beginner_tutorials 为自己建立的package,放在catkin_ws/src下import serial_lisenning as COM_ctr            #这是楼主自己写的串口模块,已经封装好,模块里是开线程不断读取串口
import globdef talker():rec_data = COM_ctr.SerialData( datalen = 2)  #启动监听COM 线程allport = glob.glob('/dev/ttyU*')port = allport[0]baud = 115200openflag = rec_data.open_com(port, baud)pub = rospy.Publisher('car_speed', Num)    #topicrospy.init_node('talker', anonymous=True)r = rospy.Rate(1000) # 1000hzwhile not rospy.is_shutdown():all_data = []if rec_data.com_isopen():all_data = rec_data.next()  #接收的数据组if all_data != []:car_speed = Num()                  #注意 消息的使用car_speed.leftspeed = all_data[0][0]car_speed.rightspeed = all_data[1][0]print car_speed.leftspeed, car_speed.rightspeedpub.publish(car_speed)r.sleep()if openflag:rec_data.close_lisen_com()  if __name__ == '__main__':try:talker()except rospy.ROSInterruptException: pass

注意每次新建的py文件都要使用在新的终端中,用下面的命令使程序可执行。

chmod +x  your_code.py

运行roscore以后,再开一个新的终端,运行:

rosrun beginner_tutorials bluetooth_msg.py

然后再在一个新的终端中,运行:

rqt_plot

输入我们的topic,就可一使用rqt_plot绘制曲线了。

ROS:定制自己的消息类型msg相关推荐

  1. Eigen类型与ROS中tf相关消息类型进行相互转换工具

    在ROS机器人编程资料书中,有个Eigen消息类型与TF相关消息类型进行互相转换的工具包感觉挺好使,修改一下方便以后使用. 1.头文件 #include <Eigen/Eigen> #in ...

  2. 【ROS wiki】ros wiki中查阅常见的消息类型

    ROS wiki系列文章简介:ROS wiki系列文章是本人ROS专栏下的子专题.该系列文章主要用来介绍:ROS初学者如何利用好ROS官方提供的ROS wiki平台,来查询ROS资料,了解ROS包的功 ...

  3. 【ROS】Ros 发布2d boundingbox消息

    有时候需要把目标检测输出的boundingbox发送到其他结点(比如跟踪结点)执行下游任务,因此需要在结点见发送消息,ros自带的消息类型不能满足我们的需求(有一个3d的boundingbox),需要 ...

  4. 我的Linux与ROS的不眠不休:从入门到入土(六)——自定义话题消息类型。

    ROS中,除了使用rosmsg list 列表中所展示的消息类型外,还可以通过在功能包下创建msg文件夹,添加msg文件,达成自定义消息类型的操作.   ROS自定义数据类型需要一个依赖包的支持 me ...

  5. Ubuntu18.04通过ros通信联调Carla0.9.13+罗技G29 ros_g29控制实车vehicle_status话题的转发与消息类型的转换twist——cmd并写入同一个launch

    前提:安装完carla,参考链接:https://editor.csdn.net/md/?articleId=131200896 可以安装二进制发布版本,这样启动方便很多 一.carla+罗技G29联 ...

  6. ROS学习十、无人机通信模块mavros(1)常用的mavros消息类型

    ROS学习十.无人机通信模块mavros(1)常用的mavros消息类型 前言 数传 全局位置 IMU惯导 本地位置 飞控命令 设置飞行位点.速度.加速度 系统状态 系统时间 其它 前言 mavros ...

  7. ros发布节点信息python_ROS Twist和Odometry消息类型使用(Python)

    消息类型: 1. Twist - 线速度角速度 通常被用于发送到/cmd_vel话题,被base controller节点监听,控制机器人运动 geometry_msgs/Twist geometry ...

  8. RocketMQ有哪些消息类型?springboot如何整合rocketMQ

    文章目录 1. rocketMQ的消息类型 1.1 消息的发送和接收方式 1.2 顺序消息 1.3 广播消息 1.4 延时消息 1.5 批量消息 1.6 过滤消息 1.7 事务消息 2. ACL权限控 ...

  9. ROS入门-10.话题消息的定义与使用

    不论是给海龟发布速度指令的Twist消息还是去订阅海龟位置的pose消息,二者都是已经在ros里定义好的可以直接使用的:而当ros定义好的消息没有办法满足我们使用要求,便需要自己来定义所使用的消息的类 ...

最新文章

  1. MySQL/MariaDB查询执行路径
  2. AutoML的相关链接大全
  3. webpack4--提取css到单独文件并且压缩css
  4. vba可以放服务器上处理文档,vba 用服务器运行 内存溢出
  5. C++ Opengl 3D世界源码
  6. collection配置说明
  7. 百度前端学院-基础学院-第四课
  8. knime实现python编写脚本
  9. 开发经常犯的错误之→【join表连接关联查询 】
  10. 分布式链路跟踪中的traceid和spanid代表什么?
  11. Go内存管理之代码的逃逸分析
  12. jQuery+CSS五类验证码(字母、数字、滑动、点击)
  13. Wifi万能钥匙已经被淘汰了!Github这个开源工具太好用了!
  14. Linux 磁带机型号,请教一下,爱华的磁带机型号大全,里面的字母什么意思?
  15. vivado下载地址和ISE下载地址
  16. 软考c语言题库,【中级】软考题库每日一练|4.4
  17. 教师人生格言积极向上的句子
  18. grafana是什么?
  19. android沉浸式状态栏、fitsSystemWindows、标题栏折叠
  20. 芯片PIC32MZ1024ECH100 (MCHP) -- 32位高性能单片机 up to 330 DMIPS

热门文章

  1. ajax如何做到异步交互,1.ajax简单实现异步交互
  2. 查看tsfresh提取(时间)序列特征的变量含义
  3. python sklearn生成分类、回归任务数据集(可选切分训练数据/测试数据)
  4. OpenCV检验物体尺寸
  5. cpan mysql dbd,Perl中DBI和DBD-mysql模块的安装
  6. python输出字母金字塔可以输入字母和行数的_python实现输入任意一个大写字母生成金字塔的示例...
  7. cfd软件对电脑配置要求_这种网格划分策略,让洁净和空调CFD实施周期压缩至0.3倍...
  8. 高阶篇:8.2)注塑模具讨论要点(讨模评审)
  9. 我的AndroidManifest
  10. c++容器之vector