[机器人-2]:开源MIT Min cheetah机械狗设计(二):机械结构设计

目录

1、四肢朝向的选择

2、电机布局形式的选择

3、电机的选型及测试(非常重要)

4、结构优化

5、尺寸效应

6、其他


1、四肢朝向的选择

机械狗的结构设计,第一个摆在我们面前的就说四肢的朝向问题,如下图,我们是选择猎豹的向前弯曲,还是角马的向后弯曲呢?其实为了方便爬楼梯选择了向后弯曲,也即角马的骨骼形式。

不同动物的骨骼形式

2、电机布局形式的选择

一般我们在设计四肢运动的时候,最先想到的就是在各个关节上直接加一个电机,如下图的左边所示,两个关节处各加装一个电机,但是,这样当小腿在摆动的时候,惯性会非常大,可以想象如果在你的膝盖住绑一个沙袋,在行走时就会非常的费劲,非常消耗能量,因此我们自然而然会想到将膝盖处的电机移动到上端,通过一个同步带和膝盖相连,如右图所示。

左图:电机安装在关节处,右图:电机集中安装在髋关节

除此之外还要考虑一个问题,如果机械狗摔倒后还要能够翻身起来,我们自然而然会想到再增加一个自由度,也即还要增加一个倾斜电机,原因如下面视频所示:

00:22

3、电机的选型及测试(非常重要)

一个机械狗动力强不强劲,电机起到至关重要的作用,机械狗的电机比较特殊,类似于公版电机T-Motor U8的型号,这款电机是广泛应用于四旋翼的,需要很高的能量密度(不然就无法完成后空翻这样的经典动作),因此机械狗的动力选择的是无人机的无刷电机+行星齿轮组的形式,每个执行器都由一个定制的高耦合到单级6:1的行星齿轮减速机(背隙0.005rad/0.28°)。有效改善机器人的承载能力和低速效率,(至于这里减速比为什么选择6,网上有不少讨论,比如这篇文章MIT Mini Cheetah的关节驱动器为何选用减速比为6的单级内嵌式行星减速器? - 知乎,我个人比较倾向于,MIT在设计驱动器的时候,使用了成熟的商用驱动器,也算是一种妥协,机械狗的整个重量,结构布局可能都会受驱动器的影响,后期的Cheetah 3系列就采用了自研的驱动电机。)

使用电机驱动一体化的一大优点是,不需要额外的机械结构和昂贵的传感器就能做到力控。这是因为小减速箱的非线性误差可以忽略不计,因此直接使用电机的电流环和相应的减速比,就能得到驱动器端的输出扭矩。

以上的设计思路,就带来了一个极其紧凑、轻量化的驱动器整体集成效果,当然缺点也很明显,采用镂空减重设计,防水防尘比较麻烦。

机械狗电机结构图

使用到的相关齿轮箱和轴承的型号如下:

行星轮:Misumi GEFHB0.5-40-5-8-W3

太阳轮:Misumi GEABN0.5-20-8-K-4

环形齿轮: KHG SI0.5-100

滚动轴承: HK0408

下腿由通过的同步带驱动和上腿相连,提供额外的1.15减速比。可以旋转360度,
让机器人任意改变膝盖向前或向后的方向。而且同步带可以有效的缓冲猛烈的冲击,
具有很好的缓冲效果。髋关节可以连续旋转,仅受连接膝关节执行器的电线长度影响。
允许机器人倒着操作,爬上障碍物,或者用脚在身体上方操纵。四条腿的总重量为2.7千克,
只有机器人质量的30%。每条腿的末端有一个由10毫米厚的60A聚氨酯橡胶制成的盖子。
提供缓冲和抓地力。

驱动器的参数:

电机设计完成后,如果加工组装完成还需要对电机进行一系列的测试,包括:

1)、扭矩测试、功率测试、效率图绘制,这里需要使用到扭矩测量仪。

2)、电流扭矩测试

左图:扭矩/电流特性 右图:扭矩常数/电流特性

3)、电角度校准(用于FOC算法调试)

另外电机采用的FOC控制,还要对电角度进行校准,FOC算法中一个重要的指标就是要知道电角度,电角度由磁编码器获得,由于电机摩擦和惯量的存在,实际运行时,它总是稍微滞后于参考角度,如下图左上角;位置传感器的偏心会引起低频纹波,如下图左下角;齿槽转矩又会引起高频纹波,如下图右上角;消除这些误差以后会建立一个表记录下来,只要磁编码器没有重新拆装,下次上电,表记录的数值依然有效,这样在程序运行的时候,可以通过查表来消除传感器误差。

