【ROS进阶】5000字解析如何确定ROS编程中数据类型(消息类型)


在ROS中数据类型(消息)是话题发布的基本形式,明确ROS基本数据类型(消息),是基于ROS编程的基础。
通常有以下两种编程场景,需要明确话题的消息类型(数据类型):

一、已有ROS仿真器,自行编写控制器节点

利用ROS进行仿真的时候,通常仿真器已具有明确的subscriber规则,如:turtlesim和gazebo等。此时我们在编写控制器Publisher节点时,需要参照仿真器已有的话题名、消息类型等进行编程。
通常步骤可以分为四步:1、明确话题名2、明确话题消息;3、明确消息定义;4、编写控制器。

1、利用rostopic list明确仿真器可用的topic

roscore
rosrun turtlesim turtlesim_node 
rostopic list

2、rostopic info 找到对应话题的类型

3、rosmsg show查找msg定义

4、编写控制器节点

在turtle_sim的例子中,可以查看turtle_teleop_key节点代码深入理解,消息类型的使用。
(1)确定功能包的绝对路径

teleop_turtle_key.cpp的路径为:https://github.com/ros/ros_tutorials/blob/noetic-devel/turtlesim/tutorials/teleop_turtle_key.cpp

(2)编程采用的数据类型
① 加载头文件:

#include<总包/消息名.h>


②发布类型模板:

nh.advertise<总包名::消息名>


③作业:
用消息定义一个对象。为对象的特定成员赋值。

补充:Twist定义的介绍

geometry_msgs为点、向量和姿态等常见几何原语提供数据类型。这些Primative旨在提供通用数据类型,并促进整个系统的互操作性。
Twist消息是geometry_msgs下的一个数据类型,存放了两组vector3,每个vector3又分别存放了3个float64类型变量

二、自己构建Publisher和Subscriber节点

自己构建Publisher和Subscriber节点,自己挑选合适的msg。主要需要自己对常见的数据类型有一定的了解。

(一)ROS中消息类型的结构框架

1、common_msgs

ROS中C++和Python最基础的数据类型包为common_msgs。其中包含常见的多种消息类型:动作消息( actionlib_msgs ),诊断消息 ( diagnostic_msgs ), 几何消息( geometry_msgs ),导航消息( nav_msgs )和常见的传感器消息 ( sensor_msgs )。

2、geometry_msgs

3、Twist类型定义

4、vetor3的定义

5、对象赋值

(二)ROS中常见的消息类型

1、geometry_msgs消息类型

Point 点
float64 x ,float64 y,float64 z
Point32 一般使用Point,大规模点云使用Point32
float32 x,float32 y,float32 z
PointStamped
(1)std_msgs/Header header 包含坐标系和时间戳信息
(2)geometry_msgs/Point point 点
Polygon 多边形
geometry_msgs/Point32[] points
PolygonStamped
(1)std_msgs/Header header
(2)geometry_msgs/Polygon polygon
Pose 位姿:
(1)geometry_msgs/Point position 位置
(2)geometry_msgs/Quaternion orientation 姿态,即方向
Pose2D 2d平面的位姿
float64 x,float64 y,float64 theta
PoseArray 位姿序列:
(1)std_msgs/Header header
(2)geometry_msgs/Pose[] poses
PoseStamped 位姿:
(1)std_msgs/Header header
(2)geometry_msgs/Pose pose
PoseWithCovariance:
(1)geometry_msgs/Pose pose 即(x, y, z, X 旋转, Y旋转, Z旋转)
(2)float64[36] covariance协方差
PoseWithCovarianceStamped:
(1)std_msgs/Header header
(2)geometry_msgs/PoseWithCovariance pose
Quaternion 四元数旋转
float64 x,float64 y,float64 z,float64 w
QuaternionStamped
Transform 坐标系之间的变换:
(1)geometry_msgs/Vector3 translation 平移向量
(2)geometry_msgs/Quaternionrotation 旋转向量
TransformStamped
Twist 速度
(1)geometry_msgs/Vector3 linear 线速度
(2)geometry_msgs/Vector3 angular角速度
TwistStamped
TwistWithCovariance
TwistWithCovarianceStamped
Vector3
向量float64 x,float64 y,float64 z
Vector3Stamped
Wrench 力
(1)geometry_msgs/Vector3 force 力
(2)geometry_msgs/Vector3 torque 扭矩
WrenchStamped

2、nav_msgs消息类型

1 GridCells 栅格单元
(1)std_msgs/Header header头,时间戳与坐标系
(2)float32 cell_width,float32 cell_height宽度与高度
(3)geometry_msgs/Point[] cells数组

2MapMetaData 占有率栅格地图数据
(1)time map_load_time 地图被加载的时间
(2)float32 resolution 分辨率(m/cell)
(3)uint32 width,uint32 height
(4)geometry_msgs/Pose origin 真实世界中的原点 (m,m,rad) 图像中的(0,0)点

3 OccupancyGrid 2d栅格地图
(1)Header header
(2)nav_msgs/MapMetaData info 地图信息
(3)int8[] data 占有率地图数据序列,概率为【0-100】,未知为-1

4 Odometry 估计的位姿与速度
(1)std_msgs/Header header 位姿所在坐标系
(2)string child_frame_id 速度所在坐标系
(3)geometry_msgs/PoseWithCovariance pose 位姿
(4)geometry_msgs/TwistWithCovariance twist 速度

5 Path 路径
(1)Header header
(2)geometry_msgs/PoseStamped[] poses 代表路径的三维点坐标数组

(三)ROS中基本的消息类型

http://wiki.ros.org/msg

Primitive TypeSerializationC++Python2 / Python3
boolunsigned 8-bit intuint8_tbool
int8signed 8-bit intint8_tint
uint8unsigned 8-bit intuint8_tint
int16signed 16-bit intint16_tint
uint16unsigned 16-bit intuint16_tint
int32signed 32-bit intint32_tint
uint32unsigned 32-bit intuint32_tint
int64signed 64-bit intint64_tlong int
uint64unsigned 64-bit intuint64_tlong int
float3232-bit IEEE floatfloatfloat
float6464-bit IEEE floatdoublefloat
stringascii stringstd::stringstr bytes
timesecs/nsecs unsigned 32-bit intsros::Timerospy.Time
durationsecs/nsecs signed 32-bit intsros::Durationrospy.Duration

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年5月6日
下一篇 2022年5月6日

相关推荐

此站出售,如需请站内私信或者邮箱!