历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2019年02月22日 | 机器人课程系列:如何编写Arduino程序让四足机器人移动

2019-02-22 来源:易心STEAM编程

有脚的机器人很棒吧?它们可以跨越崎岖的地形,用像生物的方式移动,这一点是藉由轮子移动的机器人没法比的。但足机器人的构造也比较复杂,让许多 Maker望之兴叹。

这篇文章为你介绍让四足机器人「走路」的方法,也就是行走的步态(gaits),并教你如何为Arduino编写程序。

关于四足机器人

自然界里有许多用四只脚走路的动物,这是因为四只脚是一种很稳定的组合,不需要特别调整姿势就能保持站姿稳定,又比六足构造单纯一些。对机器人来说也一样:和更多只脚的机器人相比,四足机器人既便宜又简单,却可以保持稳定。

积极和消极稳定

椅子是属于消极稳定(passively stable)的对象,也就是说,椅子不需要控制或调整就可以稳定地立着;人类站立时则属于积极稳定(activily stable),需要不断控制与微调身体的各部位才能保持站姿。

四足机器人在四脚着地时是消极稳定的状态,走路时则不一定。如果每次只动一只脚,让其他三只脚仍稳稳地踩在地上,即是消极稳定状态,然而四足机器人也可以放弃此状态,进入积极稳定状态,这样可以动得比较快(即使比较不顺)。这两种步态分别被称作爬行(Creep)与快步(Trot)。在这里要介绍的是爬行。

爬行

爬行是最简单使用的步态。你必须确保机器人在每次移动的时候都有三只脚踩在地面上,而重心放在这三只脚形成的三角形内即可,如果重心离开这个三角形太久,机器人就会跌倒。

听起来很简单,但问题是,你要如何让机器人在行进中维持稳定呢?我们接下来介绍的方法,可以为你省去好几小时测试和出错的时间,这是一种很简单的消极稳定爬行步态。

这是它的分解动作:

1.这是起始位置,其中一侧两只脚向外,另一侧两只脚向内。

2.右上方的脚离地,向机器人前方踏出。

3.所有脚都往回收,让身体向前移动。

4.左后方的脚沿着身体侧边往前踏步,现在这个状态与起始位置互为镜像。

5.左上方的脚离地,向机器人前方踏出。

6.重复动作,将所有脚都往回收,身体向前移动。

7.右后方的脚离地,沿着身体侧边往前踏部,这样就回到起始位置了。

请注意,不管到哪一个步骤,重心都必须维持在不动的三只脚形成的三角形内,这是爬行步态最重要的关键。

仔细分析这个步态,你会发现其实这是两组互为镜像的移动方式,踏步、踏步、移位,接着是另一侧的踏步、踏步、移位……以下有一段影片,让我们来看看 EngiMake QuadBot走路的样子。

如何编写程序

爬行步态并不复杂,但我们要如何将它写成程序代码呢?首先,我们要订出每一只脚在各个位置的x、y坐标。

这是一个四足机器人的坐标示意图,每一只脚都有自己在x、y轴上的位置。因此,我们现在可以给每一只脚一个坐标值,代表与x轴和y轴的距离(单位为毫米)。举例来说,左上方的脚位置是 (-50,50) (x,y)。现在,我们可以将这一套表示方法应用至每一个步骤中。然而,请记得其确切的位置会与机器人脚的长度有关,不管你的机器人长什么模样,请先测量脚长来再计算数值。

以下是QuadBot用的位置坐标:

在每步之间,我们只需要处理粉红色箭头表示的数值变化即可。那么,这样怎么用程序代码呈现呢?我们来看看其Arduino程序代码长什么样子。

是不是意外地很简单?让我们再次分解动作。

起始位置

第一步

第一次移位

第二步

第三步

第二次移位

第四步(起始位置)

大功告成!透过这样的方式,我们可以直接让机器人走路了!大部分的四足机器人都是由伺服马达驱动,如果你也是用伺服马达的话,可能要先研究一下反向动力学(Inverse Kinematics),才能将伺服马达的角度转换成这里提到的坐标位置。

推荐阅读

史海拾趣

高通(GENITOP)公司的发展小趣事

进入90年代,超霸电池开始拓展内地市场,先后在北京、上海、广州等十多个主要城市设立销售点。与此同时,公司业务也逐步向多元化发展,除了电池生产外,还涉足电缆、汽车配线、扬声器等领域。这一时期,超霸电池推出了可循环再用的镍氢充电电池和充电器,满足了市场对环保、高效电池产品的需求,进一步巩固了其在电池行业的领先地位。

Ethertronics公司的发展小趣事

进入90年代,超霸电池开始拓展内地市场,先后在北京、上海、广州等十多个主要城市设立销售点。与此同时,公司业务也逐步向多元化发展,除了电池生产外,还涉足电缆、汽车配线、扬声器等领域。这一时期,超霸电池推出了可循环再用的镍氢充电电池和充电器,满足了市场对环保、高效电池产品的需求,进一步巩固了其在电池行业的领先地位。

