gimbal_calibration_controller,听到校准声后关闭gimbal_controller/controllers/gimbal_controller/command,rate设置为200
rate_yaw设置为 0.5*sin(0.5*i*pi/100)。这会让云台yaw轴开始正弦运动(左右来回摆动)。调pitch轴pid同理,设置话题消息中的rate_pitch即可plotjuggler 拉曲线。具体位置可参:/controllers/gimbal_controller/controller/yaw/controllers/gimbal_controller/controller/pitchpos_state和state分别代表位置环状态和速度环状态(有pos词缀表明是位置环,没有则是速度环)。展开后:
process_value代表实际值set_point代表目标值error即误差
可以将上述数据按下图所示拉取方便下一步的调试

云台采用串级 PID 控制
- 位置环实际是在对期望速度曲线进行规划(就是在规划电机从位置 a 移动到位置 b 的速度曲线,一般只需要 kp)
- 位置环的输出作为速度环的输入,也就是速度环的期望
- 真正输出电机力矩指令的是速度环(速度环一般使用 pi 控制,让速度曲线跟踪误差尽量小)
故先调速度环,再调位置环
前馈简单理解就是:
假设以 sin 曲线为期望,反馈是位置环产生误差后,位置环计算出速度指令输入到速度环,再让电机转动,这是有滞后的。
前馈是对期望位置曲线微分,得到期望速度曲线后(或者其他方法得到期望速度曲线),直接将这个期望速度输入到速度环,作为速度环期望,这是开环控制,没有反馈环节,故响应更快。误差来自速度环的跟随误差
由于前馈是开环控制,响应快而稳定性差。而反馈控制是闭环控制,稳定性好,所以一般会将前馈控制与反馈控制配合一起使用。
期望的效果是,在启动云台控制器但未发送控制指令时,云台在水平及上下一定角度时能只靠重力补偿定住
需要修改的文件位置:/src/rm_config/config/rm_controllers/<车名>.yaml
gimbal_controller 下的 feedforward 项
feedforward:
gravity: 6.725
enable_gravity_compensation: false
mass_origin: [ 0.0185,0.0,0.01 ]
enable_gravity_compensation 设为 false,这个重力补偿指的是机械上的那个重力补偿。只有英雄才有gravity,直到效果较好