小乌龟节点启动
1. 启动小乌龟模拟器节点
ros2 run turtlesim turtlesim_node
2. 启动小乌龟键盘输入节点
ros2 run turtlesim turtle_teleop_key
小乌龟操作原理
1. 节点信息查看
小乌龟启动过程中,我们启动了两个可执行的程序:turtlesim_node和turtle_teleop_key 。可以通过命令查看当前的启动的节点:
查看小乌龟节点
通过命令可以查看/turtlesim节点的详情
ros2 node info /turtlesim
命令运行后,可以看到以下结果:
/turtlesimSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEvent/turtle1/cmd_vel: geometry_msgs/msg/TwistPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/turtle1/color_sensor: turtlesim/msg/Color/turtle1/pose: turtlesim/msg/PoseService Servers:/clear: std_srvs/srv/Empty/kill: turtlesim/srv/Kill/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/turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters/turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/turtlesim/get_parameters: rcl_interfaces/srv/GetParameters/turtlesim/list_parameters: rcl_interfaces/srv/ListParameters/turtlesim/set_parameters: rcl_interfaces/srv/SetParameters/turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomicallyService Clients:Action Servers:/turtle1/rotate_absolute: turtlesim/action/RotateAbsoluteAction Clients:
rosnode info命令可以查看当前节点的一些信息:
- Publications:此节点上定义的发布者
- Subscriptions:此节点上定义的订阅者
- Services:此节点上定义的服务
- 进程id,占用的网络端口
-
查看控制节点
同理,我们也可以通过ros2 node info查询/teleop_turtle节点的信息
ros2 node info /teleop_turtle
结果如下:
/teleop_turtleSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEventPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/turtle1/cmd_vel: geometry_msgs/msg/TwistService Servers:/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters/teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters/teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters/teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomicallyService Clients:Action Servers:Action Clients:/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
现在我们大致可以搞清楚一些通讯的关系:
/teleop_turtle节点存在一个发布者,往/turtle1/cmd_vel主题中发布数据。
- /turtlesim节点存在一个订阅者,去/turtle1/cmd_vel主题中获取数据。
2. 可视化工具查看节点关系
rqt_graph工具提供了可视化的工具方便我们查看这种节点间的关系:ros2 run rqt_graph rqt_graph

图像显示,/teleop_turtle 通过主题 /turtle1/cmd_vel 给 /turtlesim 进行数据传递。 /teleop_turtle 为具备 Publisher 功能的节点。 /turtlesim 为具备 Subscriber 功能的节点。 /turtle1/cmd_vel 为 publisher 和 subscriber 通讯的主题。
调试工具控制小乌龟
1. rqt模拟数据发送
rqt
2. 通过命令行模拟数据发送
ros2 topic pub /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}}"
小乌龟坐标系相关
面板
- 面板的坐标原点在左下脚,即左下角为(0,0)
- 面板的X轴是自左向右,数值是0开始正向增长
- 面板的Y轴是自下向上,数值是0开始正向增长
-
小乌龟
-
小乌龟移动指令参数
我们通过ros2 topic命令可以获得小乌龟的移动数据类型为geometry_msgs/msg/Twist
ros2 topic type /turtle1/cmd_vel
通过ros2 interface命令可以查看数据的详细格式:
ros2 interface proto geometry_msgs/msg/Twist
输出的格式为:
geometry_msgs/msg/Twist"linear:x: 0.0y: 0.0z: 0.0angular:x: 0.0y: 0.0z: 0.0"
linear指的是线速度,小乌龟只用到了x,代表着乌龟向前进的线速度
angular指的是角速度,小乌龟只用到了z,代表着乌龟旋转的角速度
