8自由度并联腿机器狗实现行走功能

1. 功能说明

 本文示例将实现R309a样机8自由度并联腿机器狗行走的功能。

2. 并联仿生机器人结构设计

      机器狗是一种典型的并联仿生四足机器人,其腿部结构主要模仿了四足哺乳动物的腿部结构,主要由腿部的节段和旋转关节组成。在设计机器狗的腿部结构时,可基于四足哺乳动物的生理结构,使用连杆代替腿部的骨骼来提高机器人的性能,机器狗腿部采用5连杆结构设计。

      五杆结构是平面连杆结构的一种,具有两个自由度的平面闭链五杆机构不仅使运动机构的刚度增加,更突出的优点在于它能够实现变轨迹的运动。

五杆结构

腿部旋转关节单元设计

       腿部的旋转关节是机器人中很重要的一部分,它是整个机器人中的关键运动单元,关节的设计往往决定了机器人的运动特性和精度。关节单元主要是负责连接相邻的两端节段,从而实现腿部的摆动。由于腿部是往复运动,因此关节单元的设计要符合循环负载的载荷规律。

关节结构如图:

旋转关节结构图

侧摆关节设计

      侧摆关节的主要作用是给机器狗提供回转方向的自由度,使机器狗的腿部能够偏离竖直平面运动,从而实现转弯、侧移、抗侧向冲击等步

组合后的机器狗的腿部结构图

       机器狗的腿部关节大体分为两类,第一类是如四足哺乳动物前腿的肘关节一样的腿部关节设计,另一类是类似四足哺乳动物后腿的膝关节的腿部关节制造。基于以上原理,科学家们设计出四类机器狗的腿部结构:全膝式、全肘式、内膝肘式、外膝肘式。

腿部结构有四种形式

腿部的空间运动区域如下图:

 各种布置结构的运动空间如下图:

      内膝式结构条件下,运动中的机器狗内部结构质心曲线最为平滑,因此该结构也是最稳定的,为两侧提供的运动空间也更大。此外,运动时机器狗腿部重合的范围也缩小了。基于以上因素,内膝式结构条件有利于机器人的稳定操作。

3. 并联仿生机器人运动算法

      在日常生活中,狗的品种、体型不尽相同,因此其运动状态也是多种多样,我们将以生活中最常见的一种运动状态进行分析。在研究中,我们可以通过对狗的行走过程进行高速摄影,抓拍到狗行走的运动全过程,如下图所示:

狗行走过程分解图

      然后我们可以对其中一条腿进行分析,将重叠其放在一个相对狗自身静止的坐标系中,如下图所示:

单条腿末端的运动轨迹

       根据图示分析,我们可以将狗的腿部运动简单分为与地面接触的支撑阶段和离开地面的跨越阶段。将足部点相连,可近似得到如上图虚线所示的“馒头”状轨迹,支撑段——足接触地面且相对于地面静止不动,身体相对于地面前移;跨越段——足在空中运动,跨越障碍物。

      要想让机器狗像真正的狗一样走路,我们就需要控制舵机,让机器狗的腿部走出类似上图中的“馒头”状轨迹。这段轨迹不能超出我们设计的机器狗腿部的运动范围,如下图所示(蓝色阴影区域为机器狗腿部结构的运动范围):

机器狗腿部结构的运动范围

       从而得到“馒头”状轨迹曲线的坐标。

坐标系下的腿部末端运动轨迹

       于是我们可以根据这个坐标为“馒头状”轨迹指定一个合适的方程,图中轨迹弧线部分可近似取为一个椭圆。

       取轨迹原点在真实坐标系中的位置\left ( x_{0},y_{0} \right )

       取椭圆两半轴长a=4,b=3

       则该椭圆方程为:y=b\sqrt{1-\frac{\left ( x-x_0 \right )^{2}}{a^2}}+y_0

       或者:\frac{(x-x_0)^2}{a^2}+\frac{(y-y_0)^2}{b^2}=1 (y\geq y_0)

       底部直线方程为:y=y_0(x_0-a\leq x\leq x_0+a)

       通过这个方程,再结合机器狗腿部机构运动公式,即可反推出舵机的一系列运动参数。

机器狗的行进步态

      机器狗是四足行走机构,由于四足动物运动的稳定性,相对于双足行走的人来说,其运动步态比较简单,大多机器狗简单的采用前后脚差90度或180度。

机器狗模型

        机器狗采用前后脚差180度时的脚部运动落地顺序图如下(注:白色为要抬起的脚,灰色不抬起的脚)

        机器狗采用前后脚差90度时的脚部运动落地顺序图如下:

        机器狗四条腿腿同时动的时候的动作效果包括整体下蹲、整体站立、身体前后俯仰、身体侧翻等,效果图如下所示:

4. 电子硬件

      本实验中采用了以下硬件:

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

SH-SR舵机扩展板
电池7.4V锂电池

       电路连接说明:将8个舵机连接在SH-SR扩展板上,舵机接线顺序为:1、2、3、4、5、6、7、8

5. 功能实现

      上位机:Controller 1.0

      下位机编程环境:Arduino 1.8.19

5.1 调试舵机角度

       机器大狗可以实现站立、下蹲、前趴、后仰的功能。我们可以利用上位机 Controller软件调整大狗的舵机角度,记录下站立、下蹲、前趴、后仰 时舵机的角度;然后利用Arduino IDE进行下位机编程,利用这些角度实现大狗的预期效果。

       对于8自由度的大狗,利用Controller软件进行调试角度界面(如下图所示):

        经过调试,对大狗的下蹲、站立、前趴、后仰四个功能的舵机角度值见下表:

