智能小车——初步想法

需要参考轮趣的智能小车自己搭建一台智能机器人,这里从底层控制开始逐步搭建。

控制模式

之后要自行搭建智能小车,所以将轮趣的底盘代码进行学习,根据开发手册先大致过一遍需要的内容。

有做很多个控制方法,包括了手柄、串口、CAN、ROS等,如下所示:
控制模式总结
如上图所示,对于项目而宫,重要的是PS2控制(即迎控器控制),以及CAN控制(需要用到CAN通讯),串口控制(上位机算法的通讯),其余的关注一下就可以了。

速度单位

全部控制程序全部换算成国际单位制m/s,所以要将缉码器的原始数据转换为m/s。

这里涉及的就是轮子半径、编码器数据、控制频率、编码器精度,通过这几个数据最终完成小车速度的换算。公式如下所示:
运动速度转换关系式

串口控制

就是ROS与STM32的通讯,通过串口3来完成通讯。

这里需要自定义一个数据帧,通过这个数据帧来完成电机控制状态的传输通讯。这里发送的数据包括:机器人使能;机器人三轴速度;IMU三轴加速度、角速度;电池电压。还要加上串口通讯可以用作检验的帧头帧尾和校验位。

同时,串口发送一次只能发送8位,而目前数据为24位,所以数据需要拆成高8位和低8位来传输。这里就相当于自定义了一套encoder和decoder的密码模式

这里可以借鉴他的编码方式:帧头固定0x7B,帧尾固定0x7D,用一位fag_stop表示是否使能,数据校验通过BCC校验(所有数据为异或)
具体的编码方式,也就是串口一次所传输的数据是可以自定义的,这里就不展开了,在自己做项目的时候可能还要修改一下。

APP调参

可以通过蓝牙/WIFI来完成控制,实质也是自定义数据,然后通过串口2来完成数据传输。

PS2控制

这里因为是专门的控制手柄,有自己做好的底层信号处理,对于应用层开发者而言,需要做的就是解析传输过来的信号,并完成对应的控制状态选择就可以了。

CAN控制

数据传输直接通过CAN总线来完成,需要先配置好CAN,然后自定义数据来完成传输,总体逻辑是类似的,只不过只需要关心具体的传输数据了,因为CAN是自带数据校验等的(CAN数据中自己就有校验等等的位)。

OLED显示

通过IIC总线来完成内容显示。只需要通过OLED的通讯协议,来完成画点就可以了。

陀螺仪零点漂移消除

IMU的数据存在零点漂移,需要设计一定的算法来完成滤波。

设置一定的延时,在刚上电的时候并不读取角速度值,直到超过了这个时间,才会去读取角速度值并将其作为漂移值。

运动学解算

这个就是两轮差速小车、麦轮小车等的运动学模型,将电机与机器人的运动联系起来。

这里之后的项目是需要四驱车模型,这里就记录一下四驱车的运动模型。

四驱车模型
其中VA、VB、VC、VD分别为 A、B、C、D四个轮子的转速,也就是电机的转速;Vx为小车沿着X轴平移速度,w为小车沿Z轴的旋转速度;a=D/2为小车轮距D的一半,b=H/2为小车轴距H的一半。

最终就可解算出如下的运动学公式,将机器人运动转化为电机旋转:
运动学公式

PID控制

这里直接就是一个速度闭环控制,只用PI就差不多了,增量式或者位置式PI都可以。

整体程序结构图

整体流程

现根据运动学模型来选择具体的计算公式,然后完成一系列外设的初始化,最后接到RTOS的任务接口,开始循环执行对应的任务。

对于遥控命令,都是通过串口/CAN的中断来获取。

相关推荐

  1. 51单片机智能小车

    2024-07-12 02:38:03       48 阅读
  2. STM32——智能小车

    2024-07-12 02:38:03       37 阅读
  3. 智能小车——底层配置

    2024-07-12 02:38:03       26 阅读
  4. 智能避障小车设计

    2024-07-12 02:38:03       25 阅读
  5. 智能小车-轮趣wheeltec(原版代码)

    2024-07-12 02:38:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 02:38:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 02:38:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 02:38:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 02:38:03       69 阅读

热门阅读

  1. 什么是Stream流

    2024-07-12 02:38:03       21 阅读
  2. playwright下载文件如何不被删除

    2024-07-12 02:38:03       17 阅读
  3. c#中的超时终止

    2024-07-12 02:38:03       18 阅读
  4. 归并排序算法Python实现

    2024-07-12 02:38:03       22 阅读
  5. 07-7.4.2 B+树

    2024-07-12 02:38:03       19 阅读
  6. 生信技能52 - VCF文件hg38与hg19坐标相互转换

    2024-07-12 02:38:03       20 阅读
  7. 技术总结(1)——方向与成长思考

    2024-07-12 02:38:03       23 阅读
  8. 《穿透财报:读懂财报中的逻辑与陷阱》

    2024-07-12 02:38:03       21 阅读
  9. Spring——自动装配Bean

    2024-07-12 02:38:03       21 阅读
  10. 前端高頻面試題(一)

    2024-07-12 02:38:03       22 阅读
  11. SpringBoot常见注解

    2024-07-12 02:38:03       19 阅读
  12. linux lvm使用

    2024-07-12 02:38:03       20 阅读
  13. ETag:Springboot接口如何添加Tag

    2024-07-12 02:38:03       22 阅读
  14. 3. 排序算法代码-python

    2024-07-12 02:38:03       23 阅读
  15. android 图片轮播

    2024-07-12 02:38:03       19 阅读
  16. ubuntu 检查硬盘的通电时长、健康度

    2024-07-12 02:38:03       24 阅读