首页 >> 大全

第三篇:ROS参数加载、数据类型创建、通讯机制、定时器中断 (使用ROS的通讯机

2023-09-12 大全 19 作者:考证青年

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

TODO:写完再整理

文章目录 二、ROS可使用的数据类型 4.【】ROS提供的组件通用消息结构类型 (2)【常用】 (3)【常用】 (4)【常用】 (5)【机械臂轨迹】 (6)(7)(8)(9)(10) (3)组件通用消息结构类型用法 5.【】使用谷歌推荐的定义数据接口 三、ROS通讯机制【话题通讯、服务通讯、动作通讯】 2.订阅对象 (4)注意 2.服务通讯编程步骤 3.客户端对象 3.动作通讯编程步骤 (2)步骤 四、ROS定时器中断 五、Boost库线程API 2.boost可以理解成和mian()的while()或者定时器一样,有异同点 3.Boost库使用注意4.Boost库的优势 六、Ros使用话题通讯、服务通讯、动作通讯、定时器、boost库的选择

前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对** ROS通讯机制及定时器中断(使用ROS的通讯机制、定时器和C++相关线程技术) **做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章

提示:以下是本篇文章正文内容

一、ROS参数加载方法() 1.【.h文件】

用结构体实现,结构体写在一个共用的里面
参数数据在.h中进行了初始化赋值的!!!【防盗标记--盒子君hzj】

2.【.yaml文件】

用.yaml文件加载参数的方法
(1)在.yaml文件里面编写变量名、变量值、数据类型
(2)ROS和其他系统都有API(LoadFile)读取文件里面的数据YAML::Node config = YAML::LoadFile("/root/config/pure_pursuit.yaml");(3)通过config指令赋值参数velocity_source_ = config["velocity_source"].as();

3.【.文件】

在.launch文件用param指令

二、ROS可使用的数据类型 1.【】std自带提供的基础消息结构类型

Std_msgs是ros基础的数据类型结构,Std_msgs是std库里面定义的数据类型都有,包括int/double等等(1)std_msgs定义了常用的编程数据结构类型,本质上上也是用.msg编译成.h使用的(2)std_msgs数据类型定义在opt/ros/melodic/share/std_msgs/msg(3)std_msg一般包含bool、char、int、float、double【防盗标记--盒子君hzj】

2.【.h结构体数据类型】自定义结构体.h文件

自己建一个文件夹使用.h文件用结构体的方法定义接口用结构体实现,结构体写在一个共用的.h文件面,可供多个功能包使用技巧:
现在的规划部分接口是一层套一层的,一般写接口都是先写一个简单的接口,【防盗标记--盒子君hzj】
不够用了在用一个大一点的接口,大的接口把小弟额接口的内容包含进去

3.【】(.msg、.srv、.)ROS自定义消息结构类型 (1)原理

.msg文件统一放在一个msg文件夹里,ros通过、将.msg文件和.srv文件自动转换成.h文件。用户只需定义简单的.msg和.srv文件即可,.msg、.srv、.最终都会编译成.h文件(Ros话题的msg,srv,文件都被\.xml编译成为.h文件),在源文件中使用这些消息类型的时候在源文件中对应的.h文件

(2)参考链接

【防盗标记–盒子君hzj】

(3)步骤

(1)下创建srv,msg文件夹,编写.msg/.srv文件

(1).msg、.srv文件含义:.msg文件用于定义ros话题消息,.srv文件用于定义ros服务消息
(2)【编写方法】现在的规划部分接口是一层套一层的,一般写接口都是先写一个简单的接口,不够用了在用一个大一点的接口,大的接口把小弟额接口的内容包含进去
注意
【防盗标记--盒子君hzj】
(1)接口类型的编写和调用要对应上
(2)学会去写接口的转换函数,用于接口的转换

(2)打开.xml文件添加编译和执行依赖及

(1)message_generation【添加消息内容生成编译依赖】
(2)message_runtime【添加该依赖的额外依赖】

(3)打开.txt文件。添加编译包依赖,添加运行依赖,添加.srv/.msg文件,添加生成消息函数

(1)、find_packge(......message_generation)【找到这个依赖】
(2)、catkin_package(roscpp rospy message_runtime)【编译这个依赖】
(3)、add_message_file(FILES,my.msg)【添加我自己写的.msg文件】
(4)、generation_message(DEPENDENCIES std_msgs)【生成消息】
【防盗标记--盒子君hzj】

(4)调用自己定义的数据结构的方法

(1)在源文件包含.h文件
#include "std_msgs/String.h"//常用的变量形式
#include "std_msgs/XXX.h"//常用的变量形式
注意,用到哪一种数据类型就包含哪种数据类型(2)类成员、接口是可以通过“.”进行跳转的
(1)用msg的数据类型定义相关对象:visualization_msgs XXX xxx
(2)对msg对象进行赋值:xxx.header = a;xxx.stamp = b;xxx.对象子元素 = c;

4.【】ROS提供的组件通用消息结构类型 (1)具体用法参考wiki

【查看数据类型的元素强烈建议再wiki上查找–关系到使用方法】【防盗标记–盒子君hzj】

(2)通用消息结构类型

的数据类型:的数据类型包括stamp、、seq

(1)【常用】

(1)介绍

为常见几何图元(如点、向量和姿势)提供消息【防盗标记–盒子君hzj】

(2)消息类型

(1)point【点集】

(1)Point
float64 x  ,float64 y,float64 z(2)Point32
float32 x,float32 y,float32 z  一般使用Point,大规模点云使用Point32(3)PointStamped
std_msgs/Header header 包含坐标系和时间戳信息  
geometry_msgs/Point point 点

(2)poses【几何–位姿集】

(1)Pose2Dfloat64 x,float64 y,float64 theta(2)Pose【防盗标记--盒子君hzj】(1)geometry_msgs/Point position 位置 (2)geometry_msgs/Quaternion orientation 姿态,即方向(3)PoseStamped(1)std_msgs/Header header  (2)geometry_msgs/Pose pose(4)PoseArray(1)std_msgs/Header header(2)geometry_msgs/Pose[] poses(5)PoseWithCovariance【带有协方差的位姿】(1)geometry_msgs/Pose pose   即(x, y, z,  X 旋转, Y旋转,  Z旋转)(2)float64[36] covariance协方差(6)PoseWithCovarianceStamped【带有协方差和时间戳的位姿】(1)std_msgs/Header header     (2)geometry_msgs/PoseWithCovariance pose

(3)【四元素–位姿集】

(1)Quaternionfloat64 x,float64 y,float64 z,float64 w(2)QuaternionStamped【防盗标记--盒子君hzj】

(4)【几何–矢量集】

(1)Vector3float64 x,float64 y,float64 z(2)Vector3Stamped

(5)Twist【速度–矢量集】

(1)Twist 速度(1)geometry_msgs/Vector3 linear 线速度(2)geometry_msgs/Vector3 angular角速度(2)TwistStamped
(3)TwistWithCovariance
(4)TwistWithCovarianceStamped

(6)【力–矢量集】

(1)Wrench(1)geometry_msgs/Vector3 force 力【防盗标记--盒子君hzj】(2)geometry_msgs/Vector3 torque 扭矩(2)WrenchStamped

(7)【坐标系之间的变换】

(1)Transform(1)geometry_msgs/Vector3 translation 平移向量(2)geometry_msgs/Quaternionrotation 旋转向量
(2)TransformStamped

(2)【常用】

(1)介绍

    visualization_msgs是处理可视化特定数据的高级包(如rviz)使用的一组消息。visualization\u msgs中的主要消息是visualization\u msgs/Marker。标记消息用于将可视化“标记”(如框、球体、箭头、线等)发送到可视化环境(如rviz)rviz可视化的话题数据也是有一定的数据格式的,可以参考链接:http://www.ros.org/wiki/rviz/DisplayTypesVisualization_msgs的数据类型可以直接赋值进行rviz可视化,其他的格式的数据类型要转换成Visualization_msgs的数据类型才能进行可视化visualization_msgs的path数据类型在rviz中会默认连接起来,point数据类型在rviz中默认仅仅显示一个点【防盗标记--盒子君hzj】

(2)消息类型

中断通信_定时中断显示实验_

(1)Grid

沿平面显示 2D 或 3D 网格

(2)Grid Cells

从网格中绘制单元格,通常是从导航堆栈中的代价地图中绘制障碍物

/

(3)Laser Scan

显示来自激光扫描的数据,具有渲染模式、累积等的不同选项【防盗标记–盒子君hzj】

/

(4)Point Cloud(2)

显示来自点云的数据,具有不同的渲染模式、累积等选项

/ , /

(5)Map

在地平面上显示地图

/

(6)

允许程序员通过主题显示任意原始形状

/, /

(7)Path

显示导航中的路径

/Path

(8)Point

将一个点绘制为一个小球体

/

(9)Pose

将姿势绘制为箭头或轴

/

(10)Pose Array

绘制一个“云”箭头,一个用于姿势数组中的每个姿势

/

(11)

将多边形的轮廓绘制为线。

/

(12)

随着时间的推移积累里程计姿势【防盗标记–盒子君hzj】

/

(13)Range

显示代表声纳或红外距离传感器距离测量值的锥体

/Range

(14)

显示处于正确姿势(由当前 TF 变换定义)的机器人的视觉表示

(15)TF

显示tf转换层次结构

(16)Axes

显示一组轴

(17)

显示投入到机器人每个旋转关节上的力【防盗标记–盒子君hzj】

/

(18)

从相机的角度创建一个新的渲染窗口,并将图像叠加在它上面

/Image , /

(19)Image

创建一个带有图像的新渲染窗口

/Image

(20)

显示来自一个或多个交互式标记服务器的 3D 对象,并允许鼠标​​与它们交互

/

中断通信_定时中断显示实验_

(21)

将扳手绘制为箭头(力)和箭头 + 圆圈(扭矩)

/

(3)【常用】

(1)介绍

是专门定义给导航包使用的

(2)消息类型

(1)【网格阵列】

二维网格中的单元阵列
(1)float32 cell_width
(2)float32 cell_height
(3)geometry_msgs/Point[] cells

(2)【占据网格数据】

记录占据网格数据
(1)time map_load_time
(2)float32 resolution
(3)uint32 width
(4)uint32 height
(5)geometry_msgs/Pose origin

(3)【二维栅格地图】

表示二维网格图,其中每个单元表示占用的概率,在占据网格数据的基础上,添加概率信息
(1)std_msgs/Header header
(2)nav_msgs/MapMetaData info
(3)int8[] data
【防盗标记--盒子君hzj】

(4)【里程计】

对自由空间中的位置和速度的估计
(1)【时间戳】std_msgs/Header header
(2)【坐标系】string child_frame_id
(3)【位置】geometry_msgs/PoseWithCovariance pose
(4)【速度】geometry_msgs/TwistWithCovariance twist

(5)Path【路径】

机器人要跟随的路径的一组姿势
(1)std_msgs/Header header
(2)geometry_msgs/PoseStamped[] poses

(4)【常用】

参考资源

(1)Joy相关

Joy
JoyFeedback
JoyFeedbackArray【防盗标记--盒子君hzj】

(2)IMU相关

Imu	

(3)Laser相关

LaserEcho
LaserScan
MultiEchoLaserScan

(4)相关

Image
CameraInfo
CompressedImage
ChannelFloat32

(5)相关

PointCloud
PointCloud2
PointField【防盗标记--盒子君hzj】

(6)Joint相关

JointState
MultiDOFJointState

(7)其他传感器

BatteryState
FluidPressure
Illuminance
MagneticField
NavSatFix
NavSatStatus
Range
RegionOfInterest
RelativeHumidity【防盗标记--盒子君hzj】
Temperature
TimeReference

(5)【机械臂轨迹】

(1)介绍

【常常用于机械臂的轨迹规划】此包定义用于定义机器人轨迹的消息

(2)消息类型

std_msgs/Header header
string[] joint_names
trajectory_msgs/JointTrajectoryPoint[] points

float64[] positions
float64[] velocities
float64[] accelerations【防盗标记--盒子君hzj】
float64[] effort
duration time_from_start

ory

作用:
多自由度关节轨迹的表示(每个点是一个变换)沿轨迹的每个点将包括一个位置/速度/加速度数组,
该数组与关节名称数组具有相同的长度,
并且与关节名称数组具有相同的关节顺序。
std_msgs/Header header
string[] joint_names
trajectory_msgs/MultiDOFJointTrajectoryPoint[] points

geometry_msgs/Transform[] transforms
geometry_msgs/Twist[] velocities
geometry_msgs/Twist[] accelerations【防盗标记--盒子君hzj】
duration time_from_start

(6)

用于支持动作服务器的

(7) (8) (9) (10) (3)组件通用消息结构类型用法

ROS已经集成实现了,学会调用就行
步骤:
(1)先include进来
(2)编程的时候直接定义,调用就行
(3)消息结构包含什么东西wiki查一查,或者直接通过指令rosmsg查一查【防盗标记--盒子君hzj】

5.【】使用谷歌推荐的定义数据接口

三、ROS通讯机制【话题通讯、服务通讯、动作通讯】

(话题时群聊,服务时私聊,动作是奴隶,编程时话题和服务的套路时一样的)

1.话题通讯编程步骤 (1)图例

(2)步骤

1、创建一个发布者

1、在功能包的src文件夹下新建一个空白文档如talker.cpp 
2、编写程序内容
(1)、初始化ROS节点
(2)、向ROS Master注册节点信息,包括发布的话题名字和话题中的消息类型
(3)、按照一定频率循环发布信息【防盗标记--盒子君hzj】

tags: ros

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了