磁编码器误差消除

4)、热分析

除此之外由于机械狗频繁的运动,还要对电机进行高温测试,防止电机高温消磁,高温报警等。

高温试验

4、结构优化

现在机械狗的基本构型就有了,现在我们最关心的还是腿部,希望腿部的惯性尽量的小,这里我们需要对腿部的结构进行拓扑优化,满足性能的同时,质量最小。需要用到有限元模拟软件ANSYS进行拓扑优化,特别是对质量要求比较苛刻,构件材料比较昂贵,这种就体现出了有限元仿真的价值,可以减少不少试错成本。

结构优化

5、尺寸效应

转自知乎网友的一段话

在关节式机器人爆发运动能力这方面,尺寸越大的机器人对驱动器的功率输出密度要求越高,技术实现也越困难。具体定量一点说:机器人尺寸假设扩大 � 倍,那么相应质量是 �3 量级的增长,而所需要驱动扭矩则是 �4 量级的增大。对于驱动器输出性能而言(现有的永磁体+线圈式电机,扭矩是�2的增长,就是4次方的增长与2次方增长的区别),增大机器人尺寸简直是噩梦,反之缩小机器人尺寸,能占很大的便宜。

6、其他

除上述分析以外,还有冲击性能分析,轴承载荷校准等,这些这里不做具体分析,详细可以见相关论文。

到此为止,一个完整的机械狗机械部分就有了雏形了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python传文件给java_用java pyhont通过HTTP协议传输文件流

// 代码网上抄的 忘记链接了 抱歉哈packageupload;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;im…

mysql挪到小数点位置_mysql数据库迁移到另一个硬盘上

archliun系统mysql数据库1、对新硬盘分区与格式化1)# fdisk /dev/sdb2) # mkfs.ext4 /dev/sdb12、停止MYSQL服务systemctl stop mysqld3、对数据库文件拷贝# cp -Rp data /mnt/data/4、删除原data文件# rm -rf /data5、禁止开机自启MYSQL服务# systemctl disable mysqld6、对自…

mysql用户权限表join_MyBatis映射利用mysql left join 解决N+1查询问题

1.权限是几乎每个系统都需要的2.一般在用户请求某个url的时候,都需要验证用户是否拥有该url的访问权限3.最简单的权限系统需要 用户表,角色表,用户角色表,权限表,角色权限表# Host: 127.0.0.1 (Version: 5.6.22)# Date…

python 爬取贝壳网小区名称_如何使用 python 爬取全国小区名称

前言笔者在做一个 NLPNLPNLP 项目时,需要识别小区名,因此想要查询网上是否有相关的数据集。经过一番搜索后一无所获…从而决定自己来爬取这份数据。由于爬取网站的内容信息之后可能会发生变更,因此此处给出具体的爬虫思路,便于应对…

mysql hint 简书_MySQL

为满足不同数据库设计要求,减少数据冗余而指定设计规范,可称为数据库范式数据库范式呈递次规范,即高阶范式必然满足低阶范式越高的数据库范式意味着越严格的设计要求,同时数据冗余越小第一范式(1NF):数据库表的每一列都…

python获取手机通知栏消息_Python编写简单的通知栏脚本启动工具

随着自己编写的脚本与安装的工具越来越多,电脑的桌面和文件夹也越来越乱了。就在前几天因为一个不小心,我把自己的一个项目给删了,所以决定将电脑整理一下。不过这一整理我很多脚本和工具的位置我就忘记了,所以决定写个小工具来快速启动一些常用的脚本或工具这里选择Python是因…

java 圆 继承_java 类的继承(转)

这个星期主要是学习了Java中类的继承问题.继承就是由已有的类创建新类,通过子类继承父类的方法,实现一些功能.下面就是老师布置作业的其中一个:定义父类圆,通过继承,获得子类球、圆锥、圆柱,子类具有计算体积的功能。1)新建文件夹Test1&#…

java爬虫 京东_Java爬虫实现京东物流查询

