R2D2小车 固定轮速差速圆周运动示例
实验简介
本示例使用PyBullet搭建R2D2四轮小车,通过左右车轮固定速度差实现差速圆周运动:左轮速度高、右轮速度低,小车沿圆弧轨迹持续自动行驶,无需人工干预,无限循环。
说明:本示例仅演示「固定轮速差速圆周运动」,不包含轨迹反馈、路径跟踪或避障,不能据此说明能够稳定保持给定巡航轨迹。
运行环境(已验证)
- Ubuntu 20.04 / Windows 10
- Python 3.8
- pybullet 3.2.5
PyPI 上的 pybullet 只提供 Linux 轮子,Windows 直接 pip install pybullet 会转本地编译(需要 MSVC)。Windows 建议用 conda-forge:
conda create -n r2d2 -c conda-forge python=3.8 pybullet
conda activate r2d2
运行步骤(从仓库根目录执行)
# 1. 安装依赖
pip install -r src/ground/r2d2_cruise/requirements.txt
# 2. 直接运行(推荐)
python3 src/ground/r2d2_cruise/main.py
# 3. 无图形环境自检:跑 5 秒并把轨迹写成 CSV
python3 src/ground/r2d2_cruise/main.py --direct --duration 5 --log run.csv
# 4. 或通过 ROS launch 启动(需 ROS 环境)
# 将 src/ground/r2d2_cruise 放入 catkin 工作空间的 src 后:
# catkin_make && roslaunch r2d2_cruise main.launch
运行后弹出 PyBullet 可视化窗口:车体先落下站稳,随后小车沿圆弧轨迹持续圆周巡航行驶。关闭仿真窗口或按 Ctrl+C 即可退出,程序会自动释放仿真连接。
本地自检
python3 -m pytest tests/test_r2d2_cruise_local.py -v
用例覆盖三点:--direct 模式能跑出轨迹 CSV;5 秒内确实走出圆弧(折线弧长与解缠转角算出的半径约 0.80 m,稳态约 1.02 m);车体高度稳定在 0.47 m 左右,不会因初始穿插被弹飞。
ROS 接口说明
本模块为独立 PyBullet 仿真脚本,不发布/订阅 ROS 话题。package.xml 与 launch/main.launch 用于满足仓库「模块支持 launch 启动、入口为 main 开头」的约定:roslaunch 仅作为统一启动入口调用 main.py,不依赖 ROS 运行时。
验收方法
- 运行后弹出 PyBullet 可视化窗口,车体落下站稳后自动沿圆弧轨迹持续巡航,无需按键或人工干预;
--direct --duration 5 --log run.csv能正常结束并写出 10 Hz 轨迹,起步阶段按折线弧长算的转弯半径约 0.80 m(稳态 15–20 s 约 1.02 m);pytest tests/test_r2d2_cruise_local.py三个用例全部通过;- 关闭窗口或按 Ctrl+C:程序正常退出,无残留进程,仿真连接已释放;
- 运行效果参考动图:

- 可视化窗口运行截图(相机跟随车体):

说明
本作业的代码与文档在编写过程中使用了 AI 大模型辅助,本人已核对并确认提交内容,对提交内容负责。