跳转至

小乌龟回顾

小乌龟节点启动

1. 启动小乌龟模拟器节点

ros2 run turtlesim turtlesim_node

2. 启动小乌龟键盘输入节点

ros2 run turtlesim turtle_teleop_key

小乌龟操作原理

1. 节点信息查看

小乌龟启动过程中,我们启动了两个可执行的程序:turtlesim_nodeturtle_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,占用的网络端口
  • Connections: 此节点和其他节点间的连接信息

查看控制节点

同理,我们也可以通过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开始正向增长
  • 面板的宽度和高度相同,值为11.088899

小乌龟

  • 小乌龟的坐标原点为小乌龟的中心点。

小乌龟移动指令参数

我们通过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,代表着乌龟旋转的角速度