自制DIY 机器狗 完全教程 - MIT猎豹Cheetah

标签: 人工智能  深度学习  神经网络

背景

3年前,MIT开源了世界上跑得最快最灵活的猎豹机器狗,自此以后,出现了大量商业化的机器狗,这里就不再一一介绍。只能说作为一个军方赞助的项目,能够开源,实属不易。
好消息是,2个月前,MIT的一个专注于猎豹的人工智能项目开源,有了大脑的机器狗现在会更加灵活。让我们来看看,猎豹机器狗进化的程度。

MIT MIni 猎豹 强化学习 模型

MIT Mini 猎豹 后空翻

结构设计

模块化关节电机

性能考虑

为了能够使得重达9.8公斤的机器狗可以灵活跑动,后空翻,对于关节电机的性能也有一定要求。每个关节电机的参数如下图,每条腿3个电机,4条腿,总共有12个电机,也就是我们通常所说的12自由度机器狗。

参数数量
重量480克
大小96 mm O.D, 40mm axial length
最大扭矩17 N m
连续扭矩6.9 N m
最大转速40 rad/s @ 24V
最大功率+250/-680 瓦
电流4.5kHz @ 4.5 N m, 1.5kHz @ 17 N m

关节结构

模块化的关节电机,如下图。
在这里插入图片描述

关节电机拆解后的机构。
可以看到,为了增加扭矩,电机增加了行星齿轮组,并且电机驱动器也一并组装进电机盒。
在这里插入图片描述
另外搜集到一些3D打印资料已分享到群文件,可自行下载,Q 760101443

在这里插入图片描述

四足平台设计

猎豹机器狗的整体设计如下图,金属气息浓厚。
在这里插入图片描述

腿部设计

腿部关节的设计。
每条腿部有3个电机,3个电机全部位于上关节处,这是为了能够减轻下腿的重量,方便机器狗可以灵活跳动。
在这里插入图片描述

下腿部使用皮带带动。
在这里插入图片描述

身体设计

身体使用厚度为1.5mm的6061硬铝制作。
在这里插入图片描述

身体内部装有总线驱动板和小电脑。
在这里插入图片描述

脚部设计

脚部安装有橡胶球。
在这里插入图片描述

在这里插入图片描述

硬件设计

有2个总线通信板SPINE,每个SPINE负责与两条腿通信,每条腿有3个电机,每个电机都有一个关节驱动器。
SPINE与电脑连接,电脑中安装控制系统,原设计使用的是UP Board的小电脑,实际上我们可以使用树莓派4B或者Jetson Nano, Jetson TX2替代。
在这里插入图片描述

关节驱动器

关节驱动器,使用FOC技术对电机进行控制。
在这里插入图片描述

每个电机都需要1个驱动器,驱动器安装在每个电机的电机盒中。
在这里插入图片描述

通信总线板

总线驱动板SPINE,总共需要2个SPINE,每个SPINE控制两条腿。
在这里插入图片描述

供电系统

使用18650电池,组装成24V 5Ah的电池组。
在这里插入图片描述

电源板,输出5V电压,供电给电机和控制板。
在这里插入图片描述

MIT Mini 猎豹,相对于以前的版本和波士顿机器狗,成本都大幅下降,普通玩家基本可以接受。
相关电路板,程序资料可以自行在群文件中下载 Q 760101443
在这里插入图片描述

控制系统

下载最新的控制系统源代码。

编译代码。

mkdir build
cd build
cmake ..
./../scripts/make_types.sh
make -j4

安装并运行控制系统。

1. 创建文件夹
$ mkdir mc-build
2. 创建可执行程序
$ cd mc-build; cmake -DMINI_CHEETAH_BUILD=TRUE ..; make -j
3.接入网络,并且可以使用ssh进入机器狗的嵌入式系统电脑。
3. 把编译好的系统传输到机器狗
$ ../scripts/send_to_mini_cheetah.sh
4. 使用ssh登录机器狗
5. 进入系统文件夹
$ cd robot-software-....
6. 运行控制程序
$ ./run_mc.sh

人工智能

以上,已经可以控制机器狗进行任何动作,不过如果想要机器狗能下楼梯,走不平的路,更加流畅的运动,就需要机器狗可以自我学习,不断进化。这就需要训练模型,给机器狗按上人工智能的大脑。
首先,下载源代码。
安装 pytorch 1.10 和 cuda-11.3

pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

安装 Isaac Gym

1. 下载并安装Isaac Gym Preview 3 地址 https://developer.nvidia.com/isaac-gym
$ tar -xf IsaacGym_Preview_3_Package.tar.gz

2. 安装python包
$ cd isaacgym_lib/python && pip install -e .

安装系统

$ pip install -e .

训练模型

python scripts/train.py

评估模型

python scripts/play.py
版权声明:本文为qq_34922337原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34922337/article/details/126351281

智能推荐

macOS终端字体颜色DIY教程

换了mac book后经常用Terminal登录Linux系统,强迫症的趋势下,决定修改mac终端的主题,目标是看起来跟Ubuntu一样。 效果图: 修改终端的偏好设置 打开终端的偏好设置,选一个喜欢的主题,Pro是预设的黑白配,字体我喜欢 Menlo。 添加变量 编辑~/.bash_profile,添加三个变量 LS_OPTIONS是指定没有配置的项目采用自动方案;CLICOLOR指定是否启用终...

ROS机器人DIY教程:ROS和STM32通信(常规通信方式和rosserial)之通过上层修改底层参数

本文主要介绍怎么编写代码实现在上层修改底层参数的相关知识,主要讲解使用两种通信方式来实现 1、rosserial方法,rosserial是官方对arduino提供的一种简单的通信协议,本人对这个库进行了一些改动,使其可以在STM32上进行使用,通过使用这个协议可以在STM32或者Arduino发布和订阅节点数据,详细的移植和使用参考之前的两篇博客:ros下使用rosserial和STM32F1/S...

Mybatis基础(part 1)

一.mybatis调用SQL语句 1.使用XML配置SQL语句 在SqlMapConfig.xml配置数据源并指定映射配置文件的位置(每个DAO对应的XML文件,该文件映射了DAO的全限定类名)   2.使用注解配置sql语句 在SqlMapConfig.xml配置数据源和class属性(指定被注解的dao全限定类名),在DAO上写注解。 用注解来配置,故此处使用class属性指定被注解...

Docker 容器内运行 Dubbo 服务

原文:http://www.aqcoder.com/post/content?id=41 在使用 Docker 容器内运行 Dubbo 服务的时候一个令人很头痛的问题就是服务地址注册。 Docker 容器内有自己的 IP 段,和宿主主机是隔离的,Dubbo 会使用容器内的 IP 注册到 zookeeper 注册中心上。这样其他的服务是无法访问的。 方式一:–host 一个很直接的方案就...

python基础教程

Python基础教程 一、简介 1.1 python语言介绍 python的创始人:Guido Van Rossum Python下载地址:https://www.python.org/ Python文档下载地址:https://www.python.org/doc/ Pycharm下载地址:https://www.runoob.com/w3cnote/pycharm-windows-instal...

猜你喜欢

1、Git安装与配置

1、Git安装与配置 一:版本控制 定义:版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 为什么要用版本控制:在起初的项目开发中,我们会不断的编写代码,但是,害怕有一天系统突然挂掉了,完蛋,辛苦写的代码就这么没了,所有为了防止这一点,都会开发一点就以目录拷贝的形式保存下来,自己这么1.0、2.0、3.0…的这么去标记,开始的还好,后面的话你压根就不知道...

Golang net/rpc 包的深度解读和学习

Golang 提供了一个开箱即用的RPC服务,实现方式简约而不简单。本文对net/rpc 包做深度解读和学习实战。 RPC 简单介绍 远程过程调用 (Remote Procedure Call,RPC) 是一种计算机通信协议。允许运行在一台计算机的程序调用另一个地址空间的子程序(一般是开放网络中的一台计算机),而程序员就像调用调用本地程序一样,无需额外做交互编程。RPC 是一种 CS (Clien...

merge sort

归并排序(merge sort) 具体算法: I.对原数组进行分组:对数组进行遍历,每检测出一个有序序列则记录一个分组,一般分组都是上升序列,下降序列也会被转换成上升序列 II.对两两相邻的分组进行合并,合并后的分组也将被记录 III.迭代合并之前合并后的分组直到出现最后的一个有序的大分组,也就是排序的最终结果 java.util.DualPivotQuicksort类中的static void ...

Java函数的学习

java学习 百知教育学习 - 胡鑫喆 - Java函数的学习 01_函数的定义 函数的定义 概念:实现特定功能的一段代码,可反复使用 定义语法: 函数名称许遵循命名规范 函数定义在类的内部,与main函数并列,并且使函数产生作用,需进行函数的调用 使用函数去掉冗余代码 02_函数的参数 函数的参数(函数名称() 其中()就是一个参数表) 无参函数(01_函数的定义中的下划线就为无参函数) 有参函...

03-段寄存器属性探测

1.段属性探测 要点回顾: 要点回顾: 上一节课我们讲过段寄存器有96位: 我们可以通过MOV指令进行读写(LDTR和TR除外) 但我们只能看见16位,那如果证明Attribute、Base、Limit的存在呢? 1、段寄存器成员简介 2、探测Attribute 3、探测Base 3、探测Limit 课后练习:...