目录
致谢:ROS赵虚左老师
Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
参考赵虚左老师的实战教程
一、roscore
roscore 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
roscore 将启动:
-
ros master
-
ros 参数服务器
-
rosout 日志节点
二、rosrun
rosrun 包名 可执行文件名 === 运行指定的ROS节点
比如:rosrun turtlesim turtlesim_node
三、roslaunch
官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。
roslaunch 包名 launch文件名
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
node ---> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
四、话题通信
话题通信适用于不断更新的数据传输相关的应用场景
编写发布方实现
编写订阅方实现
编辑配置文件
编译并执行
C++版本
发布方:
订阅方:
主要是:订阅消息后的回调函数
回调函数:处理订阅到的话题数据(受外界数据影响的可调用函数 )
Python版本
发布方:
订阅方:
不同语言实现节点通信(耦合)
使用C++进行发布 -- 可以使用Python进行订阅 (数据互通)
ROS的强大之处
五、自定义话题通信msg
在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty.... 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如: 激光雷达的信息... std_msgs 由于描述性较差而显得力不从心,这种场景下可以使用自定义的消息类型
msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:
-
整形:int8, int16, int32, int64 (或者无符号类型: uint*)
-
浮点:float32, float64
-
字符:string
-
时间:time, duration
-
other msg files
-
数组:variable-length array[] and fixed-length array[C]
ROS中还有一种特殊类型:Header
,标头包含时间戳和ROS中常用的坐标帧信息。会经常看到msg文件的第一行具有Header标头
。【重用他人的msg代码重要】
添加文件
配置/编译相关msg文件
两个重要msg文件
使用C++自定义
Vscode修改
包含头文件
发布方:
需将发布方的函数替换成自定义的消息数据类型
配置文件
订阅方:
同样的也需要编译文件
使用Python自定义
Vscode修改
将消息类型的python文件保存到vscode的jison文件里面
发布方:
注意给权限
文件配置
订阅方:
2023.10.28
仙桃数据谷