用OD motor搭建的8自由度轮足机器人,实现多自由度运动控制与规划功能
- fdilink_ahrs 轮趣科技IMU(N100) 提供的ROS结点,目前工作频率200hz,话题名:"/imu"
- filter 自编写的IIR滤波器实现库,利用给定的滤波器阶次与离散传递函数系数a,b实现IIR滤波
- kinematics_3dof 自编写的3自由度腿部运动学库,目前实现了正运动学、逆运动学、速度雅可比与角速度雅可比
- od_model 基于Gazebo的仿真结点,与机器人urdf模型描述,另有一些辅助结点模拟OD电机的CAN通讯协议
- ros_canopen ROS提供的CAN通讯结点,利用socketCAN支持实现CAN与topic的双向桥接,对其中CAN套接字的初始化略作修改(socketcan_interfacce/include/socketcan.h:163)以避免在CAN总线上捕获过多错误帧,并只接收0-7id帧
- sbus_serial ROS提供的SBUS解析结点,对原始的100kbps做修改以适配SBUS转USB模块的115200bps(sbus_serial/src/sbus_serial_driver.cpp:201),结点话题名:"/sbus"
- usb_can 自编写usb虚拟串口转can的库,但由于虚拟串口带宽受限且不能多程序同时访问等,目前已弃用
- wheel_leg_fsm 腿轮机器人状态机控制规划结点,总体功能由多个库实现,主程序入口:FSM_node.cpp,具体各个模块在FSM_node架构说明介绍
- FSM类:实现状态机大循环,类内包含Controller、Motor、Observer、Param、Ratio、Regulator的实例化对象
- Motor类:电机类,储存各电机的初始位置,滤波器系数,最大电流,极限位置,转向配置等,并可生成can_frame用于与CAN总线上的实物电机通讯(发送控制命令与解包电机信息)
- Ratio类:遥控类,存储当前各摇杆、拨杆值,进行死区、饱和等操作
- Observer类:观测器类,获取Motor编码器、IMU值,对机器人状态进行状态估计(速度、姿态、轮相对位置等)
- Regulator类:规划器类,根据控制目标(来自遥控Ratio或规划程序),给出机器人状态的期望值
- Controller类:控制器类,根据机器人实际状态与期望状态的偏差,计算控制率,得出控制量,并进行必要的限幅
- Param类:参数类,上述所有类中均包含一个参数类的对象,用于公共参数获取,如机器人物理参数、控制频率、遥控器校准等
- Controller类中的反馈增益矩阵与积分增益矩阵,积分最大限幅,左右虚拟力限幅,平衡控制量balance_u
- Motor类中的各电机最大电流限幅,速度低通滤波器系数
- Observer类中的kalman滤波器,模型误差方差与测量误差方差
- Ratio类中,拨杆偏移量、死区量等
- 各电机零位、旋转方向、速度滤波器,在Rviz中反显
- IMU 姿态解算、角速度方向
- 机体速度kalman滤波器
- rrx Drrx rlx Drlx 反馈系数
- z vz iz反馈系数,平衡控制量balance_u
- pitch wy 反馈系数
- roll wx y vy 反馈系数
- vx ivx wz iwz 反馈系数
- wrench限幅与电流限幅
系统状态 vx y vy z vz roll wx pitch wy wz rlx Drlx rrx Drrx