MAC中的ROS2入门教程
1.ROS2环境配置
mac上利用的是编译好的工程进行学习 主要是对小海龟进行实践,图片向图床传太麻烦了 与linux下一月的利用了古月居的贴图.
设置环境变量:
# bokaichen @ bokaideMacBook-Pro in ~ [10:24:51]
$ cd ros2_eloquent/ros2-osx
# bokaichen @ bokaideMacBook-Pro in ~/ros2_eloquent/ros2-osx [10:24:55]
$ source local_setup.bash
[connext_cmake_module] Warning: The location at which Connext was found when the workspace was built [[/Applications/rti_connext_dds-5.3.1]] does not point to a valid directory, and the NDDSHOME environment variable has not been set. Support for Connext will not be available.
2.小海龟仿真器
小海龟(Turtlesim)是ROS2中一个非常重要的入门级例程,通过海龟仿真,我们可以了解到很多ROS2的底层原理,涉及节点、话题、服务等核心概念。
启动
ros2 run turtlesim turtlesim_node
让海龟动起来 需要控制键盘的按键
ros2 run turtlesim turtle_teleop_key
通过命令查看小海龟后台运行了哪些功能:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
3.rqt工具
用来发布服务请求的,点击刷新按键之后,可以看到系统当前的所有服务。
mac下的刷新图标没有显示
通过命令改变话题的名字
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
这里就把turtle1/cmd_vel这个话题名更改为了turtle2/cmd_vel,现在该节点就可以控制turtle2啦,不信在该终端中点击键盘试一下。
节点(Node)
ROS2中的各项资源也是通过计算图(“ ROS (2) graph”)联系到一起的。计算图是一个由各种ROS2元素组成的网络,共同完成数据的传输,其中每一个完成具体功能的模块称之为“节点”(Node),例如控制车轮速度、获取雷达数据等,节点之间通过话题(Topic)、服务(Service)、动作(Actions)或者参数(Parameter)实现数据的收发。
ros2 node list
可以显示当前系统中运行的所有节点名称
重映射(Remapping)
利用重定义节点的属性,更改节点名称/话题名称/服务名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle
节点信息
ros2 node info /my_turtle
可以看到节点的很多信息,包括订阅者、发布者、服务、动作等等。
4 话题(topic)
节点之间则是通过一个至关重要的通道完成数据交换的,这个通道就是“话题”
一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。
mac下的rqt_graph
工具存在一定问题,无法显示节点之间的链接
ros2 topic lsit
利用topic -t
参数可以查看数据类型
ros2 topic echo
当发布数据时,就可以产生数据流
ros2 topic info
查看节点详细信息
ros2 interface show
查看话题的数据类型
ros2 interface show geometry_msgs/msg/Twist
Twist中包含了两个三维向量,分别表示线速度和角速度。
ros2 topic pub
直接通过命令行来发布一个话题消息
-once表示这个消息只发布一次就退出
需要会用YAML的语法来描述.
ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
利用特定频率发送
-rate
参数就表示频率,单位是HZ
ros2 topic hz
查看某个话题的发布频率
ros2 topic hz /turtle1/pose
5.服务(Service)
服务是基于客户端/服务器模型的通信机制,服务器端只在接收到客户端请求时才会提供反馈数据。
查看服务列表
ros2 service list
ros2服务类型
通过命令查看某一个服务的数据结构
ros2 service type /clear
Empty类型表示服务请求部分的数据是没有的,发送请求的时候不需要任何数据.
ros2 service lsit -t
查看某类型数据的所有服务
查找所有提供std_srvs/srv/Empty数据类型的服务
ros2 service find std_srvs/srv/Empty
查看服务数据类型的具体结构
ros2 interface show std_srvs/srv/Empty.srv
这里的“—”在服务的数据结构中是用来分割请求和应答两个部分的数据,这里只所以只有“—”,是应为Empty的请求和应答都不需要任何数据描述,类似一个出发信号。
ros2 interface show turtlesim/srv/Spawn.srv
Spawn服务的请求部分,由必须的x、y、theta和可选的name组成,应答数据则是name这个字符串。
通过终端发送服务请求
ros2 service call <service_name> <service_type> <arguments>
ros2 service call /clear std_srvs/srv/Empty
ROS2中的服务,简而言之,客户端发送请求,服务端完成处理后反馈应答,通信只会交互一次数据,不像话题是周期发送数据的。
6.参数(Parameter)
主要作用是对节点功能的配置,在ROS2中,每个节点都有自己的参数,这些参数可以用整型数、浮点数、布尔型数、字符串和列表来描述。
查看系统中的参数列表
ros2 param list
获取参数值
ros2 param get /turtlesim background_g
设置参数值
ros2 param set /turtlesim background_r 150
终端会显示设置成功,仿真器背景色会更改
只能改变一次 下次重启就会失效
保存参数
ros2 param dump /turtlesim
加载参数文件
ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
ROS2中的参数,通过命令行get或set参数值,利用文件保存和加载参数