ROS2学习

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下的刷新图标没有显示

截屏2021-02-10 上午10.33.41.png

通过命令改变话题的名字

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>

部分是可选的,比如Empty类型的服务就没有任何参数:

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参数值,利用文件保存和加载参数

updatedupdated2021-02-182021-02-18