从零开始搭建ROS移动机器人系列之(三)底层控制硬件

 上一期讲到了机器人机械结构、外部传感器以及ROS部署载体的选择及设计,这一期讲一讲底层控制硬件部分的内容。

目录

单片机控制芯片

电机驱动模块

电机编码器

姿态传感器

电源处理模块


到这里了,大家可能都知道了,所谓的ROS移动机器人实际上主要就包括两个核心部分,一个是上层的ROS系统,另一个是底层的运动控制,也可以称为上下位机的关系。两部分的分工分别是:ROS层负责采集外部传感器(雷达、摄像头)信号以及部署SLAM、导航避障、路径规划、机器视觉或语音识别等算法,底层运动控制层负责采集内部传感器(编码器、陀螺仪)信号以及部署运动控制算法,上下层之间通过串口通信互相发送数据信号。

画个图看一下电机驱动信号传输路线。

从图中可以看到,底层控制层起承上启下的作用,其功能可以概括为以下几点。

  • 通过PWM设置电机的转速;

  • 接收编码器测得的速度信息;

  • 通过PID算法控制电机的实时转速;

  • 接收ROS层下发的速度指令;

  • 向ROS层发送实时速度;

以上每一条都不是相互独立的,放到实际情况中就是这样的:机器人开机后静止,等待ROS下发的速度指令,ROS下发速度指令后,底层通过PWM设置电机转速,电机的速度不是直接可以满足这个设置值的,所以在这中间,编码器要不停的测量电机转速,计算出实际速度后,与设置速度比较,然后利用PID算法不断消除速度偏差,直至机器人速度满足设置的值,至此完成一次控制。然而,这个过程是不断进行的,所以整个机器人内部一直不停地进行这个循环,以达到实时控制的目标。

关于以上的几项内容,后续会逐个展开论述。

此外,由于ROS层需要知道机器人的航向角信息,所以需要在底层控制层增加一个姿态传感器,以获取机器人的实时航向角,也就是机器人朝向哪个角度,在后续机器人导航、路径规划等算法中需要用到这个数据。

现在先讲一下,底层控制这部分的硬件要怎么搭建。

再回顾一下最开始的整体框架图中的底层硬件部分。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第1张图片

再看一眼我自己弄的底层控制板。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第2张图片

这个控制板的底板是我自己画的,然后白嫖了嘉立创的免费打样(嘉立创每个月可以免费打样两次,板子尺寸10cm*10cm以内就可以)。

这个控制板基本上就包括了网络图里的那几部分,上面插的分别就是单片机模块电机驱动模块MPU6050姿态传感器DC/DC降压模块,以及给编码器电机的xh2.54连接口,这几个是必须有的部分,其余的DC插头、按键开关、电源指示灯以及USB取电口是我自己加的,这样的话,可以用电池给这个板子供电,然后从USB口取电给树莓派供电,就不用多加一个电源给树莓派单独供电了。这个看个人选择,可以任意发挥。

下面分开说说各个模块。

01

单片机控制芯片

控制芯片部分我用了一个STM32F103C8T6小系统板,板载一个CH340串口芯片,支持一键下载,方便后期烧写程序,然后这个板子上还有一个EEPROM芯片,但是在这里我们用不到这个芯片。实际上只需要一个单片机最小系统,然后用排针把IO口都引出来就行。单片机和其余模块的连接就用排针排母就可以实现。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第3张图片

这里用到的控制芯片其实就是单片机,至于单片机的型号怎么选,主要看你设计的机器人都有什么功能,需要用到单片机的什么外设(串口、中断、定时器、AD/DA等)、需要用多少个外设,明确了这些就可以针对性的做出选择。

打个比方,以这个差分轮式机器人来说,机器人有以下部分:

  • 两个编码器电机,所以得有两路PWM信号(定时器生成)+两路电机正反转逻辑信号(4个普通IO口);

  • 两个编码器测速(编码器分AB两相,那就得四路编码器测速,定时器生成测速信号);

  • 一个MPU6050姿态传感器,所以得有一路模拟IIC(两个普通IO口),一路外部中断;

因为stm32单片机的定时器通常可以同时输出多路信号在不同的引脚上,比如可以用一个高级定时器TIM1同时生成两路PWM信号分别给左右电机,用一个通用定时器TIM2生成两路编码器测速信号接到左电机的编码器,另一个通用定时器TIM4生成两路编码器测速信号接到右电机的编码器。这样的话,实际上我们用3个定时器就可以完成电机的pwm调速和编码器测速。然后有了调速和测速,就可以实现速度的PID控制了。具体的定时器的使用方式,可以参考STM的芯片手册和使用手册。

