写在最前

最早看到这个项目已经是大半年前了,一直蠢蠢欲动,直到八月份看了这篇推送——用树莓派 DIY 波士顿机器狗,帮你省下 50 万:教程开源,人人皆可上手,才真正下定决心——做一个自己的机器狗。

这次选择的硬件方案是 来自 Nahuel Taibo 的 modifications v2.1;参考的软件方案是来自 来自 mike4192 的 spotMicro

需要的材料清单:

  • 树莓派/stm32 控制器
  • 一台 3D 打印机/直接购买 3D 打印服务
  • PDI-HV5523MG 舵机 × 12(当时一次性下单 12 个,被店家追着问了不少,现在商品图上好像已经加上“机器人专用”了)
  • 法兰球轴承 F625ZZ × 8
  • M3 螺丝(各种长度)
  • 2S/3S 电池
  • 5V 降压电路(LM2596/MP2482)
  • PCA9685 舵机驱动板
  • LCD 显示器(可选)
  • 防滑贴/减震垫(可选)
  • 迷你路由器(可选)

本文包括树莓派上手、电路设计、3D 打印、SpotMicro 功能复现,希望对你有帮助。

3D 打印与组装

机器狗的机械结构部分参考了 来自 Nahuel Taibo 的 modifications v2.1,作者主要是修改了几个连接,加了身体的强度。在 Gitlab 逛逛会发现这个社区里有很多爱好者在分享自己的经验,“Open Source, Open Mind”。

下载到所有零件的 STL 文件后,只要自己切片一下就可以开始打了。原版是黄黑配色,这次做的是黑白的,可以提前在 KeyShot 里渲染一下,看看效果图选颜色。整个打印工作从 Nov.20th 开始,断断续续一直到 Dec.6th 基本完成,期间走了不少弯路,关于调平、支撑、翘边之类的,下次整理整理。

组装任务相对就简单了,基本就是各种长度的 M3 螺丝。需要注意的是舵机安装的时候要上电确认一下关节活动空间,这时候如果有一个带旋钮的舵机测试板会很有帮助。

电路设计

电路部分,主要就是降压稳压的功能,需要注意的问题是树莓派要求的功率不小,用普通的 5V1A 适配器供电时都会提示供电不足。这次的电路拓扑图如下:

电路拓扑图

关于为什么功率电路和控制器芯片不用同一个降压模块,解释是:主要是电机是一个感性的负载,电机在转动的时候会有反向冲击感应电动势,这对于 mcu 芯片来说是绝对不行的。 来自:请教个树莓派的供电问题

树莓派

树莓派是一个基于 Linux 的单片机电脑,可玩性很高,这次将使用树莓派 3B 作为机器狗控制器。

初次上手,先玩了玩树莓派官方推荐的 Raspbian 系统。(这一步也可以跳过)

参考教程 如何给树莓派安装操作系统 以及 树莓派系列教程 1:人生若只如初见。在 官网 下载 NOOBS 离线安装版,可以先下种子,方便加速。启动后会显示 NOOBS 的界面,进行系统安装。

Raspbian 系统可以安装 xrdp 服务,在局域网下使用 Win10 的“远程桌面连接”访问。注意在远程桌面模式好像不能关机,只能在命令行里输入sudo poweroff来安全关机。

由于 mike4192 的这个仓库 是建立在 Linux 上的 ROS Kinetic 环境中的,所以要从官方的树莓派专用系统 Raspbian 转到支持 ROS 的 Ubuntu 系统。预安装了 ROS 的镜像可以在 ubiquity robotics 找到,然后使用 Etcher 工具直接将镜像写入 SD 卡就可以启动了。

系统搞定之后就是git clone以及 ROS 编译。注意编译的时候要把 I2C 驱动板连上,否则会提示error: ‘i2c_smbus_read_byte_data’ was not declared in this scope

舵机校准

连接好所有供电以及树莓派和驱动板之间的 I2C 线缆后,可以感受到狗狗已经跃跃欲试了。接下来一步是舵机校准,这里可以参考作者给出的“servo_calibration.md”文件,找个平台把狗夹起来,调整每一个舵机的偏移量,完成一个“servo_calibration_spreadsheet.ods”表格,把数据写入配置文件,完成。 nano ~/catkin_ws/src/spot_micro_motion_cmd/config/spot_micro_motion_cmd.yaml

功能复现

到此安装完成,可以开始动了,具体操作直接看作者代码注释就好。

需要注意直接rosrun可能会找不到可执行文件,因为脚本是 Python 写的,这时候需要chmod +x给一下权限。

这里简单汇总一下常用命令:

# 启动驱动板
rosrun i2cpwm_board i2cpwm_board
# 舵机控制
rosrun servo_move_keyboard servoMoveKeyboard.py
# 修改配置文件
nano ~/catkin_ws/src/spot_micro_motion_cmd/config/spot_micro_motion_cmd.yaml
# 机器人进程
roslaunch spot_micro_motion_cmd spot_micro_motion_cmd.launch
# 遥控
rosrun spot_micro_keyboard_command spotMicroKeyboardMove.py

改进与提升

原作者模型中的足底也是直接用的打印件,测试之后发现效果一般,后来找到一种防滑贴,裁剪改造了一下,效果不错。

之前的调试一直都是在室内局域网下完成的,为了扩展一下场景,让狗跑得更自由,可以在身上背一个迷你路由器。这次选的是一款能用 USB 供电的路由器,只要绑定一下树莓派的 MAC 地址和 IP,连接到局域网的设备就都能 SSH 访问它了。路由器和树莓派可以用有线连接,这样树莓派的无线网卡可以同时连接到互联网,互不冲突。

受限于舵机性能,这只四足机器狗可能更偏玩具属性,但确实激发了自己对四足的兴趣。

其他一些参考资料:

逆运动学参考论文:Sen, Muhammed Arif & Bakircioglu, Veli & Kalyoncu, Mete. (2017). Inverse Kinematic Analysis Of A Quadruped Robot. International Journal of Scientific & Technology Research. 6.

Spot Micro AI 社区:https://gitlab.com/custom_robots/spotmicroai

四足机器人的变革与机遇——宇树科技:https://www.bilibili.com/video/BV1BV411h7MZ

菠萝狗–一个低成本大型全套四足机器人软硬件开源项目:https://github.com/ToanTech/py-apple-quadruped-robot