循迹小车制作心得

本文分享了作者参加省上机器人大赛的经历,重点介绍了使用STM32和MPU6050实现循迹小车直线行驶的技术细节。通过PID算法进行巡线控制,并利用DMP解算姿态数据确保小车稳定前进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)概述
记得去年这个时候,我参加了省上的机器人大赛,当时有熊猫乐园、机器人排爆、机器人扎气球、循迹小车等题目,我选的是循迹小车。由于我比较菜,前前后后历时一个多月才完成这个项目。期间遇到的困难有两个:一是如何循迹,二是小车如何跑直线。为了解决这两个问题,查阅大量资料后,分别采用PID巡线和DMP姿态解算予以解决。

(二)解决过程
(1)巡线的解决方案
主控板采用STM32F103C8T6,5路ADC采样(ADC的型号是ST188),ADC采样值作为PID处理函数的参数。
ADC采样代码

void Get5SensorsVal(uint16_t *p)
{
      int i;
      //ADC采样值滤波处理
      ADC_value_filter();
      for(i=0;i<5;i++)
      {
           *p++=ADC_filterVal[i];
      }
}

(2)小车走直线的解决方案
给小车配备MPU6050用于检测当前小车运动姿态。MPU6050有三个轴的数据:pitch, roll, yaw。采集到这三个轴的数据,经过DMP解算后传给控制小车前进的函数。这个函数写在定时器中断里,每几毫秒执行一次(具体是多少记不清了)。
DMP解算函数

u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)
{
      float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;
      unsigned long sensor_timestamp;
      unsigned char more;
      long quat[4]; 
      if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensorss,&more))
           return 1;  
      if(sensorss&INV_WXYZ_QUAT) 
      {
           q0 = quat[0] / q30; //q30格式转换为浮点数
           q1 = quat[1] / q30;
           q2 = quat[2] / q30;
           q3 = quat[3] / q30; 
           //计算得到俯仰角/横滚角/航向角
           *pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch
           *roll  = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll
           *yaw   = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //yaw
       }
       else return 2;
    return 0;
}

(三)后期优化
基本功能实现后,加入了蓝牙模块,可以连接手机蓝牙APP看到5路ADC采样的值,便于PID调参。
效果图:
手机端显示ADC的采样值

前言: 开始之前先要说为什么要采用PID的算法来控制小车。玩过小车的DIY爱好者们都会碰到这样一种情况:为什么本该直线行驶的小车着轨迹就会发生偏移,即所谓的“不直”。 小车不直的原因有:两个电机本身的驱动特性不可能完全相同,两个电机外形大小不可能是完全一致,组装时精度也会出现差异,另外轮胎在滚动时打滑、遇到细小的障碍物等因素都会造成左右轮的速度出现差异,从而不直。开环控制是无法消除左右轮的速度误差的,因为上述的扰动是随机的。 要想小车一条直线,唯有实现闭环控制,当小车受到扰动时能对左右轮及时给予反馈,修正两轮的速度偏差,从而可以出一条直线。PID算法就是一种闭环控制算法,实现PID算法需得从硬件上实现闭环控制,即存在反馈,所以我采用的是带测速装置的电机。 项目简介: 本项目采用的是PID控制算法来修正小车时两轮的速度偏差,实现小车可以直线小车是使用一个安卓App来控制小车的行路径,App通过App Inventor2来进行编写。 完成作品图: 需要用到的材料: 1. Arduino Uno 2. Arduino Uno的扩展板 3. DFRobot L298 双路2A直流电机驱动板 4. HC-05或HC-06的蓝牙模块 5. 坦克小车底盘 6. 两个带霍尔传感器的电机 7. 锂电池 8. 杜邦线若干 软件部分: 1. Arduino IDE 2. App Invent 附件内容截图:
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值