背景:
- 大量不同参数的移动机器人底盘。部分底盘本地并没有样机,更新代码后无法保证是否正常工作。
- 需要简单有效的反转定义每个轮的左右方向,高效互换各个轮的ID。
- AGV停止状态判断。对于高分辨率的编码器,不被误判为运动。
- 在下发指令超速,下发加速度超标时,做基于不改变运动轨迹的速度限制。
底盘类型:
- 双轮差动
- 三轮全向
- 四轮麦克纳姆
- 单驱动轮舵轮
- 定向驱动轮单舵轮
- 四轮差动
程序模块:
Chassis_base:保存底盘物理参数,如:编码器线数,轮半径,减速比,轴距。
Odometer:只放算法和全局坐标系下机器人里程信息,包括:x, y, theta, steerangle。
ProtocolDriver:存放物理量到通信指令相互转换的方法和通信协议。
ChassisKinematics: 只实现函数,不保存变量。
运行流程:
初始化配置 - 下发指令 - 速度分解 - 里程合成
速度指令下发由上层事件触发。
SDO查询指令由异步定时器回调触发。
PDO状态获取由CAN邮箱回调触发。
初始化配置:
protobuffer协议:
1. float wheelbase
2.
待补充。。。