ROS2与Ailibot2入门教程-校准-PID校准
说明
- 介绍如何在Ailibot2上进行PID校准
- PID校准的主要作用是可以让小车走直线,如果小车不能正常走直线或偏移到一边,说明PID值还没达到理想值。
- 让小车不能走直线,主要是电机速度差异造成的,需要通过PID的调整来平衡电机之间的速度差异,从而达到电机速度保持一致,实现让小车走直线。
相关设备:
- ailibot2差速系列:采购Ailibot2-D2,采购Ailibot2-D4
- ailibot2全向系列:采购Ailibot2-M4,采购Ailibot2-O3,采购Ailibot2-O4
原理:
- 通过不断调整PID的参数(pid_p,pid_i,pid_d),同时查看plot上的目标速度曲线/cmd_vel/linear/x和实际速度曲线/raw_vel/linear_x,一步步趋于重合。目标速度默认为0.5米/秒
- 按pid_p,pid_i,pid_d的顺序开始调整,先通过调整pid_p值,让实际速度曲线稍高于目标速度曲线;再调整pid_i值,让实际速度曲线在目标速度曲线上下波动,然后趋于重合;最后调整pid_d值,让实际速度曲线起始波动与目标速度曲线一致。
- PID校准的主要作用是可以让小车走直线,更新PID参数后,实际落地测试,如果小车不能正常走直线或偏移到一边,说明PID值还没达到理想值。这个校准过程需要反复测试以达到理想值。
- 目前初始的值为4.0, 0.5, 2.0,如果这些数值还是导致不能正常走直线,即可调整PID值。
- 一般情况下,可以不做校准。
操作步骤
- [Ailibot] 启动小车
ros2 launch ailibot2_bringup agent.launch.py
启动曲线图和参数配置界面方法一
- [Ailibot] 启动PLOT曲线图
ros2 run rqt_plot rqt_plot
- 效果图:
- [Ailibot] 启动参数配置界面
ros2 run rqt_reconfigure rqt_reconfigure
- 效果图
启动曲线图和参数配置界面方法二:
- 也可以运行rqt后,再添加相应的插件
- 执行命令
rqt
打开rqt界面后,在屏幕左上方的菜单栏选择
Plugins
->Configuration
->Dynamic Reconfigure
同时选择
Plugins
->Visualization
->Plot
在Dynamic Reconfigure窗口下,点击pid_configure
效果图:
PID校准流程:
- 按上面的方法启动plot曲线图和参数配置界面
- 启动键盘控制
ros2 launch ailibot2_teleop keyboard.launch.py
- 通过修改参数后,再按i驱动小车,查看曲线图的变化情况
- 按照pid_p,pid_i,pid_d的顺序,逐一修改参数,并驱动小车,查看/raw_vel/linear_x曲线表现,尽可能接近cmd_vel/linear/x的曲线
- 当曲线趋于平缓,波动最小,获取最终值比如pid_p=0.9 ,pid_i=0.1,pid_d=0.8
- 将校准得到的PID参数写入
ailibot2_bringup/param/robot/ailibot2_d2_agent.sh
里
- 将校准得到的PID参数写入
- 这是差速二轮小车的参数配置文件
ros2 param set ailibot2 pid_p 0.9
ros2 param set ailibot2 pid_i 0.1
ros2 param set ailibot2 pid_d 0.8
- 再启动小车底盘,小车将使用新的pid参数。
- [Ailibot] 启动小车
# 启动小车
ros2 launch ailibot2_bringup agent.launch.py
# 查看参数
ros2 param get ailibot2 pid_p
ros2 param get ailibot2 pid_i
ros2 param get ailibot2 pid_d
- [Ailibot] 应用配置的参数
# 配置参数
ros2 launch ailibot2_bringup param.launch.py
# 配置参数后,查看参数是否生效
ros2 param get ailibot2 pid_p
ros2 param get ailibot2 pid_i
ros2 param get ailibot2 pid_d
- 参数稳定后,可以通过修改固件的配置文件,就不需要每次启动配置参数
参数写入到固件里
- 我们产品对应提供的虚拟机里面包含固件配置和使用环境
- 修改固件参数文件,/home/ubuntu/ailibot_micro_ros/Driver/Inc/config里面对应型号的文件中的pid部分
- 如config.d2.h文件
#define K_P 0.9 // P constant
#define K_I 0.1 // I constant
#define K_D 0.8 // D constant
- 编译固件
cd ~/ailibot_micro_ros/
./scripts/build.sh
- 选择对应的机型编译,编译完,则固定参数为配置文件对应的参数
- 连上STLINK刷机线
make stflash
- 刷机成功后,关闭机器,断掉重启。
- 再启动底盘
# 启动小车
ros2 launch ailibot2_bringup agent.launch.py
# 配置参数后,查看参数是否生效
ros2 param get ailibot2 pid_p
ros2 param get ailibot2 pid_i
ros2 param get ailibot2 pid_d
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号