梯度队员将以一人一组,需求编写麦克纳姆轮底盘的控制器,并用它控制在Gazebo中的英雄机器人底盘,进行最终答辩并提交所有代码(仓库)。
总分: 130 未标注的需求需组内完成,禁止询问其他组。
总分: 15 如果没有完成必做需求,没有资格参加答辩。
1. 运行 rm_description-1的 assignment 分支
分数: 5
参考资料:
2. 学习理解并运行 simple_chassis_controller
分数: 10
要求:
- 全程使用 CLion 进行编译和 DeBug (可在群里寻求帮助)
- 如需使用catkin命令行工具,使用
catkin-tool
而不是catkin_make
(可在群里寻求帮助) - 理解
SimpleChassisController
的类成员意义 - 理解控制器怎么被加载进模拟器和实际机器人中 (pluginlib)
参考资料:
- CLion ROS setup tutorial
- CLion Attach to process
调试simple_chassis_controller时, 应该 attach 到
gzsever
- simple_chassis_controller
- ros_control: A generic and simple control framework for ROS
- ros_control: wiki
- Gazbeo: Tutorial: ROS Control
- pluginlib
总分: 115 尽量完成更多项
分数: 10
要求:
- 以 rm_template 为模版 创建新仓库, 名为 hero_chassis_controller
- 正确填写 CMakeList.txt, package.xml, README.md, 在完成后面的需求时记更新
参考资料:
分数: 10
要求:
- 合理的commit
- 清晰的commit消息
- 有和合并冲突的处理
- 分工明确(组内贡献度将参考版本管理)
分数: 10
要求:
- 使用 ROS C++ Style Guide 或者 Google C++ Style.
参考资料:
分数: 20
要求:
- 一个PID对应控制一个轮子(共四个PID)
- 使用 control_toolbox 的 PID 控制器
- 可在配置文件中设定 PID 的各个参数
- 会使用 rqt 的 rqt_plot 和 rqt_reconfigure 调整得到合适的PID参数
- 理解
control_toolbox::Pid
类 参考资料:
- control_toolbox
- control_toolbox::Pid Class Reference
- effort_controllers/joint_velocity_controller.cpp
展示了如何用
control_toolbox::Pid
控制单个关节的速度 - rqt_plot
- rqt_reconfigure
分数: 20
要求:
- 底盘坐标系定义参照仿真中的 base_link
- 接收 "/cmd_vel" 上的 geometry_msgs/Twist 数据,将它视为底盘坐标系下的速度指令,计算各个轮子期望的转速
- 可在配置文件中设定 底盘的轴距 轮距
参考资料:
- geometry_msgs/Twist
- Mecanum wheel
- Kinematic Model of a Four Mecanum Wheeled Mobile Robot 这篇论文真真真水...
分数: 15
要求:
- 根据轮子的实际速度计算底盘的速度,并进行叠加实现里程计
- 将数据发以 nav_msgs/Odometry 发布到 topic "/odom" 上
- 将数据处理为坐标变换关系: "odom" 到 "base_link"
参考资料:
- nav_msgs/Odometry
- navigationTutorialsRobotSetupOdom
- Kinematic Model of a Four Mecanum Wheeled Mobile Robot
分数: 15
要求:
- 已实现
5. 使用逆运动学计算各个轮子的期望速度
和6. 使用正运动学实现里程计
- 将 topic "/cmd_vel" 中的速度指令视为世界坐标系下("odom" 或者 "map"), 通过
tf
变换到 底盘坐标系后执行。 - 可在配置文件中设定 “底盘坐标系速度模式” ( 即
5. 使用逆运动学计算各个轮子的期望速度
) 和 “全局坐标系速度模式” 两个模式
参考资料:
- tfOverviewUsing Published Transforms 使用
transformVector
分数: 15
要求:
- 自由发挥
- 如 使用 teleop_twist_keyboard 键盘操控底盘
- 如 可在配置文件设定 底盘加速度
参考资料: