极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1913|回复: 0

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

[复制链接]
发表于 2023-6-27 10:13:17 | 显示全部楼层 |阅读模式
本帖最后由 机器谱 于 2023-6-27 10:13 编辑

1. 功能说明
       本文示例将实现R328a样机4自由度并联机器狗行走的功能。


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

主控板
Basra主控板(兼容Arduino Uno)‍
扩展板
Bigfish2.1扩展板‍
电池
7.4V锂电池

       电路连接:机器狗左侧的上下舵机连接在Bigfish扩展板的D3、D8端口;机器狗右侧的上下舵机连接在Bigfish扩展板的D4、D7端口。


3. 功能实现
      上位机:Controller 1.0
      下位机编程环境:Arduino 1.8.19
      实现思路:实现机器狗可以灵活的自由行走。

3.1 调试舵机角度
       对于如何利用Controller软件进行调试机器狗的舵机角度,可参考
【U002】如何驱动模拟舵机-Controller 1.0b软件的使用【https://www.robotway.com/h-col-129.html】
       在本次实验中,经过调试,对于4自由度并联机器狗行走时的舵机角度值如下图所示:

机器狗行走时的舵机值

3.2 示例程序
        下面提供一个4自由度并联机器狗行走的参考例程(Dog_walk_finall.ino),实验效果可参考网站演示视频。
  1. /*------------------------------------------------------------------------------------

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

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

  4.            https://opensource.org/licenses/MIT

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

  6.   ------------------------------*/

  7. /*

  8. 本例程实现机器小狗行走

  9. 调试小狗行走的注意事项:

  10.   3、8对应着小狗左侧的上下舵机;

  11.   4、7对应着小狗右侧的上下舵机;

  12.   连接好舵机后,将调试好的小狗初始直立状态写入float value_init[4] =   {   };中即可;

  13. */



  14. #include<Servo.h>

  15. #define SERVO_SPEED 20                             //定义舵机转动快慢的时间

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


  17. Servo myServo[4];

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

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

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

  21. float value_init[4] = {1478,1500,1545,1478};//定义舵机初始角度

  22. int leg_range = 180;                        //小狗左右两条腿摆动的幅度

  23. float reset_init[4]={0,0,0,0};


  24. void setup() {

  25.   Serial.begin(9600);

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

  27.   ServoGo(i,value_init[i]);

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

  29.     reset_init[i] = value_init[i];

  30.   }

  31.   delay(2000);

  32. }


  33. void loop() {

  34.   Dog_walk();

  35. }


  36. void Dog_walk()

  37. {

  38.   servo_move(value_init[0],value_init[1],reset_init[2]+leg_range,reset_init[3]);

  39.   servo_move(value_init[0],value_init[1],reset_init[2],reset_init[3]-leg_range);

  40. }



  41. void ServoStart(int which)

  42. {

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

  44.   pinMode(servo_port[which], OUTPUT);

  45. }


  46. void ServoStop(int which)

  47. {

  48.   myServo[which].detach();

  49.   digitalWrite(servo_port[which],LOW);

  50. }


  51. void ServoGo(int which , int where)

  52. {

  53.   if(where!=200)

  54.   {

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

  56.     else

  57.     {

  58.       ServoStart(which);

  59.       myServo[which].write(where);

  60.     }

  61.   }

  62. }


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

  64. {



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

  66.   float value_delta[servo_num];



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

  68.   {

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

  70.   }



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

  72.   {

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

  74.     {

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

  76.     }

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

  78.     {

  79.       ServoGo(j,value_init[j]);

  80.     }

  81.     delay(SERVO_SPEED);

  82.   }

  83.   delay(ACTION_DELAY);

  84. }
复制代码

4. 资料下载
资料内容:行走-程序源代码
资料下载地址:
4自由度并联机器狗-行走 https://www.robotway.com/h-col-237.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 02:10 , Processed in 0.035726 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表