小车转向的调试与实现
怎么实现小车的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图所示:
审核编辑 黄宇
-
电机
+关注
关注
142文章
9098浏览量
146541 -
PID
+关注
关注
36文章
1473浏览量
85894 -
开发板
+关注
关注
25文章
5139浏览量
98378
发布评论请先 登录
相关推荐
deepin 23+树莓派让小车动起来
![deepin 23+树莓<b class='flag-5'>派</b>让<b class='flag-5'>小车</b>动起来](https://file1.elecfans.com/web3/M00/07/E9/wKgZPGer9iaAQPxjAAAUfrIo3WY741.jpg)
ARM开发板与树莓派的比较
自适应蓝牙控制智能小车
PY32F002A单片机开发板 PY32F002AF15P6开发板 32位MCU,M0+内核
![PY32<b class='flag-5'>F</b>002A单片机<b class='flag-5'>开发板</b> PY32<b class='flag-5'>F</b>002AF15P6<b class='flag-5'>开发板</b> 32位MCU,M0+内核](https://file1.elecfans.com//web2/M00/05/14/wKgZombWr56AONF1AAKjvai7Xtk000.jpg)
树莓派和arm开发板的区别
linux开发板与树莓派的区别
19.3-星曈科技 openmv Hopenmv发送五个uchar Openmv+STM32F103C8T6视觉巡线小车 STM32循迹小车系列教程
![19.3-星曈科技 openmv Hopenmv发送五个uchar Openmv+STM32<b class='flag-5'>F</b>103C8T6视觉巡线<b class='flag-5'>小车</b> STM32循迹<b class='flag-5'>小车</b>系列教程](https://file1.elecfans.com/web2/M00/03/DF/wKgaoma-11WAeNKnAARmh75k2yc492.png)
19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与小车控制 Openmv+STM32F103C8T6视觉巡线小车
![19.4-STM32接收数据-状态显示在屏幕 openMV寻迹与<b class='flag-5'>小车</b>控制 Openmv+STM32<b class='flag-5'>F</b>103C8T6视觉巡线<b class='flag-5'>小车</b>](https://file1.elecfans.com/web2/M00/03/DF/wKgaoma-16iAactHAAL5m8eVl1M471.png)
【核桃派ZeroW开发板体验连载】核桃派ZeroW开发板拆箱、组装、上电,
【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
【项目展示】基于CW32的遥控循迹小车
![【项目展示】基于CW32的遥控循迹<b class='flag-5'>小车</b>](https://file1.elecfans.com//web2/M00/EA/AA/wKgZomZZmU-AaDmZAADtIBlrbLs17.webp)
评论