网上没有免费的接口,只能自己写一套了,参考代码如下public static JSONObject getLastInfo(String no){JSONObject jsonObjectnew JSONObject();jsonObject.put("no", no);Connection connectionJsoup.connect("http://www.jdwl.com/orde…

java list stream avg_Java 8 Stream API中的多个聚合函数

要在没有自定义收集器的情况下执行此操作(不再对结果进行流式传输),您可以这样做.它有点脏,因为它首先收集到Map< String,List< TimePeriodCalc>>然后流式传输该列表并获得平均加倍.由于你需要两个平均值,它们被收集到一个Holder或一对,在这种情况下我使用的是Abst…

java 发送邮件昵称_利用JavaMail发送QQ邮件

一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件)&#xff0c;一封简单的邮件包含邮件头和邮件体两个部分&#xff0c;邮件头和邮件体之间使用空行分隔。邮件头包含的内容有&#xff1a;from字段   --用于指明发件人to字段    --用于指明收件…

java没有timer类_Java中的Java.util.Timer类 - Break易站

scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)在指定的延迟语法后开始&#xff0c;为重复的固定速率执行调度指定的任务&#xff1a;public void scheduleAtFixedRate(TimerT…

java select下拉标签_java中下拉框select和单选按钮的回显操作

前提&#xff1a;1.下拉框select请选择部门selected"selected">${department.department}2.单选按钮radio的回显checked"checked">checked"checked">补充知识&#xff1a;java使用apache commons-fileupload组件实现文件上传(控制文件上…

java 访问控制权限_Java访问控制权限有哪些?区别是什么?

原标题&#xff1a;Java访问控制权限有哪些&#xff1f;区别是什么?Java中的类和方法等都是有访问控制权限的&#xff0c;用来控制方法、类、属性等的生效范围&#xff0c;Java有四种访问控制权限&#xff0c;其中比较常用的就是public和private&#xff0c;今天华清远见Java学…

java 操作cursor数据库_Java连接各种数据库以及调用存储过程

准备工作&#xff1a;1. 创建表drop table T_TEST_PROCEDURE cascade constraints;/**//*Table: T_TEST_PROCEDURE*//**/createtable T_TEST_PROCEDURE (IDNUMBER(19) not null,NAMEVARCHAR2(40),AGE NUMBER(3),constraintPK_T_TEST_PROCEDURE primary key (ID));2. 创建存储过…

java 规格overview_《Java數據結構和算法》- OverView

Q: 不同數據結構的優缺點&#xff1f;數據結構優點缺點數組(Array)快速訪問&#xff0c;如果知道下標&#xff0c;就可以非常快地存取查找慢&#xff0c; 插入或刪除慢&#xff0c; 大小固定有序數組(OrderedArray)比無序的數組查找快插入或刪除慢&#xff0c;大小固定棧(Stack…

mysql 集群怎么卸载节点_Greenplum移除节点

基于某某原因&#xff0c;我们的Greenplum需要卸载一个节点(测试环境的Greenplum集群)&#xff0c;由于该集群使用了很久&#xff0c;里面有许多开发所需要的数据&#xff0c;所以在卸掉一个节点后&#xff0c;还要保证数据不会丢失。当然&#xff0c;期间也遇到了点问题&#…

mysql2012更改表名_T-SQL入門攻略之13-修改数据表

--> Title : T-SQL入門攻略之13-修改数据表--> Author : wufeng4552--> Date : 2010-07-12修改表名与字段名—sp_rename--1修改表名SQL Server不直接提供修改表名的T-SQL语句&#xff0c;但是可以通过存储过程实现语法格式&#xff1a;sp_rename tablename,newtabl…

python中不论类的名字是什么歌_Python自动猜歌名,还愁排名上不去嘛?

前言相传&#xff0c;就在前几日&#xff0c;在网上闲逛时&#xff0c;刷到了一个猜歌的小程序。这个小程序通过播放歌曲部分片段&#xff0c;然后让用户来猜它的歌名&#xff0c;大概是这样的&#xff1a;作为一个脑热的听歌爱好者&#xff0c;于是他越陷越深&#xff0c;越刷…

java调用oracle存储过程_做一点,记一点 ~ Java调用Oracle存储过程

一、需求传入一个参数&#xff0c;返回一条或多条记录(列表)。二、实现步骤1. 编写Oracle存储过程。-- 声明包和包体的语句应该分两次执行&#xff0c;即使声明在前定义在后&#xff0c;如果一起执行依然会编译出错--调用能够返回多条记录的存储过程需要定义在包内--声明包及包…

java 从控制台读取_转载 java从控制台读取输入的方法

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner; public class MainClass { public static void method1() { //使用Scanner Scanner scannernew Sca…