此外,如果你想自己设计一个全向轮的结构,就需要四个电机,然后就是上面列出来的外设翻一倍就好,如果是阿克曼结构,那你就在上面列出来的上面加一个舵机的IO口,但是姿态传感器MPU6050不用翻倍,因为不管你什么结构的机器人,你都只需要一个姿态传感器。

单片机的选择大概就是这些内容。

02

电机驱动模块

因为单片机引脚不能直接驱动电机,所以需要电机驱动芯片,这里选择了TB6612芯片,可以驱动两路直流电机。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第4张图片

(忽略这个比较突兀的电解电容,这个模块买来的时候本来这个位置是一个贴片的钽电容,我接了一个12V以后,可能因为电压不稳,钽电容给炸掉了,然后我自己焊了一个普通的电解电容。)

模块原理图如下。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第5张图片

  • VM是驱动电机的电源,接12V;

  • VCC是电机控制逻辑的电源,接5V;

  • PWMA和PWMB是两路电机的PWM信号接收口,接单片机的pwm信号输出口;

  • AIN1、AIN2、BIN1、BIN2是电机的控制逻辑接收口,接单片机的电机控制逻辑输出口;

  • AO1、AO2、BO1、BO2是电机的控制逻辑输出口,接到电机的+-两相;

  • STBY是整个电机驱动芯片的使能口,高电平使能,接5V或3.3V;

电机驱动模块基本就这些。

03

电机编码器

看一下编码器直流电机的图。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第6张图片

这个接线端子的左右两根是电机的正负线,分别接到电机驱动模块的AO1、AO2和BO1、BO2即可;然后左右的第二根是编码器的电源和地,接到VCC5V和GND即可;最里侧的两根就是编码器的AB两相了,接到单片机的编码器测速信号接收口。

04

姿态传感器

姿态传感器选用MPU6050模块。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第7张图片

MPU6050集成了三轴陀螺仪和三轴加速度传感器,还可以外接一个三轴磁力计。陀螺仪实际上就是测量整机沿XYZ三轴的转动的角度,即俯仰角、侧倾角和航向角。我们这里实际上只用到了航向角。

关于MPU6050模块,实际上没有很多可以说了,因为芯片内部比较复杂,也没有必要搞清楚它的实际原理,会用即可。我们这里只关心他怎么接到单片机上。

看一下这个模块的引出脚分别是什么。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第8张图片

  • VCC是电源引脚,接5V;

  • SCL和SDA是IIC的时钟线和数据线,这里用单片机的普通IO生成模拟IIC信号,所以接单片机的普通IO口;

  • XDA和XCL是此模块外接三轴磁力计的IIC的数据和时钟线,这里空置,不接;

  • AD0脚控制此模块的IIC的地址,IIC设备有一个地址,这个引脚用一个下拉电阻接到地,即为低电平0,后续写IIC驱动的时候就把地址的这一位配置成0即可;

  • INT是此模块的一个生成外部中断的引脚,接到单片机的可以接收外部中断的引脚上即可,通过定期产生外部中断保证机器正常工作;

05

电源处理模块

先看一下整个系统用到几种电压,电机驱动VM需要12V,MPU6050、电机编码器、电机驱动模块的逻辑端和STBY口等需要5V,单片机需要3.3V,由于单片机系统板上已经有5V转3.3V的部分了,所以我们只需要另外加一个12V转5V的模块,把12V电源转换为5V,就可以满足电源要求了。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第9张图片

这个模块比较简单,就四个口,上面两个口是输入12V的正负,下面两个口是输出5V的正负。只需要把输入12V的正负接到电池的正负即可,然后就可以从输出5V的正负引到各个模块了。

12V转5V的模块网上很多,随便选一个即可。

以上,基本上就把必备的模块介绍完了。然后,就是把这几个模块按照上面所说的连接方式连接起来。

总体的接线方式就是这样。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第10张图片

实际上,具体怎么分配单片机的外设与各个模块的引脚,可以根据单片机的手册,对照每一个外设的引脚配置即可。这里就点到为止。

我这里画了一个底板,底板上焊上排母,然后把各个模块直接插进排母就好了。

底板大概就是这样。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第11张图片

焊完插接件大概是这样。

从零开始搭建ROS移动机器人系列之(三)底层控制硬件_第12张图片

然后把各个模块都插上,就是上面一开始那样了。

到这里,差不多就把这个单片机控制板的硬件部分给搭建起来了。这部分实际上是比较关键的部分,内容有点杂乱,可能说得不是特别清楚。如果读者哪部分看得不是很明白,可以加我微信(ljk_1212)私下探讨。

今天先写到这里。后续就写写单片机控制的软件部分吧。

END

你可能感兴趣的:(从零开始搭建ROS移动机器人,自动驾驶,人工智能,机器学习)