AnalogicTech公司的发展小趣事

AnalogicTech公司成立于1997年,总部位于美国硅谷。在创立初期,公司面临资金短缺、市场竞争激烈等诸多挑战。然而,凭借创始团队对半导体技术的深刻理解和前瞻视野,AnalogicTech成功开发出一系列具有创新性的产品,逐渐在市场中站稳脚跟。

酷宅(Coolkit)公司的发展小趣事

酷宅科技在智能家居市场的发展中,选择了电子电工和照明类市场作为切入点。这个市场具有巨大的智能化需求,但生产厂家众多,垄断程度低,利润率也相对较低。酷宅凭借其在物联网技术方面的优势,迅速满足了这一市场的迫切需求,并获得了巨大的出货量。随着市场的不断扩大,酷宅科技又进一步进入小家电市场,瞄准了加湿器、香薰机等长尾品类,继续扩大其市场份额。

COMPUTAR公司的发展小趣事

在光学技术不断革新的背景下,CBC株式会社于1979年成功研制出第一只手动变焦镜头。这一创新产品不仅提升了镜头的拍摄效果和灵活性,还进一步巩固了CBC在光学领域的领先地位。手动变焦镜头的推出,为CBC赢得了更多客户的青睐,也为公司的后续发展注入了新的动力。

Caliber公司的发展小趣事

在环保意识日益增强的今天,Caliber公司积极响应国家号召,推动绿色环保生产。公司投入大量资金引进环保设备和技术,减少生产过程中的污染排放。同时,Caliber还研发了一系列节能型电子产品,为用户提供更加环保的选择。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

问答坊 | AI 解惑

富士变频器问题需求帮助

富士5000P11,22KW变频器出现输出三相电压只有200V左右,输入为380V。直流母线电压530V,我对机器初始化后还是一样。我是用数字万用表检测的。电机是7.·5KW的,运行都正常。不知道这种情况是什么问题。我把变频器的输出电压值调到480V,运行到50HZ ...…

查看全部问答>

散分:这几天心情不是很好,来这里诉诉苦!

这几天心情不是很好,来这里诉诉苦!祝各位天天开心啊 我想多加点分,可是说我…

查看全部问答>

请问单片机能与电机公用一个电源吗?

我用的是52单片机,用L298驱动直流电机.我得L298是没有接任何的器件的. 我发现当L298公用一个电源的时候,单片机经常死机或则跑飞 分开电源后就一切正常. 但如果我想只用一个电源,电路应该要如何设计? 需要加光耦什么的吗?…

查看全部问答>

程序编译后出了这个提示,麻烦大家帮忙看看阿?

我的环境是这样的 先装EVC 4.0 再装standard sdk 4.2,然后装evc 4.0 sp 4.0 把程序与编译后就提示: An application targeting a Standard SDK for Windows CE .NET and built for the ARMV4I CPU cannot be run on the Emulator device. In or ...…

查看全部问答>

vxworks源代码, target/src/arch/arm  目录怎么是空的,里面应该是一些什么文件啊???

我找到了一点vxworks的源代码,但是 target/src/arch/arm 和 target/src/arch/ppc 等目录下面都是空的, 只有 target/src/arch/i86 目录下面有一些文件, 请问各位高手,哪里有 target/src/arch/arm  目录下的文件,给我发一份,不盛感激!! ...…

查看全部问答>

从nand flash中引导vxworks的一些问题

我现在有一块开发板,cpu是s3c2410,64M SDRAM, flash 只有nand flash,我现在用来做vxworks. 我改了好多天的bsp,现在仍然没有串口信息,我想请教几个问题,希望哪位大虾帮我一把,谢谢! 1)bsp中是否能支持nand flash? 2) 如果能,具体该怎 ...…

查看全部问答>

ispLever6.0引脚分配问题:部分输入输出脚无法在top view中定义,红色显示

引脚分配时出现部分引脚没有在spreadsheet view的PIN attribute中出现,在左侧双击之,则会在其中出现,但是top view中则在左侧红色显示,未能完成相应的变化,一直无法更改。不知有谁碰到过类似问题没有,我使用的环境是ispLever6.0.…

查看全部问答>

怎样调试内核及内核模块

如果大家做linux 开发肯定有过这样的想法,想调试一下内核或者一个模块那么怎么做呢,有很多书上都提到了GDB,那么怎么用GDB调试内核呢下面的文档就总结了怎样使用KGDB调试内核及模块 网上有很多相似的文章但是不够详细有的测试经过测试有问题 ...…

查看全部问答>

AVR 编译没问题,然后弹出一个

我的程序不是很复杂, 只是对一个积分的运算, 然后他弹出一句话 the estimated data stack usage of 3241 bytes exceeds the 1024 bytes allocated。。。。 大致的意思是说,程序需要大约3241 字节的 栈容量,1024 字节不够用, 然后按他下面 ...…

查看全部问答>