小乌龟节点启动
1. 启动小乌龟模拟器节点
ros2 run turtlesim turtlesim_node
2. 启动小乌龟键盘输入节点
ros2 run turtlesim turtle_teleop_key
小乌龟操作原理
1. 节点信息查看
小乌龟启动过程中,我们启动了两个可执行的程序:turtlesim_node和turtle_teleop_key 。可以通过命令查看当前的启动的节点:
查看小乌龟节点
通过命令可以查看/turtlesim节点的详情
ros2 node info /turtlesim
命令运行后,可以看到以下结果:
/turtlesim
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
/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/SetParametersAtomically
Service Clients:
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
rosnode info命令可以查看当前节点的一些信息:
- Publications:此节点上定义的发布者
- Subscriptions:此节点上定义的订阅者
- Services:此节点上定义的服务
- 进程id,占用的网络端口
-
查看控制节点
同理,我们也可以通过ros2 node info查询/teleop_turtle节点的信息
ros2 node info /teleop_turtle
结果如下:
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service 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/SetParametersAtomically
Service 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.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
"
linear指的是线速度,小乌龟只用到了x,代表着乌龟向前进的线速度
angular指的是角速度,小乌龟只用到了z,代表着乌龟旋转的角速度