简单机器人的结构设计

来自维基学院
2008年台北IT月活动上展示的家庭服务机器人

运动原理[编辑 | 编辑源代码]

运动描述[编辑 | 编辑源代码]

通常要解决的运动问题无非是下面这两个:

  • 如何确定机器人各部分的位置
  • 如何从一个位置到达另一个位置

平面运动描述[编辑 | 编辑源代码]

在地面上水平移动的机器人

我们生活的现实世界是立体的空间。但在有些时候,一些运动可以被抽象为平面运动。比如右图中在地面上水平移动的机器人,如果从上方向下俯视,机器人就如同在这个二维平面上运动的一个点。

描述某一时刻二维平面物体的位置需要3个参数,这与采用何种坐标系无关。

描述二维平面中的物体的位置
  • 在直角坐标中,这三个参数是x,y,θ
  • 在极坐标中,这三个参数是r,θ,α

应当注意的是,一个物体在二维空间中的位置,不仅包括其质心的绝对位置(由(x,y)或(r,θ)描述),还包括物体的空间朝向。


机器人在平面上的移动时可以看作是平面坐标系中的向量。其平面运动是由质心绝对位移和自身转动复合而成的,因此可以用平面运动分解来分析计算。

空间运动描述[编辑 | 编辑源代码]

正在搬运玻璃的机械臂

描述某一时刻空间内物体的位置需要6个参数,与采用何种坐标系无关。

描述三维空间中的物体的位置
  • 在直角坐标系中六个参数是x,y,z,α,β,γ。x,y,z决定空间中的方位,而α,β,γ决定空间中的指向。
  • 在球面坐标系中六个参数是r,θ1,θ2,α,β,γ。r,θ1,θ2决定空间中的方位,而α,β,γ决定空间中的指向。

应注意的是,由于空间中的物体还可沿向量的轴向转动,因此还有一个变量γ来描述轴向的转角。

正在进行“艺术创作”的机械臂

机械臂和人形机器人的空间运动可以用空间坐标系来描述。空间坐标系中的运动描述比较复杂,通常需要更高级的数学方法才能解决。

确定机器人的位置[编辑 | 编辑源代码]

Robocup 2005大赛上的Aibo机器人

如果你想让机器人用手去抓取物体,那么仅仅知道它的手在哪里是不够的,还必须要确定手腕旋转的角度,手指的开合等参数。否则机器人手的方向可能与物体不对应,手可能根本没张开,甚至是朝错误的地方伸出手臂。

这意味着每个决定机器人姿态的关键参数都必须是可控制,可检测的。这样才能使机器人的运动被有效规划,执行。

机器人的位置包含两个层次的信息:

  • 机器人在环境中的绝对/相对位置(外部联系)
  • 机器人各部分的相对位置(内部联系)

在环境中的位置有下面几种方式来确定:

Robocon 2010 比赛中的机器人

亚太机器人大赛常采用网格场地,自动机器人可以根据场地上的白线判断自己离出发点的位置。 如果机器人从出发点出发后,某一个线计数错误,就会导致后续的行动全部错误。因此这种方法的容错性是非常低的。

CeBIT 2011 展会上的机器人

依靠视觉定位的机器人通过环境和目标物体的图像来确定自己的位置。 通过视觉确定相对位置,机器人能够适应不同环境,且不受行动范围限制。但技术复杂,定位易不够精确。

基座固定在地面上的工业机器人

一些工业机器人的底座被固定在工作场地上,因此环境定位并不必要。它们只需要定位自己各个部位之间的相对位置就可以了。

确定部件相对位置的方法同样很多:

英国哥伦比亚大学师生设计的旋翼式飞行机器人

对于旋翼飞行器来说,除了转动的螺旋浆之外,各个部件都是相对固定的。这种“整块”的机器人可以不必测量自己各部件的相对位置,因为它们都是相对固定的。

Robocup 2006 比赛上的Aibo机器人足球赛

具有视觉的机器狗aibo通过头部的摄像头确定眼睛相对于球的位置。通过关节的传感器获取身体各部位的相对位置。进行综合分析,计算出身体和脚相对于球的位置,准确击球。 实际过程要更加复杂,需要在运动过程中不断定位,纠正动作才能达到预期效果。

伺服电机(舵机)的拆解图

很多简单机器人以舵机(伺服电机)为基本驱动装置,它能够定位到指定位置。

从原理上来看,舵机是依靠内部的电位器,电感或者霍尔传感器等来定位,形成一个内部的反馈控制。

但从整个机器人的角度来看,只使用舵机就形成了开放控制——机器人并不真的知道舵机运动到了什么位置。如果舵机损坏,或者工作中电位器电阻率因发热而变化,舵机的运动就会产生偏差。另外,这种局部反馈容易引起误差叠加,抖动等弊端。

因此即使采用舵机,额外的传感器有时也是必要的。

另外,有一些机器人采用惯性定位。

确定机器人的运动[编辑 | 编辑源代码]

自由度[编辑 | 编辑源代码]

注意:“自由度”具有多种不同含义,在理论物理学中,自由度指的是力学系统的独立坐标的个数;在机械动力学中则指的是确定受到约束的零部件上某一点位置的独立参数个数

在物理学中,自由度指的是力学系统中独立坐标的个数。动力学系统由一组坐标来描述,这组坐标互相之间具有无关性,且能够描述空间中的所有位置。

