小车转向的调试与实现
怎么实现小车的90度转向?
首先,在09_国产IMU移植及姿态解算.md里面我们可以获取到小车的姿态信息,对应的转向信息就是Yaw(偏航角)。
而在08_直流减速电机PID速度环与位置环调试中我们也可以准确控制小车轮子的转速和转多少个脉冲(也就是转几圈)了。
这样实现小车的转向就有了两种方案了。一种是用Yaw(偏航角)作为测量值,想要转的角度作为目标值,用PID驱动小车以一定的速度去旋转来达到目标值。
第二种是在实现小车轮子位置环的基础上,控制两边轮子同时向不同的方向旋转一定的圈数(编码器脉冲),在小车轮子不打滑的情况下转过的角度就是一个确定的值,在送药小车的地图中,旋转基本都是90度的,所以这种实现方法会很简单也容易调试。
用角度环实现90度转向
在pid_thread.c中实现:
创建相应的PID控制参数的结构体:
positional_pid_params_t car_angle_ring_pid;
初始化控制结构体并修改kp ki kd:
//角度环配置
//角度环 pid 参数初始化
positional_pid_init(&car_angle_ring_pid, 0.015, 0, 0, 0.1, 2, -2);
//修改 角度环 kp ki kd
car_angle_ring_pid.positional_pid_set_value(&car_angle_ring_pid, 0.015, 0,
0);
在PID的软件定时器回调函数中计算两个轮子需要的速度:
// 小车角度环
if (car_angle_ring_enable_flag == 1)
{
static float error = 0;
error = turn_target - fusion_data.euler.euler.yaw;
// 处理角度突变
if (error > 180.0f)
error -= 360.0f;
else if (error < -180.0f)
error += 360.0f;
angle_ring_speed_target = positional_pid_compute(
&car_angle_ring_pid, error, fusion_data.euler.euler.yaw);
}
else
{
turn_target = fusion_data.euler.euler.yaw;
angle_ring_speed_target = 0;
}
打开角度环后他就会保持Yaw为0,如下面这个图一样:

下面是设定他靠角度换旋转90度的效果:

用位置环实现90度转向
还是在pid_thread.c中实现:
在08_直流减速电机PID速度环与位置环调试已经可以让轮子转固定的脉冲(圈数)了,直接把对应的目标值加给电机1和电机2的位置目标就可以了。
// 位置式旋转,负数左转,正数右转。
void car_spin_position(int32_t _position_target)
{
motor1_position_target += -_position_target; motor2_position_target -= _position_target;
}
在实际实现中,如下面的gif图所示:

审核编辑 黄宇
-
电机
+关注
关注
143文章
9486浏览量
153187 -
PID
+关注
关注
37文章
1489浏览量
90091 -
开发板
+关注
关注
25文章
6125浏览量
113384
发布评论请先 登录
【CW32L012小车测评】到手小车测评其中基本功能
追加!30套FPGA开发板免费送!米尔-安路飞龙派创意秀活动再开启
【赛题教程】基于RK3568+PG2L50H实现八路视频输入参考方案
【作品合集】创龙科技TLT113/TL3562-MiniEVM开发板测评
【嘉楠堪智K230开发板试用体验】高校竞赛-2025电赛-E题
【免费试用】匠芯创D133CBS KunLun Pi开发板试用体验
deepin 25成功适配魔方派3开发板
【创龙TL3562-MiniEVM开发板试用体验】--开箱与开发板了解
【Banana Pi BPI-RV2开发板试用体验】开箱上电
睿擎派RK3506J开发板开箱记录、初步调试
有ARM,NPU,FPGA三种核心的开发板 — 米尔安路飞龙派开发板
直接送!50套小安派 BW21-CBV-Kit Ai图像识别开发板!
deepin 23+树莓派让小车动起来

立创梁山派开发板-21年电赛F题-送药小车-小车角度环的调试与实现
评论