极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2672|回复: 0

斜三角履带机械臂小车的制作分享

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

1. 运动功能说明
       该样机是一款搭载了机械臂的三角形履带小车。它的底盘具备基本的行驶和原地转向功能,机械臂具备抬升、放下、抓取等功能。整体上可以实现抓取、搬运、码放等功能,可作为搬运机器人、排爆机器人等的模型使用。

2. 结构说明
       样机的底盘是一个斜三角履带底盘,机械臂包含2个串联的关节模组【https://www.robotway.com/h-col-121.html】和1个舵机夹爪模组【https://www.robotway.com/h-col-122.html】



3. 运动功能实现
本样机的运动功能相当于是把底盘、关节、夹爪的动作进行组合实现。

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

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

3.2 编写程序
编程环境:Arduino 1.8.19
编写并烧录以下代码(Servo_Sync_Se.ino):
  1. /*------------------------------------------------------------------------------------

  2.   版权说明:Copyright 2022 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 机器谱 2022-9-14 https://www.robotway.com/

  6.   ------------------------------

  7.   实验功能: 小车前进→机械臂下落→夹爪闭合→机械臂抬起→小车后退→夹爪张开

  8.   -----------------------------------------------------

  9.   实验接线:

  10. 机械爪:D4

  11. 腕部(连接机械爪)舵机:D7

  12. 底部舵机:D11

  13. 左轮:D9,D10

  14. 右轮:D5,D6。                                    

  15. ------------------------------------------------------------------------------------*/

  16. #include <Servo.h>


  17. int SERVO_SPEED=20;                                        //定义舵机转动快慢的时间

  18. int ACTION_DELAY=200;                                      //定义所有舵机每个状态时间间隔


  19. Servo myServo[6];


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

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

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

  23. float value_init[6] = {125, 130, 160, 30, 60, 120};                //定义舵机初始角度


  24. void setup() {

  25.   Serial.begin(9600);

  26.   pinMode(5, OUTPUT);

  27.   pinMode(6, OUTPUT);

  28.   pinMode(9, OUTPUT);

  29.   pinMode(10, OUTPUT);

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

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

  32.   }

  33. }


  34. void loop() {

  35.   /*

  36.   servo_move(90, 130, 15, 70, 10, 150);

  37.   servo_move(90, 90, 90, 36, 110, 75);

  38.   servo_move(90, 130, 140, 132, 44, 16);

  39.   servo_move(90, 90, 90, 36, 110, 75);

  40.   while(1){

  41.     f = 20;

  42.     SERVO_SPEED = 20;

  43.     servo_move(120, 90, 90, 70, 10, 150);

  44.     servo_move(90, 90, 90, 70, 10, 150);

  45.   };

  46.   */

  47.   //实现了定点多角度抓取、放置的动作

  48.   digitalWrite(5, HIGH);

  49.   digitalWrite(6, LOW);

  50.   digitalWrite(9, HIGH);

  51.   digitalWrite(10, LOW);

  52.   delay(1000);

  53.   digitalWrite(5, LOW);

  54.   digitalWrite(6, LOW);

  55.   digitalWrite(9, LOW);

  56.   digitalWrite(10, LOW);

  57.   delay(1000);

  58.   servo_move(125, 70, 70, 30, 60, 120);

  59.   delay(500);

  60.   servo_move(98, 70, 70, 30, 60, 120);

  61.   delay(500);

  62.   servo_move(98, 160, 160, 30, 60, 120);

  63.   delay(500);

  64.   digitalWrite(5, LOW);

  65.   digitalWrite(6, HIGH);

  66.   digitalWrite(9, LOW);

  67.   digitalWrite(10, HIGH);

  68.   delay(1000);

  69.   digitalWrite(5, LOW);

  70.   digitalWrite(6, LOW);

  71.   digitalWrite(9, LOW);

  72.   digitalWrite(10, LOW);

  73.   delay(1000);

  74.   servo_move(125, 160, 160, 30, 60, 120);

  75.   delay(500);

  76.   while(true);

  77. }


  78. void ServoStart(int which)

  79. {

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

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

  82. }




  83. void ServoStop(int which)

  84. {

  85.   myServo[which].detach();

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

  87. }


  88. void ServoGo(int which , int where)

  89. {

  90.   if(where!=200)

  91.   {

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

  93.     else

  94.     {

  95.       ServoStart(which);

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

  97.     }

  98.   }

  99. }


  100. void servo_move(float value0, float value1, float value2, float value3, float value4, float value5)

  101. {



  102.   float value_arguments[] = {value0, value1, value2, value3, value4, value5};

  103.   float value_delta[servo_num];



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

  105.   {

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


  107.     /**************************串口查看输出*****************************/

  108. //    Serial.print(value_init[i]);

  109. //    Serial.print(" ");

  110. //    Serial.print(value_arguments[i]);

  111. //    Serial.print(" ");

  112. //    Serial.println(value_delta[i]);

  113.     /**************************串口查看输出*****************************/

  114.   }



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

  116.   {

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

  118.     {

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


  120.       /**************************串口查看输出*****************************/

  121. //      Serial.print(value_init[k]);

  122. //      Serial.print(" ");

  123.     }

  124. //    Serial.println();

  125.       /**************************串口查看输出*****************************/

  126.    

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

  128.     {

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

  130.     }

  131.     delay(SERVO_SPEED);

  132.   }

  133.   delay(ACTION_DELAY);



  134.   /**************************串口查看输出*****************************/

  135. //   for(int i=0;i<6;i++)

  136. //   {

  137. //    Serial.println(value_init[i]);

  138. //   }

  139.   /**************************串口查看输出*****************************/



  140. }
复制代码

4. 扩展样机
       可以通过更换底盘、增加机械臂数量、改变机械臂安装位置、增加或减少机械臂的关节数量来对样机进行扩展。


5. 资料下载
​资料内容:
​①
样机3D文件
​②样机例程源代码

​资料下载地址:https://www.robotway.com/h-col-155.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 13:42 , Processed in 0.044152 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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