用树莓派DIY波士顿机器狗,帮你省下50万:教程开源,人人皆可上手
磐创AI分享
来源 | 量子位(QbitAI)
编辑 | 鱼羊、晓查、发自、凹非寺
53万一只的波士顿动力机器狗,玩不起怎么办?
不如利用开源项目,拿树莓派DIY一个,成本不到4000元。
这么一站,是不是就有波士顿动力狗那种feel了?
先来个热身运动,展示一下灵活的关节:
通过三轴身体姿态控制,这样一只树莓派版波士顿动力狗,可以实现两种运动模式。
一种是小跑姿态。这种4相步态下,机器狗对角线上的两腿同时移动,能达到更快的移动速度。
另一种是步行姿态。这种结合身体运动的8相步态,有助于保持机器狗的平衡和稳定性。
这只机器狗由外国小哥Michael Romanko打造。
是不是感到有一丝心动?
那么不妨接着往下看,拿好这份精确到每个细节的开源教程,拥有自己的迷你波士顿动力狗不是梦。(狗头)
硬件成本不到4000元
这只树莓派机器狗基于开源的ThingVerse Spot Micro框架打造。外壳部分由喷嘴0.6的3D打印机制作。
软件部分在运行Ubuntu 16.04的树莓派3B计算机上实现。
所以首先,需要准备一个价值人民币230元左右的树莓派3B开发板。
控制部分的组件,包括价格不到30元,接口为I2C的伺服驱动PCA9685。
以及12个伺服电机PDI-HV5523MG,单个价格约为70+元。
另外,还需要配备一块16×2,I2C接口的液晶显示器。
电池方面,采用的是2s 4000mAh的锂电池,直接连接电源伺服,价格在160元左右。
稳压器用到的是HKU5 5V/5A UBEC,为树莓派、液晶面板、PCA9695控制板供电,价格折合人民币约为45元。
整个一套下来,算上3D打印机,成本不超过4000元,甚至比斯坦福的廉价开源四足机器人Pupper成本(600-1000美元)更低。
△斯坦福Pupper
精确到每个细节的教程
Mike组装教程比较简略,但是给出自己参考的一个“微型机器狗AI”(SpotMicroAI)社区。
SpotMicroAI的教程可谓是“手把手”,撰写教程的工程师几乎提供了组装机器狗的每一步详细,甚至连如何SSH连接到树莓派的方法都有,力求每个人都能看懂。
首先是为树莓派安装操作系统,建议安装PINN,这是一个增强版的NOOBS操作系统安装器。
安装好以后,系统自带SSH和VNC,无需给树莓派外接键鼠,可通过远程方式对其进行调试。
△ 成功通过VNC连接到树莓派
在PINN的众多操作系统选项中选择安装Raspbian Lite。此后将断开VNC连接,全部用SSH连接到树莓派。
树莓派系统自带FTP,为了方便初学者在电脑和树莓派之间传输文件,建议安装FileZilla软件。
输入树莓派的IP地址、用户名、密码、端口22,点击Quickconnect即可连上树莓派的文件系统。现在,您可以根据需要从SpotMicroAI拖放文件。
接下来进入最关键的步骤,安装机器狗控制软件,为了简化安装,作者已经写好了脚本,安装过程自动完成:
ssh pi@192.168.1.XX
curl https://gitlab.com/custom_robots/spotmicroai/basic-runtime/-/raw/master/utilities/self_install.sh | bash
然后启动通讯总线I2C。打开终端并运行以下命令:
sudo raspi-config
然后从显示选项进行以下更改:Interfacing options → Enable I2C
再按照下图的方式将所有硬件和树莓派连接起来:
机器狗外壳的3D打印文件也同时附送,作者建议使用0.6mm的喷嘴,层高设置为0.3mm,可以最大限度地加快打印速度。
完成硬件组装后就是软件调试部分。
先下载JSON的格式的默认配置文件:https : //gitlab.com/custom_robots/spotmicroai/basic-runtime/-//blob/master/spotmicroai.default,将该文件放在用户主目录下。
打开校准工具,对12个伺服点击进行校准,找到机器狗“休息”时电机的初始位置。
cd ~/spotmicroai/calibration
./calibration.sh
经过校准后的机器狗,就可以做出各种动作了。
等等,给机器狗尾部安装的显示屏有什么用呢?其实它可帮我们快速看到机器狗当前的状态。
比如,在上面的面板里,我们能看到树莓派CPU当前的温度、与外部控制器的连接状态、伺服控制板状态,等等。
至此迷你机器狗就大功告成了。如果你不仅想组装它,还想学习更高阶的开发教程,那么可以去看一下Extra里的内容。
下一步计划
现在Mike的迷你机器狗只能做一些简单的动作,Mike下一步的计划是让它和波士顿动力的机器狗一样智能。Mike未来的目标是:
1、加入激光雷达,通过SLAM实现房间的简单2D映射。就像原版的波士顿动力机器狗一样。
现在已经有人实现了Mike的第一个目标:
2、开发自动运动模块,指导机器人围绕感测到的2D环境执行简单任务。例如在房间中导航,并避免撞到障碍物。
3、结合摄像头或网络摄像头创建软件模块,进行基本的图像分类。例如,感知到拳头的闭合和张开,让机器人对某个动作做出特定反应,实现手势控制。
网友:整起来
自己动手DIY“波士顿动力狗”,这样的实践连树莓派官方都点了赞。
网友们则纷纷表示:鹅妹子嘤,这真的很酷。
也有人迫不及待,打算自己动手做起来了。
那么,整起来?
参考链接:
https://www.raspberrypi.org/blog/mini-raspberry-pi-boston-dynamics-inspired-robot/
https://github.com/mike4192/spotMicro#Overview
https://gitlab.com/custom_robots/spotmicroai
— 完 —
本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。
- Python之dict(或对象)与json之间的互相转化
- datetime.date(2014, 4, 25) is not JSON serializable
- Linux下PAM模块学习总结
- 统计文件中出现的单词次数
- EF批量操作数据与缓存扩展框架
- 前端面试题:JS中的let和var的区别
- 虚拟机字节码执行引擎
- 快速傅里叶变换(FFT)详解
- SQLServer 数据库镜像+复制切换方案
- Handler源码分析
- STM32-对芯片启动读保护,实现加密(详解)
- Django+xadmin打造在线教育平台(一)
- “无法删除数据库,因为该数据库当前正在使用”问题解决
- HDU 4372 Count the Buildings
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# 8.0 文件长度 Bytes 字节转 KB 等单位字符串
- LeetCode---两数之和
- 通过 cmd 批处理文件将 16 进制转 10 进制数字
- HTML5-JS操作页面滚动条(禁止、隐藏、显示、不显示)
- 追根溯源MySQL,“你的表情”插入对了吗?
- 推荐官方开源 PInvoke 库 包含大量 win32 封装
- 这是什么重大发现!一个导致JVM物理内存消耗大的Bug
- 无语,我差点被面试官怼坏了,又给我问到MySQL索引
- 面试官虚晃一枪:项目中有用过锁吗?能解释一下什么是AQS?
- 实验四--数据库的安全性、完整性控制
- Servlet生命周期
- 制作的 dotnet tool 运行失败提示依赖缺失
- 撸了个多线程断点续传下载器,我从中学习到了这些知识
- 使用 IOC 控制反转和 DI 依赖注入的意义
- Servlet配置初始值,并获取初始值