首先呢,这是个仿生(猫狗式)四足机器人,其结构不同于常见的蜘蛛机器人,一般我们俗称为“舵狗”,多见于12自由度和8自由度,当然也有并联腿,那种比较复杂(我不会!!!)。前面闲话提到了,我是打算相当长一段时间慢慢玩这个东西的,所以质量一定要有保障,于是采用了PLA+的材质,填充85%。没有细看网站上的介绍(其实是我英语不好,原作者说了MG996不行,我没看到)装配完成后,整体重量超过两公斤!!!当时我只是简单的试了一下,他能动起来,我就继续涮羊肉了。寒假伊始,在老丸子学弟的帮助下,发现了MG996不太行,这个腿太长了!!舵机扭矩不够。有同学建议最低采用扭矩30kg的舵机,果断换了备用模型。这是我死的第一次。
换了备用模型,这次采用的是http://hackaday.io上的smallkat。
但是这只猫,头沉是其一,零件多,装配复杂是其二,最难受的是,它安装舵机摇臂的地方间隙大,晃!!!而且过多的装配结构,使得他也很晃!!!无奈放弃。其实这个团队很有才很良心,配套软件,运动仿真,几何模型,运动学逆解算法,等等一系列功能,都可以通过一个软件和一块ESP32来完成!而且免费开源!!我也装了软件,卡死,这是我死的第二次。
第三次我采用了李荣仲博士的opencat,打印完成之后我才发现他是8自由度,估计老师不同意,扔给学弟当成备用计划吧,而且我也不喜欢那个猫的走路姿势,身重心太低了,看起来像是蠕动。再说了,程序都有了,咸鱼也有卖的,那我瞬间完成,岂不是又要陷入无聊涮羊肉的日子。
眼看到了放寒假的时间,我要尽快确定模型了,再晚点就都接触不到打印机了。这时,我的学长给我推荐了Nano这个9g蓝色塑料舵机(我们戏称“蓝色石子”)。同样,这个模型除了装配复杂,身子还很单薄,虽然他的视频上,老外几乎让他跳起来了,但我这种运气不好的人,还是放弃。更何况,我没嫖到它的程序,还是算了吧。
老哥设计的时候很贴心的给主躯体加上了肋板,垂直支撑,加固机械强度,甚至还预留出了装开关的位置。
大概的受力分析
机器狗腿部质量相对于躯体以及躯体上所荷载的电路以及电源,质量可以忽略不计,认为质心集中在躯体底部几何中心。由图可见,此时机器狗左前腿、右后腿处于抬起状态,虚着不受地面给出的反作用力;右前腿和左后腿真实着地,处于支撑相,除自身重力已忽略外,受地面给出支持力。此时机器狗存在向前运动趋势则对地运动方向向后,由支持力分解给出的摩擦力为图中Fx,Fh二者方向,摩擦力作为驱动力才能使得机器人能够运动,两条支撑相着力腿膝关节向内聚合,运动方向沿轴点切线方向向后;为在速度较低情况下维持机器狗稳定不发生横向侧翻,两条支撑相着力腿髋关节需要给单足末端一个横向张力,此时两髋关节受力平行于Y轴且指向质心。
仿生机器狗主要功能
设计并制作一台多关节仿猫狗类四足机器人:
绘制整体结构三维建模,采用3D打印机生产制作;
关节使用高精度模拟舵机作为执行机构,通过主控芯片进行正逆运动学分析,计算出各个舵机关节角度,实现基础仿生步态的行进动作;
自行设计PWM驱动电路,协助主控芯片完成对多个舵机的同时控制;
顶部设有OPENMV视觉传感器,能够对行进路径中的障碍进行识别并规避;
使用串口蓝牙芯片,通过上位机进行遥控,控制实现基础行进动作;
采用格氏电池配合UBEC降压模块为系统供电,为防止锂电池过度放电,加入低电压报警保护电路;
增加ESP32CAM图像传输系统,将数字图像通过无线网络传输至上位机。
简而言之:手动遥控;自动行进;复杂步态;图像传输;低电压报警。
整体设计思路
主控芯片采用STM32F411CEU6单片机;各关节采用高精度金属齿轮模拟舵机作为执行机构,通过运动学分析逆解算出各关节执行动作时相应角度;采用串口蓝牙芯片,通过上位机发送固定的数字键值信息,匹配相应动作,实现遥控控制功能;机器狗头部增加由STM32H7系列单片机作为处理单元的OPENMV视觉系统,实时识别视野范围内的障碍,将图像处理结果坐标传输给动作主控芯片,实现对障碍的规避;增加ESP32CAM图像传输系统,将数字图像通过无线网络传输至上位机,实现实时观测。
PCA9685一直忘了加
硬件选择
1)主控。早些时候,我优先采用的是mega2560,因为小黄spot的内部空间大,而且mega2560自带12路pwm输出啊,用Arduino IDE简直不要太美丽,开环都能写。可是随着模型的更换,主控也换了。我就实现简单的前后左右,没有什么“起跳相”之类的步态,所以常见的树莓派、英伟达的板子完全没必要,就这几个简单的动作,一片STC足矣。
考虑到后期升级以及配合别的传感器,最终采用了STM32F4系列,而且开源的老哥也是用的F4,我也就很无耻的和他“达成一致”。STM32F411CEU6,恰好疫情的时候他家发货迅速。
而且他的体积小,放在桌面级的四足内部很完美。用过的都知道,先分频再倍频,F4能分频到1M而F1系列不能,所以F4相对快一点(哈哈哈哈,好不严谨的原因,具体参数详见参考手册)。168MHZ主频,25MHZ的外部晶振,其实足够了,甚至我都忘了勾选keil中的浮点运算功能。
2)舵机。舵狗舵狗,电机是个很重要的东西。3块钱一个的SG90是肯定不行的,无刷、psms也就国内的几个有数的大佬搞出来了,而且我也买不起啊。其他的各种舵机也都100+,所以采取了群里穷人的建议MG90S。金属齿轮,4.5~7.5V宽电压,买来一般也就是165°左右,虽然他写的180°,基本够用。线长、电压、重量、控制方式,都只能说中规中矩,唯一的优点就是金属齿轮,对得起这个价格。
3)蓝牙模块。遥控功能是通过串口蓝牙模块实现的。我采用的是HC-05最常见的,Baud定在9600bit/s,不快不慢,十几米的距离工作稳定,电压范围在3~6V,便宜货里的首选。手机随便搜索一个“蓝牙串口”APP输入了键值信息就能发出,基本上算是初学STM32串口难度,开源的老哥为了减少出现奇怪问题的几率还自己创建了帧头“[”和帧尾“]”。(后来主控芯片需要接收OPENMV的自动模式指令和手机发出的手动模式指令,这个小的主控板又没有第二组硬件串口,我又懒得研究分时复用,恰好这个HC-05抽风出现了随机收不到数据的问题,就从老丸子手里抢了一块带蓝牙的ESP32板子代替,同时把判断手动自动的程序放在了这块ESP32里)
4)视觉模块。严格来说我的任务要求里,只是让我在机器狗头部加装传感器,最便宜的方案肯定是光电传感器,诸如红外对管之类的,但老师后期很有可能非要看狗子的“跟随”效果,超声波什么的,我又懒得写,直接上OPENMV吧。
我用的是OPENMV4,19年暑假备战电赛时候买的,STM32H7系列,正常工作主频480MHZ,总算力1027DMIPS,支持micro Python开发,简直就是机器视觉行业的入门利器。标配的光学摄像头是OV7725,最大分辨率640x480,水平视角90°俯仰视角115°,实际测试,标准镜头实现寻迹功能或者避障功能尚可,我也就没换。(有条件的同学换成广角镜头更好啊
5)图传。市面上的成品图传五花八门,价格和质量也是参差不齐,就像电脑的配置一样,上不封顶,入门级的国产货也都要300+,我就是简单的一个可视功能而已,所以从老丸子手里抢了一块ESP32-CAM。它支持OV2640和OV7670两种模式摄像头模块,内置补光灯,即可满足高清晰度图像采集需求,又能达到流畅传输视频信号的目的。内置双核低功耗32位处理器,主频高达240MHz,普通状态下总算力最高可达600DIMPS,甚至满足一般要求图像处理的能力。
上网嫖个固件刷进去就好了,写入WIFI名称和密码,近距离也不需要做穿透,省事得很/doge(我,这时候脸黑到爆了好吗。某信可官方旗舰店,下单迟迟不发货,问他居然和我说没货,耽误一周。我的Arduino IDE居然装不上ESP的资源包,相信好多不富强上网的同学都遇到过,一天只下载了14kb,我的酸酸乳这几天也凉了,手动添加资源包,时而能用时而不能,极其不稳定。果断邮给老丸子帮忙烧录程序)硬件还有个坑,5V2A以上的供电才算好,否则图像会出现水波纹,供电大了又会发热,毕竟他也就几十块钱,凑活着用吧。
6)电源。电源是中规中矩的2S 15C 800mah格氏动力电池,搭配5V7A的外置是UBEC(LM2596方案)降压模块。构成材料和制作工艺上,格氏动力电池相比传统锂电池或铅酸电池,能量密度大约是其4倍;2S指的是两块动力电池串联,单节电压为3.7V,串联后电压为7.4V;800mah指的是电池能够以800ma持续放电1小时;15C指的是,电池的放电倍率为15倍,即瞬时放电可达到12A的电流。
体积也很小巧,就是续航不久而已。接上BB响,低电压报警了就随时充电,延长电池使用寿命,都是基础操作啊。这个UBEC模块还是很给力的,正常工作20分钟也不烧毁。
程序设计思路
首先简单的说一下运动学正解和运动学逆解。给定基座坐标和各旋转关节变量,计算末端执行器的位置,此流程为运动学正解。运动学逆解,即已知机器狗足末端位置和姿态,运用数学方式求解出对应的全部关节变量。
常见的逆向运动学分析的解法主要有两种:封闭解和高自由度机器狗所使用的数值解析解。本设计的单足模型仅有髋、膝、踝关节三个主动自由度,显然封闭解更适合。封闭解又进一步可分为几何解和代数解(D-H坐标法),由于需要考虑机器狗足的灵巧工作空间与可达工作空间,并尽可能的使所有步态都在可达空间内有解,且代数解需要建立世界坐标系的整体法线轴向量,以及进行大量的齐次坐标非线性方程运算,故此采用几何解法更贴近实际。
单腿几何模型及计算
从机构学上来看,整个机器狗躯体连同四条腿是一个并联式移动平台,每条单腿是整个机器狗的分链支撑,又可看作看做三主动自由度和一个被动自用的的串联机构,所以整个机器狗相对于世界坐标系是一个三维串并混联机构。直接分析复杂模型难度较大,故引入单腿模型进行分析。
标定A点为该腿与躯体结合支点,即髋关节与躯体交点;绕轴旋转角度记为α;标定B、C分别为膝关节踝关节结合支点,绕轴旋转角度分别记为β、γ;标定D为单足末端与地面接触质点,设D相对于A的空间坐标为(x,y,z);设定AB之间连杆长度为h,大腿长度为hu,小腿长度为hl。认为α,β,γ三个角度始终存在某种函数关系,并可计算得到D点相对于A点的空间坐标的具体数值,此计算过程即为逆向运动学分析
不难发现,B、C、D三个点在空间中投影永远共面,可以此先入分析。选定xoz投影面(α=0时)为左视图,即X正方向为躯体正前方。
如左图,从Y方向观察(左视图),有B点与A处于同一Y方向水平轴线上,按作重合标记。则有大腿与竖直方向(初始位置)夹角为β,小腿与大腿延长线夹角为γ,记单足小腿与地面所形成夹角为τ;右图为从躯体正前方向观察所得,连杆与水平方向夹角为α,此时大腿BC与小腿CD长度均为实际长度在竖直方向的投影长度,记为hu’和hl’。
根据三角函数知识可得hu分量实际长度为:
结合三角形基础知识,推导出τ角度为:
化简后用三关节基础角度表示为:
则Z方向上D相对于A的偏移量为
其余两个方向上D相对于A的偏移量为:
经计算获得该单足末端质点D相对于A的三轴向偏移变量与三个主动自由度的函数关系。结构设计完成时已经固定了连杆、大腿和小腿的长度,在程序中带入实际数值,对这个角度进行反三角函数运算后可得到各舵机执行器所应达到的角度。将每步的步长定义为全局变量,通过调整某侧步长的大小来实现转向的计算。完成全部四条单足的一次运动周期计算后,可将数据存入暂存数组等待调用。