小乌龟节点启动

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

  1. ros2 run turtlesim turtlesim_node

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

  1. ros2 run turtlesim turtle_teleop_key

小乌龟操作原理

1. 节点信息查看

小乌龟启动过程中,我们启动了两个可执行的程序:turtlesim_node和turtle_teleop_key 。可以通过命令查看当前的启动的节点:

查看小乌龟节点

通过命令可以查看/turtlesim节点的详情

  1. ros2 node info /turtlesim

命令运行后,可以看到以下结果:

  1. /turtlesim
  2. Subscribers:
  3. /parameter_events: rcl_interfaces/msg/ParameterEvent
  4. /turtle1/cmd_vel: geometry_msgs/msg/Twist
  5. Publishers:
  6. /parameter_events: rcl_interfaces/msg/ParameterEvent
  7. /rosout: rcl_interfaces/msg/Log
  8. /turtle1/color_sensor: turtlesim/msg/Color
  9. /turtle1/pose: turtlesim/msg/Pose
  10. Service Servers:
  11. /clear: std_srvs/srv/Empty
  12. /kill: turtlesim/srv/Kill
  13. /reset: std_srvs/srv/Empty
  14. /spawn: turtlesim/srv/Spawn
  15. /turtle1/set_pen: turtlesim/srv/SetPen
  16. /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
  17. /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
  18. /turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
  19. /turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
  20. /turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
  21. /turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
  22. /turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
  23. /turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  24. Service Clients:
  25. Action Servers:
  26. /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  27. Action Clients:

rosnode info命令可以查看当前节点的一些信息:

  • Publications:此节点上定义的发布者
  • Subscriptions:此节点上定义的订阅者
  • Services:此节点上定义的服务
  • 进程id,占用的网络端口
  • Connections: 此节点和其他节点间的连接信息

    查看控制节点

    同理,我们也可以通过ros2 node info查询/teleop_turtle节点的信息

    1. ros2 node info /teleop_turtle

    结果如下:

    1. /teleop_turtle
    2. Subscribers:
    3. /parameter_events: rcl_interfaces/msg/ParameterEvent
    4. Publishers:
    5. /parameter_events: rcl_interfaces/msg/ParameterEvent
    6. /rosout: rcl_interfaces/msg/Log
    7. /turtle1/cmd_vel: geometry_msgs/msg/Twist
    8. Service Servers:
    9. /teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    10. /teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    11. /teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    12. /teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    13. /teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    14. /teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
    15. Service Clients:
    16. Action Servers:
    17. Action Clients:
    18. /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

    现在我们大致可以搞清楚一些通讯的关系:

  • /teleop_turtle节点存在一个发布者,往/turtle1/cmd_vel主题中发布数据。

  • /turtlesim节点存在一个订阅者,去/turtle1/cmd_vel主题中获取数据。

    2. 可视化工具查看节点关系

    rqt_graph工具提供了可视化的工具方便我们查看这种节点间的关系:
    1. ros2 run rqt_graph rqt_graph
    15.png

    图像显示,/teleop_turtle 通过主题 /turtle1/cmd_vel 给 /turtlesim 进行数据传递。 /teleop_turtle 为具备 Publisher 功能的节点。 /turtlesim 为具备 Subscriber 功能的节点。 /turtle1/cmd_vel 为 publisher 和 subscriber 通讯的主题。

调试工具控制小乌龟

1. rqt模拟数据发送

  1. rqt

通过图形化配置参数:
16.png

2. 通过命令行模拟数据发送

  1. 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

    1. ros2 topic type /turtle1/cmd_vel

    通过ros2 interface命令可以查看数据的详细格式:

    1. ros2 interface proto geometry_msgs/msg/Twist

    输出的格式为:

    1. geometry_msgs/msg/Twist
    2. "linear:
    3. x: 0.0
    4. y: 0.0
    5. z: 0.0
    6. angular:
    7. x: 0.0
    8. y: 0.0
    9. z: 0.0
    10. "

    linear指的是线速度,小乌龟只用到了x,代表着乌龟向前进的线速度
    angular指的是角速度,小乌龟只用到了z,代表着乌龟旋转的角速度