对于空间中的一个点:

  • 在笛卡尔(直角)坐标系中,由互相垂直的x,y,z三个坐标来描述。
  • 在柱坐标系中,由半径r,经度θ和高度z三个坐标来描述。
  • 在球坐标系中,由半径r,经度θ和维度α三个坐标来描述。

……

用以描述三维空间的坐标系不止这三种,但无论在哪种坐标系中,都恰好需要用3个坐标来描述空间中任意点的位置。

通常,空间中的点会受到一些运动约束,使得点的自由度小于空间的自由度。比如在管道中运动的球,受到管道的约束,只能沿着管壁运动,可以用运动路程确定位置,因此自由度为1;台球只能在平面上运动,因此自由度为2。

在机械动力学中,自由度通常用来描述零件上的某一点。零件之间的互相作用称为运动副,零件通过运动副形成运动链。通过运动副概念的引入,机械的自由度可以被计算。

按照约束来划分,运动副分为两种:

  • 高副,即有一个约束的运动副,两个零件为点接触,压强大。如球面副(球绞链)。
  • 低副,即有两个约束的运动副,两个零件为线接触或面接触,压强小。如回转副,移动副,凸轮。

很多机构虽然是立体的,但其运动都处在同一平面(相互平行的平面)上。这些机构被称为平面机构。反之,当存在零件不在同一平面(相互平行的平面)运动时,则称之为空间机构。

平面机构自由度的计算方法如下:

设一个拥有n个零件的机构具有FL个低副和FH个高副。则自由度F可以按下式计算:

F=3n-2FL-FH

自由度的意义在于可以了解机器人需要多少制动器来完成运动,运动受到哪些约束。根据运动需要设计机构,或者根据机构分析运动。

轮式机器人的平面运动[编辑 | 编辑源代码]

对于简单机器人来说,双足或多足机器人结构和控制方法过于复杂,成本也高出许多,并不适合。因此,这些机器人普遍采用了轮子或者履带作为行走机构。

轮子在地面上是简单有效的移动方式,在平坦地形的速度和稳定性都很好。轮子的缺点在于不能适应崎岖地形,运动不够灵活(跌倒了不能爬起来)。

机械臂的空间运动[编辑 | 编辑源代码]

机器人结构[编辑 | 编辑源代码]

从大脑到肢体:机器人系统[编辑 | 编辑源代码]

骨骼:机构[编辑 | 编辑源代码]

肌肉:制动器[编辑 | 编辑源代码]

皮肤:外壳[编辑 | 编辑源代码]

简单机构[编辑 | 编辑源代码]

联接[编辑 | 编辑源代码]

带与链[编辑 | 编辑源代码]

齿轮[编辑 | 编辑源代码]

蜗杆[编辑 | 编辑源代码]

轮系[编辑 | 编辑源代码]

螺旋[编辑 | 编辑源代码]

连杆[编辑 | 编辑源代码]

步进传动[编辑 | 编辑源代码]

[编辑 | 编辑源代码]

轴承[编辑 | 编辑源代码]

联轴器[编辑 | 编辑源代码]

弹簧[编辑 | 编辑源代码]

液压和气压[编辑 | 编辑源代码]

材料[编辑 | 编辑源代码]

钢铁[编辑 | 编辑源代码]

铝合金[编辑 | 编辑源代码]

塑料[编辑 | 编辑源代码]

木材[编辑 | 编辑源代码]

有机玻璃[编辑 | 编辑源代码]

加工工艺[编辑 | 编辑源代码]

车铣刨磨钻镗[编辑 | 编辑源代码]

钣金[编辑 | 编辑源代码]

注塑[编辑 | 编辑源代码]

线切割[编辑 | 编辑源代码]

铸造[编辑 | 编辑源代码]

塑性加工[编辑 | 编辑源代码]

设计方法[编辑 | 编辑源代码]

有很多方式可以用来构思,检验,表达机器人的设计。从最简单的铅笔草图,到复杂的计算机仿真系统,虽然形式不同,简繁有异,其核心目标是共通的。

设计方法服务于设计目标,为了能够使设计有效开展而存在。它们应当尽可能的提高设计的效率,帮助设计者进行深入思考,检验设计的可行性,对拓宽设计方向,保证设计的质量水准。在设计流程的不同阶段,采用适当的设计方法,并加以配合,能够让设计高效,可控,有序地进行。

草图[编辑 | 编辑源代码]

UML[编辑 | 编辑源代码]

机械简图[编辑 | 编辑源代码]

数字样机[编辑 | 编辑源代码]

实物模型[编辑 | 编辑源代码]

CAX[编辑 | 编辑源代码]

CAD,CAM和CAE[编辑 | 编辑源代码]

参数化建模系统[编辑 | 编辑源代码]

Solidworks[编辑 | 编辑源代码]

物理仿真系统[编辑 | 编辑源代码]

制图规范[编辑 | 编辑源代码]

设计流程[编辑 | 编辑源代码]

需求分析[编辑 | 编辑源代码]

设计定义[编辑 | 编辑源代码]

可行性分析[编辑 | 编辑源代码]

设计实现[编辑 | 编辑源代码]

质量控制[编辑 | 编辑源代码]

性能测试[编辑 | 编辑源代码]

设计改良[编辑 | 编辑源代码]

设计定型[编辑 | 编辑源代码]