ROS2学习笔记(二)从turtlesim学习ROS2节点

从turtlesim学习ROS2节点

前言

学习ROS2的路,并不能通过学习ROS1代替,因为ROS2的“内核”不同于ROS1,必须认认真真从头开始重新学习。

Ubuntu版本:20.04

ROS版本:Foxy

学习笔记回顾

1.turtlesim

  1. 确认是否安装turtlesim
$ ros2 pkg executables turtlesim
---
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

出现以上回复则说明安装成功,否则使用如下命令安装turtlesim功能包:

$ sudo update
$ sudo apt install ros-foxy-turtlesim
  1. 跑turtlesim_node包
$ ros2 run turtlesim turtlesim_node

小海龟模拟器如下所示:
在这里插入图片描述

  1. 让小海龟动起来
$ ros2 run turtlesim turtle_teleop_key

根据终端中的提示通过键盘控制小海龟移动
在这里插入图片描述

2.ROS2中的节点介绍

一个完整的机器人系统就是由多个节点组成,每个节点完成自己的工作。与ROS1不同的是ROS2中的每个可执行程序(C++,Ppthon)可以包含一个或者多个节点。

3.ROS2 run

ROS2 run命令相当于ROS1中的rosrun命令。主要从该命令启动可执行文件,命令如下:

$ ros2 run <package_name> <executable_name>

因为turtlesim_node是节点的可执行程序,就能用ros2 run启动,命令如下所示:

$ ros2 run turtlesim turtlesim_node

这样就能启动上面所示的小海龟界面。

可见功能包为turtlesim,可执行程序为turtlesim_node

我们虽然直到包名和可执行程序名,但是还是不知道节点名,通过ros2 node list查看

4.ros2 node list

当我们需要监视节点的工作情况时,这个命令非常有用。这个命令相当与ROS1中的rosnode list

打开一个新的终端,输入以下命令:

$ ros2 node list

可以看到返回的节点名称:

/turtlesim

我们再打开一个终端,启动小海龟键盘控制可执行程序:

$ros2 run turtlesim turtle_teleop_key

不出意外,使用ros2 node list命令后,可以发现多了一个turtle_teleop_key可执行文件的节点

5.重映射(比较重要)

重映射可以帮助我们重新定义节点的属性(节点名称,话题名称和服务名称等)。比如我们可以修改turtlesim_node的节点名称,命令如下所示:

$ ros2 run turtlesim_node --ros-args --remap __node:=my_turtle

此时会和往常一样打开一个新的小海龟界面,但是和之前启动的界面并不冲突,再次查看node list如下图所示:
在这里插入图片描述

之所以没有冲突,是因为新开的界面的节点名称为my_turtle,而不是turtlesim

6.ros2 node info

如果我们想获取节点的更多信息,需要使用该命令查询:

$ ros2 node info <node_name>

如果想了解my_turtle节点的消息:

$ ros2 node info /my_turtle

立马可以看到很多信息,有订阅者、发布者、服务和Action等信息:

/my_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

我们可以使用该命令查看所有节点的详细信息。

总结

节点是ROS系统中的基本元素,主要完成机器人系统中的某项具体任务。

Reference:

https://docs.ros.org/en/foxy/Tutorials/Understanding-ROS2-Nodes.html

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~

为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/118853467