Skip to the content.

一、实验背景与目的 本次实验是上一轮直线运动实验的延伸,在掌握 ROS2 话题通信与直线运动控制的基础上,通过调整控制指令参数,实现turtlesim中海龟的圆形轨迹运动,深入理解Twist消息中线性速度与角速度的协同控制逻辑,进一步掌握 ROS2 命令行发布话题消息的方法。 二、实验环境与过程

  1. 实验环境 操作系统:Windows 11 + WSL2(Ubuntu 24.04) ROS 版本:ROS 2 Humble 核心工具:turtlesim仿真器、ros2 topic命令行工具
  2. 实验步骤 启动仿真节点:在终端输入ros2 run turtlesim turtlesim_node,启动turtlesim仿真环境,海龟初始位置在窗口中心。 发布圆形运动指令:新开终端,使用ros2 topic pub命令向/turtle1/cmd_vel话题发布geometry_msgs/Twist消息,设置线速度与角速度非零值: bash 运行 ros2 topic pub /turtle1/cmd_vel geometry_msgs/Twist “{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}” 观察现象:海龟以恒定线速度前进,同时以恒定角速度旋转,形成稳定的圆形轨迹,持续运动直到仿真窗口边界。 三、实验现象与问题分析
  3. 核心现象 圆形轨迹生成:海龟接收到指令后,同时进行直线前进与旋转运动,形成标准的圆形轨迹,说明线速度与角速度的协同控制生效。 轨迹半径规律:线速度linear.x与角速度angular.z的比值决定了圆的半径,本次实验中linear.x=2.0、angular.z=1.0,对应圆的半径为 2(半径公式:r = linear.x / angular.z)。 终端日志输出:命令行持续输出publishing: #X: geometry_msgs.msg.Twist(…),说明消息以默认频率持续发布,海龟保持运动状态。
  4. 原理与问题分析 运动学原理:海龟的运动是 ** 线速度(前进)与角速度(转向)** 的合成运动。当线速度与角速度均为恒定值时,合成运动为匀速圆周运动,其角速度控制旋转快慢,线速度控制圆周半径。 参数调整影响: 增大linear.x或减小angular.z:圆的半径会变大,海龟画的圆会更 “舒展”。 减小linear.x或增大angular.z:圆的半径会变小,海龟会原地快速转圈。 持续发布的作用:ros2 topic pub默认以 1Hz 的频率持续发布消息,保证海龟能持续接收到控制指令,维持运动状态;如果停止发布,海龟会因没有新的速度指令而逐渐停下。 四、实验结论 ROS2 中通过Twist消息同时控制线速度与角速度,可实现移动机器人的曲线 / 圆周运动,运动轨迹由两者的比值决定。 turtlesim仿真器能直观验证运动学控制逻辑,是理解 ROS2 机器人运动控制的有效入门工具。 命令行话题发布可快速验证控制指令的效果,适合初步调试运动参数,后续可通过编写 Python/C++ 节点实现更复杂的轨迹规划。 五、实验心得(补充版) 运动学控制的具象化理解:通过本次圆形轨迹实验,我终于把抽象的 “线速度与角速度合成运动” 和实际效果对应起来了。原来机器人走曲线不是靠 “掰轮子”,而是通过调整前进速度和转向速度的配合实现的,这为后续学习差速驱动、阿克曼转向等真实机器人运动模型打下了基础。 ROS2 话题通信的再认识:上一轮实验只理解了 “发消息 - 收消息” 的单向传递,这次实验让我意识到,话题通信是一个持续的 “数据流”—— 只有持续发布速度指令,机器人才能保持运动状态,这和真实机器人控制中 “周期下发控制指令” 的逻辑完全一致。 参数调试的重要性:调整线速度和角速度的过程中,我尝试了不同的参数组合,发现稍微改变数值,轨迹的大小、形状就会发生明显变化。这让我体会到机器人控制中 “参数整定” 的重要性,即使是简单的仿真场景,也需要通过调试找到合适的控制参数。 后续拓展方向:本次实验实现了固定参数的圆形轨迹,后续可以编写程序动态调整线速度和角速度,实现螺旋线、8 字形等更复杂的轨迹;也可以结合 ROS2 的服务通信,实现海龟的位置控制,进一步探索turtlesim的进阶功能。