16浏览
查看: 16|回复: 5

[项目] 【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人

[复制链接]
MABEL 是一个开源自平衡机器人,其灵感来自波士顿动力公司著名的手柄机器人。该机器人通过 Arduino 控制,Arduino 根据从 MPU-6050 加速度计/陀螺仪接收的角度处理所有 PID 计算(基于开源 YABR 固件),而 pi 管理蓝牙和伺服控制,运行逆运动学算法,使机器人腿在两个轴上完美平移。

MABEL 的目标是创建一个价格合理的腿部平衡机器人平台,就像波士顿动力手柄机器人一样,可以使用廉价零件按照业余爱好规模建造。MABEL将能够在多个轴上主动保持平衡,并根据周围环境改变腿长,以提高地形和越野性能,这与基于 Arduino 代码的 YABR 不同。

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图1

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图2

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图3


驴友花雕  中级技神
 楼主|

发表于 6 小时前

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人

细节
MABEL(电子调平多轴平衡机)
这是 MABEL 终于能够自己保持平衡后的第一个测试视频。MABEL 使用 YABR开源平衡固件作为基础,使用 PID 控制回路根据收到的 MPU-6050 角度数据做出计算决策,以确定如何保持直立。然后, PID 控制器将输出适当的校正值,并将该值解释为步进电机脉冲,使机器人前进或后退,以保持在所需的设定点(直立)。与 YABR 项目不同,我决定使用广泛使用的Arduino CNC Shield,以减少焊接并使基本上所有东西都即插即用。 您可以在 YABR 页面或我的博客上找到一些详细的构建指南, 我在其中解释了我为使新屏蔽兼容而所做的代码更改。

MABEL 与其他平衡机器人完全不同,它的腿可以移动,机器人不需要在固定位置运行。 这就是 Raspberry Pi 和伺服控制器发挥作用的地方。我用 python 编写了一个逆运动学类,它接受(X,Y)坐标并向后计算精确移动到该位置所需的每个机器人关节的角度。简而言之,因为我们知道每个腿部部分的长度是恒定的,所以我们可以使用 X 和 Y 分量作为三角形中的第三条线来绘制一个虚拟三角形,并使用余弦规则计算三角形中的角度。这里,上指大腿枢轴和小腿枢轴之间的距离(92 毫米),下指小腿枢轴到车轮中心的距离(75 毫米),X 和 Y 由用户提供(也以毫米为单位)。

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图1