功能舵机角度值
下蹲1069,736,1855,2174,1746,1839,1007,850
站立1365,1163,1522,1837,1657,939,1253,1341
前趴1069,736,1855,2174,1657,939,1253,1341
后仰1365,1163,1522,1780,1746,1839,1007,850

      利用上位机测出的舵机角度,可进行下位机编程。

5.2 示例程序

      下面提供一个8自由度并联腿机器狗行走的参考例程(Dog_Walk.ino),具体实验效果可参考官网演示视频。

/*------------------------------------------------------------------------------------

  版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.

           Distributed under MIT license.See file LICENSE for detail or copy at

           https://opensource.org/licenses/MIT

           by 机器谱 2023-05-17 https://www.robotway.com/

  ------------------------------*/

#include "leg.h"

#include "gait.h"

#include "sensor.h"



enum{DOGBALANCE=1,DOGWALK,DogObstacleAvoidanceWalk};


float Eular[3]; /* 欧拉角 */


void setup() {

  // put your setup code here, to run once:

  Serial.begin(115200);

  Serial.begin(115200);

  sensorSetup();

  delay(3000);

}


void loop() {

  // put your main code here, to run repeatedly:

  Dog_Walk();    //狗前进(行走)

}




void Dog_Walk()

{

   static long t_control = millis();

   static int t0 = millis();

   if(t_control){   t0 = millis();   }

    if ((millis() - t_control) > 50)

    {

      float x[4], y[4];

      long t = millis() - t0;

      gait(t, 0.5, x[0], y[0], forwardGait);

      gait(t, 0, x[1], y[1], forwardGait);

      gait(t, 0, x[2], y[2], forwardGait);

      gait(t, 0.5, x[3], y[3], forwardGait);

      leg0.footPos(x[0], y[0]);

      leg1.footPos(x[1], y[1]);

      leg2.footPos(x[2], y[2]);

      leg3.footPos(x[3], y[3]);

      t_control = millis();

    }     

}

6. 扩展样机

     本样机可以做出一些扩展,如下图所示的在样机上方增加一个平板。

 

程序源代码及样机3D文件资料内容详见 8自由度并联腿机器狗-行走

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,用于实现一个6自由度并联机器人的运动学模型。其中,我们使用了Python语言和SymPy库来简化数学计算。 ```python import sympy as sp # 定义符号变量 q1, q2, q3, q4, q5, q6 = sp.symbols('q1 q2 q3 q4 q5 q6') # 定义链接长度 l1, l2, l3, l4, l5, l6 = sp.symbols('l1 l2 l3 l4 l5 l6') # 由于机器人并联的,每个执行器都有两个连接点,因此我们定义两个末端点 # 分别对应于每个执行器的末端点 p1 = sp.Matrix([0, 0, 0]) p2 = sp.Matrix([0, 0, l1]) p3 = sp.Matrix([0, l2, l1]) p4 = sp.Matrix([0, l3, l1]) p5 = sp.Matrix([l4, l3, l1]) p6 = sp.Matrix([l5, l3, l1]) # 定义末端执行器的位置 # 通过将每个执行器的末端点相加来计算末端执行器的位置 T = sp.Matrix([0, 0, l1+l2+l3+l4+l5+l6]) R = sp.Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) EE = sp.Matrix.hstack(R, T) EE = sp.Matrix.vstack(EE, sp.Matrix([0, 0, 0, 1])) # 定义每个关节的旋转矩阵 Rz1 = sp.Matrix([[sp.cos(q1), -sp.sin(q1), 0, 0], [sp.sin(q1), sp.cos(q1), 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) Ry2 = sp.Matrix([[sp.cos(q2), 0, sp.sin(q2), 0], [0, 1, 0, 0], [-sp.sin(q2), 0, sp.cos(q2), 0], [0, 0, 0, 1]]) Ry3 = sp.Matrix([[sp.cos(q3), 0, sp.sin(q3), 0], [0, 1, 0, 0], [-sp.sin(q3), 0, sp.cos(q3), 0], [0, 0, 0, 1]]) Rx4 = sp.Matrix([[1, 0, 0, 0], [0, sp.cos(q4), -sp.sin(q4), 0], [0, sp.sin(q4), sp.cos(q4), 0], [0, 0, 0, 1]]) Ry5 = sp.Matrix([[sp.cos(q5), 0, sp.sin(q5), 0], [0, 1, 0, 0], [-sp.sin(q5), 0, sp.cos(q5), 0], [0, 0, 0, 1]]) Rx6 = sp.Matrix([[1, 0, 0, 0], [0, sp.cos(q6), -sp.sin(q6), 0], [0, sp.sin(q6), sp.cos(q6), 0], [0, 0, 0, 1]]) # 定义每个链接的起始位置和末端位置 p2_1 = p2 - p1 p3_2 = p3 - p2 p4_3 = p4 - p3 p5_4 = p5 - p4 p6_5 = p6 - p5 # 通过链接的长度和旋转矩阵计算每个链接的位置 T1 = Rz1 * p2_1 T2 = T1 * Ry2 * p3_2 T3 = T2 * Ry3 * p4_3 T4 = T3 * Rx4 * p5_4 T5 = T4 * Ry5 * p6_5 # 计算每个链接的末端位置 P1 = p1 P2 = P1 + T1 P3 = P2 + T2 P4 = P3 + T3 P5 = P4 + T4 P6 = P5 + T5 # 将末端执行器的位置表示为上述链接的末端位置之和 EE = P6 + EE[0:3, 3] # 输出结果 print(sp.simplify(EE)) ``` 这个代码可以计算出机器人末端执行器的位置,只需提供每个关节的旋转角度和每个链接的长度即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值