4自由度并联机器狗实现下蹲功能

电子说

1.2w人已加入

描述

1. 功能说明

       本文示例将实现R328a样机4自由度并联机器狗下蹲的功能。

机器狗

2. 结构说明

      本样机的并联驱动结构与 【R082】4自由度并联四足 类似,两款样机可以对比来看。

      本样机腿部的结构如下图所示:驱动核心部分是两个5杆结构的组合。

机器狗两个五杆结构图

      驱动核心部分再搭配下图的四杆结构,即可构成单侧的腿。驱动核心部分再搭配下图的四杆结构,即可构成单侧的腿。

机器狗四杆结构机器狗单侧腿部图机器狗整机

3. 电子硬件

      在这个示例中,我们采用了以下硬件,请大家参考:

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

电池

7.4V锂电池

      电路连接:为了便于识别控制4自由度并联机器狗,我们先规定好机器狗的前方以及舵机位置编号(如下图所示):

机器狗

      将舵机(A1、A2 、B1、B2)连接在Bigfish扩展板的D4、D7、D3、D8端口,如下图所示:

机器狗

4. 功能实现

       上位机:Controller 1.0

       下位机编程环境:Arduino 1.8.19

       实现思路:实现4自由度并联机器狗站立、前蹲、后蹲的动作。

4.1 调试舵机角度

       利用上位机 Controller软件调整4自由度并联机器狗的舵机角度,记录下机器狗站立、前蹲、后蹲时舵机的角度;然后利用Arduino IDE进行下位机编程,利用这些角度实现机器狗下蹲的功能。

       对于如何利用Controller软件进行调试机器狗的舵机角度,可参考【U002】如何驱动模拟舵机-Controller 1.0b软件的使用 在本次实验中,经过调试,对于4自由度并联机器狗站立、前蹲、后蹲时的舵机角度值如下图所示:

机器狗机器狗站立时的舵机值机器狗机器狗前蹲时的舵机值机器狗机器狗后蹲时的舵机值

4.2 示例程序

      下面提供一个4自由度并联机器狗下蹲的参考例程(Dog_squat.ino),例程源代码详见 【https://www.robotway.com/h-col-237.html】  ,实验效果可参考演示视频。

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

  版权说明: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-26 https://www.robotway.com/

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

/*

    本例程实现机器小狗站立、前蹲和后蹲

*/


#include<  Servo.h  >

#define SERVO_SPEED 60      //定义舵机转动快慢的时间

#define ACTION_DELAY 0      //定义所有舵机每个状态时间间隔


Servo myServo[4];


int f = 15;                                         //定义舵机每个状态间转动的次数,以此来确定每个舵机每次转动的角度

int servo_port[4] = {3,4,7,8};                      //定义舵机引脚

int servo_num = sizeof(servo_port) / sizeof(servo_port[0]);   //定义舵机数量

float value_init[4] = {1513,1457,1074,1545};        //定义舵机初始角度


void setup() {

  Serial.begin(9600);

  for(int i=0;i<  servo_num;i++){

    ServoGo(i,value_init[i]);

  }

  delay(2000);

}


void loop() {

  Dog_squat();

}


void Dog_squat()

{

  servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立

  servo_move(1243,1703,1278,1299);//向后蹲下

  servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立

  servo_move(1715,1255,1052,1545);//向前蹲下

  servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立

}



void ServoStart(int which)

{

  if(!myServo[which].attached())myServo[which].attach(servo_port[which]);

  pinMode(servo_port[which], OUTPUT);

}


void ServoStop(int which)

{

  myServo[which].detach();

  digitalWrite(servo_port[which],LOW);

}


void ServoGo(int which , int where)

{

  if(where!=200)

  {

    if(where==201) ServoStop(which);

    else

    {

      ServoStart(which);

      myServo[which].write(where);

    }

  }

}


void servo_move(float value0, float value1, float value2, float value3) //舵机转动

{

 

  float value_arguments[] = {value0, value1, value2, value3};

  float value_delta[servo_num];

 

  for(int i=0;i<  servo_num;i++)

  {

    value_delta[i] = (value_arguments[i] - value_init[i]) / f;

  }

 

  for(int i=0;i<  f;i++)

  {

    for(int k=0;k<  servo_num;k++)

    {

      value_init[k] = value_delta[k] == 0 ? value_arguments[k] : value_init[k] + value_delta[k];

    }

    for(int j=0;j<  servo_num;j++)

    {

      ServoGo(j,value_init[j]);

    }

    delay(SERVO_SPEED);

  }

  delay(ACTION_DELAY);

}

5. 扩展样机

     本样机可以做出一些扩展,如下图所示的在样机上方增加平板,此样机可用探索者零件或探索者兼容零件制作。

机器狗


审核编辑 黄宇
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分