代码如下:

  1. # IKSolve.py is an inverse kinematics module for MABEL to move the wheel (effector) in 2D Cartesian coordinates.
  2. # Contributors: (@raspibotics)
  3. # ***USAGE GUIDANCE***
  4. # x translates the robot leg vertically and y translates the leg horizontally, each value should be in integer mm
  5. # x is the distance between the upper leg pivot and wheel centre (Vertically) - acceptable range for MABEL (160-98mm)
  6. # y is the distance between the upper leg pivot and wheel centre (Horizontally) - acceptable range for MABEL (-50, 50mm)
  7. from math import acos, degrees, atan2
  8. class IKSolve:  # IKSolve - Inverse Kinematics solver for MABEL
  9.     def __init__(self, ru_home, rl_home, lu_home,  # IKSolve Constructor, Values are default leg section lengths in mm
  10.                  ll_home, upper_leg=92, lower_leg=75):
  11.         self.ru_home, self.rl_home = ru_home, rl_home  # Right leg servo home positions
  12.         self.lu_home, self.ll_home = lu_home, ll_home  # Left leg servo home positions
  13.         self.a_const_0 = (upper_leg ** 2) - (lower_leg ** 2)  # b^2 - a^2
  14.         self.a_const_1 = 2 * upper_leg  # 2*b (c is unknown)
  15.         self.b_const_0 = (upper_leg ** 2) + (lower_leg ** 2)  # b^2 + c^2
  16.         self.b_const_1 = 2 * upper_leg * lower_leg  # 2bc
  17.     def translate_xy(self, x, y, flip=False):  # translate_xy(x, y) Calculates the required angles to move to (x, y) mm
  18.         if x == 0 and y == 0:  # (0, 0) resets servos to home position
  19.             return self.ru_home, self.rl_home, self.lu_home, self.ll_home
  20.         else:
  21.             try:
  22.                 angle_a = degrees(acos(((self.a_const_0 + (x ** 2)) /  # A = Cos^-1((b^2+c^2-a^2)/2bc)
  23.                                         (self.a_const_1 * x))))
  24.                 angle_a += degrees(atan2(y, x))  # Tan^-1(y/x)
  25.                 angle_b = 180 - degrees(acos((self.b_const_0 - (x ** 2 + y ** 2)) /  # A = Cos^-1((b^2+c^2-a^2)/2bc)
  26.                                              self.b_const_1))
  27.             except ValueError:
  28.                 print('Value specified is outside range of capable movement. Please specify a different value...')
  29.                 return
  30.         if flip is not False:
  31.             return (self.ru_home - round(angle_a)), (self.rl_home + round(angle_b)), (
  32.                     self.lu_home + round(angle_a)), (self.ll_home - round(angle_b))
  33.         else:
  34.             return (self.ru_home + round(angle_a)), (self.rl_home - round(angle_b)), (
  35.                     self.lu_home - round(angle_a)), (self.ll_home + round(angle_b))
  36. IKSolve = IKSolve()
  37. print(IKSolve.translate_xy(...
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 小时前

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人

实际上,这意味着机器人可以在所有可用的轴上平移,这使得 MABEL 可以主动转移她的重心,抬起她的腿越过障碍物并保持身体水平并倾斜到角落,而所有这些在传统的刚性框架自平衡机器人上都是不可能的。


在硬件方面,MABEL 采用齿轮和轴承直接驱动,从而减轻了伺服电机最弱方向的负载,消除了伺服轴的晃动。这以前是个问题,因为我用的是亚马逊的便宜伺服电机,这让项目更容易上手。

如前所述,Arduino CNC 扩展板 + Arduino Uno 堆栈也用于处理实时计算和校正,这些计算和校正需要比树莓派本身的处理速度更快。CNC 扩展板特别有用,因为它允许无焊组装,并具有一个 I2c 分线器,方便 MPU-6050 插入,以及用于步进电机电缆的接头。


我使用的 NEMA 17 步进电机非常常见,在 3D 打印机、CNC 机床以及现在的 MABEL 中都有广泛的应用。步进电机的绝对定位能力意味着机器人可以直接、精确地向前和向后移动,而无需闭环控制,而直流电机则需要闭环控制。这使得编程变得简单,并且易于使用,现有的 YABR 固件能够以 1/4 微步进控制步进电机,从而提高平滑度。我使用的 A4988 驱动器还具有电流斩波功能,可以限制步进电机可用的电流以保护它们。我的电机额定电流为 1.5A,因此我测量了驱动器上 Vref 可变电阻两端的电压并将其设置为 0.96V - 最初设置得较低,但我发现在机器人遇到障碍物后,这个功率不足以让它继续前进。


现在它可以毫无问题地越过小障碍物,但是一旦伺服器主动移动 MABEL 的腿,将重量转移到负载最大的轮子上,保持她的身体水平并实现更先进的地形导航,情况会变得更好。

未来的计划...
同时实现平衡和腿部高度调节(即将推出)
动态转弯
臂(可能,安装孔已经存在)
视频游戏控制器遥控器,方便使用(即将推出)

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图1

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图2

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图3

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图4

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图5

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图6

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图7

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图8

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人

MABEL 用腿来加速和刹车!

所以我们又回到了英国,处于封锁状态,这意味着我有更多时间开发 MABEL。这次我把腿派上了用场,你可以在初步测试中看到,通过使用逆运动学脚本(写在上一篇文章中)移动腿,我们可以移动腿。这会改变机器人的重心,让我们可以向前或向后踢动机器人,从而更有效地加速和减速机器人。

目前,机器人腿部的上下移动相当困难,因为这容易导致机器人不稳定。我的解决方案是编写一个脚本来平滑伺服运动,这样可以让机器人在上下移动时更加稳定。

视频中的所有驱动都是通过移动腿部来改变重心 (CoM) 来实现的。这使得机器人比单纯改变电机转速更有效地加速。虽然还需要一些改进,但正在逐步实现:

MABEL 开车!!

更新:MABEL 现在可以使用 Wiimote 作为控制器进行无线操控了。(稍后我会在主项目详情中发布代码,供大家一同搭建。)树莓派现在可以通过 USB 串行连接与 Arduino 通信,但由于 MABEL 纤薄的机身无法连接 USB 数据线,我不得不将电线直接焊接到树莓派和 Arduino 的焊点上。未来我想放弃 WiiMote,换用像 PS4 这样的新型控制器。使用操纵杆,我可以控制机器人的速度,从而实现更精确的移动和控制。MABEL 的下一步是使用方便的 PCA9865 伺服控制器和 Adafruit ServoKit Python 库,让伺服器在保持平衡的同时上下移动。MABEL 仍然有点摇晃,但我发现降低 Kd PID 常数有助于减少平衡时的振荡。

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图1

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人

【Arduino 动手做】MABEL——波士顿公司启发平衡腿机器人图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail