5自由度串联机械臂实现搬运物品的功能
创始人
2025-05-31 13:33:00
0

1. 功能描述

    本文提供的示例所实现的功能为:实现5自由度串联机械臂搬运物品的功能。

 2. 电子硬件

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

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

舵机270°伺服电机、标准舵机
电池7.4V锂电池

 电路连接说明:

舵机接线:由上至下依次连接在Bigfish扩展板的D4、D7、D11、D3、D8、D12接口上。

 3. 功能实现

上位机:Controller 1.0

下位机编程环境:Arduino 1.8.19

3.1初始位置的设定

① 将Controller下位机程序servo_bigfish.ino直接下载到主控板。这段代码供Controller上位机与主控板通信,并允许调试舵机。代码如下:

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-02-20 https://www.robotway.com/------------------------------/** Bigfish扩展板舵机口; 4, 7, 11, 3, 8, 12, 14, 15, 16, 17, 18, 19* 使用软件调节舵机时请拖拽对应序号的控制块*/#include #define ANGLE_VALUE_MIN 0#define ANGLE_VALUE_MAX 180#define PWM_VALUE_MIN 500#define PWM_VALUE_MAX 2500#define SERVO_NUM 12Servo myServo[SERVO_NUM];int data_array[2] = {0,0};   //servo_pin: data_array[0], servo_value: data_array[1];int servo_port[SERVO_NUM] = {4, 7, 11, 3, 8, 12, 14, 15, 16, 17, 18, 19};int servo_value[SERVO_NUM] = {};String data = "";boolean dataComplete = false;void setup() {Serial.begin(9600);}void loop() {while(Serial.available()){int B_flag, P_flag, T_flag;data = Serial.readStringUntil('\n');data.trim();for(int i=0;i= ANGLE_VALUE_MIN && where <= ANGLE_VALUE_MAX){myServo[which].write(where);}else if(where >= PWM_VALUE_MIN && where <= PWM_VALUE_MAX){myServo[which].writeMicroseconds(where);}}int pin2index(int _pin){int index;switch(_pin){case 4: index = 0; break;case 7: index = 1; break;case 11: index = 2; break;case 3: index = 3; break;case 8: index = 4; break;case 12: index = 5; break;case 14: index = 6; break;case 15: index = 7; break;case 16: index = 8; break;case 17: index = 9; break;case 18: index = 10; break;case 19: index = 11; break;}return index;}

下载完成后,保持主控板和电脑的USB连接,以便利用上位机进行调试。

② 双击打开Controller 1.0b.exe:

 ③ 界面左上角选择:设置-面板设置,弹出需要显示的调试块,可通过勾选隐藏不需要调试的舵机块:联机-选择主控板对应端口号以及波特率。

 ④ 拖动进度条,可以观察相应的舵机角度转动。写好对应的舵机调试角度,勾选左下角添加-转化,获得舵机调试的数组:

⑤ 将该数组直接复制到相应的Arduino程序中的get_coordinate()部分进行使用。

3.2调试好角度后,将机械臂搬运例程(5df_handling.ino)下载到主控板:

/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-02-20 https://www.robotway.com/------------------------------*//*本程序要实现一个5自由度串联机械臂搬运物品的功能。由机械臂从夹爪到底座的舵机依次连接在Bigfish扩展板的D4、D7、D11、D3、D8、D12接口上。*/#define EYEINIT 174#define HEADINIT 90#define NECKINIT 124#define UPBODYINIT 72#define DOWNBODYINIT 100#define FOOTINIT 88#define EYE0 130#define HEAD0 90#define NECK0 170#define UPBODY0 160#define DOWNBODY0 79#define FOOT0 36#define EYE1 130#define HEAD1 90#define NECK1 170#define UPBODY1 160#define DOWNBODY1 80#define FOOT1 130#include#include                                            #define PIN_SERVO_EYE 4                                        //定义各个舵机所对应的端口;#define PIN_SERVO_HEAD 7#define PIN_SERVO_NECK   11#define PIN_SERVO_UPBODY   3#define PIN_SERVO_DOWNBODY 8#define PIN_SERVO_FOOT 12#define OPERATE_TIME 3000#define SERVO_EYE 0                                        //定义各个舵机所对应的端口;#define SERVO_HEAD 1#define SERVO_NECK   2#define SERVO_UPBODY   3#define SERVO_DOWNBODY 4#define SERVO_FOOT 5int servoPin[6] = {PIN_SERVO_EYE, PIN_SERVO_HEAD, PIN_SERVO_NECK, PIN_SERVO_UPBODY,PIN_SERVO_DOWNBODY,PIN_SERVO_FOOT};Servo myServo[6];void setup() {// put your setup code here, to run once:delay(1000);Serial.begin(9600);resetArm();}void loop() {// put your main code here, to run repeatedly:resetArm(); //机械臂复位getCube();   //机械臂开始抓取货物putCube();   //机械臂开始释放货物delay(2000);//等待2秒}void resetArm(){   //舵机复位函数;for(int i = 0; i < 6; i++)myServo[i].attach(servoPin[i]);myServo[SERVO_EYE].write(EYEINIT);myServo[SERVO_HEAD].write(HEADINIT);myServo[SERVO_NECK].write(NECKINIT);myServo[SERVO_UPBODY].write(UPBODYINIT);myServo[SERVO_DOWNBODY].write(DOWNBODYINIT);myServo[SERVO_FOOT].write(FOOTINIT);delay(1500);}void getCube(){   //抓取物料动作序列函数;ServoMove(SERVO_FOOT, FOOTINIT, FOOT0, OPERATE_TIME);ServoMove(SERVO_UPBODY, UPBODYINIT,UPBODY0, OPERATE_TIME);ServoMove(SERVO_HEAD, HEADINIT, HEAD0, OPERATE_TIME);ServoMove(SERVO_NECK, NECKINIT, NECK0, OPERATE_TIME);ServoMove(SERVO_EYE, EYEINIT, EYE0, OPERATE_TIME);ServoMove(SERVO_DOWNBODY, DOWNBODYINIT, DOWNBODY0, OPERATE_TIME);ServoMove(SERVO_HEAD, HEAD0, HEADINIT, OPERATE_TIME);ServoMove(SERVO_UPBODY, UPBODY0, UPBODYINIT, OPERATE_TIME);ServoMove(SERVO_EYE,   EYE0, EYEINIT, OPERATE_TIME);ServoMove(SERVO_NECK, NECK0, NECKINIT, OPERATE_TIME);ServoMove(SERVO_DOWNBODY, DOWNBODY0, DOWNBODYINIT, OPERATE_TIME);}void putCube()     //机械臂开始释放货物{ServoMove(SERVO_FOOT, FOOT0, FOOT1 , OPERATE_TIME);ServoMove(SERVO_HEAD, HEADINIT, HEAD1, OPERATE_TIME);ServoMove(SERVO_NECK, NECKINIT, NECK1, OPERATE_TIME);ServoMove(SERVO_UPBODY, UPBODYINIT,UPBODY1, OPERATE_TIME);ServoMove(SERVO_EYE, EYEINIT, EYE1, OPERATE_TIME);ServoMove(SERVO_DOWNBODY, DOWNBODYINIT, DOWNBODY1, OPERATE_TIME);  ServoMove(SERVO_HEAD, HEAD1, HEADINIT, OPERATE_TIME);ServoMove(SERVO_UPBODY, UPBODY1, UPBODYINIT, OPERATE_TIME);ServoMove(SERVO_EYE,   EYE1, EYEINIT, OPERATE_TIME);ServoMove(SERVO_NECK, NECK1, NECKINIT, OPERATE_TIME);ServoMove(SERVO_DOWNBODY, DOWNBODY1, DOWNBODYINIT, OPERATE_TIME);ServoMove(SERVO_FOOT, FOOT1, FOOTINIT , OPERATE_TIME);         }void ServoMove(int which, int _start, int _finish, long t)   //舵机动作函数:它有四个参数,舵机号,初始角度,目标角度,动作时间;{static int direct;static int diff;static long deltaTime;if(_start <= _finish)direct = 1;elsedirect = -1;diff = abs(_finish - _start);deltaTime = (long) (t / 180);for(int i = 0; i < diff; i++){myServo[which].write(_start + i * direct);Serial.println(_start + i * direct);delay(deltaTime);}}

4. 资料内容

​①Arduino搬运-例程源代码
​②Controller1.0b资料包
资料内容请参考 5自由度串联机械臂-Arduino搬运

相关内容

热门资讯

进退触篱的近义词 进退触篱的近义词有:进退两难,进退触藩,进退触篱[jìn tuì chù lí]的意思:见“进退触籓...
衣裳盟会的近义词 衣裳盟会的近义词有:衣裳之会,衣裳盟会[yī cháng méng huì]的意思:衣:穿。穿着礼服...
巴望的近义词是什么 巴望的近义词是什么  巴望的解释,巴望的近义词有哪些?  {巴望}Look forward to  ...
东床佳婿的近义词 东床佳婿的近义词有:东床娇婿,东床佳婿[dōng chuáng jiā xù]的意思:同“东床娇婿”...
横七竖八,横七竖八的意思,横... 横七竖八héng qī shù bā [释义]有的横着;有的竖着。形容杂乱无章;没有条理。[语...
容头过身的近义词 容头过身的近义词有:得过且过,容头过身[róng tóu guò shēn]的意思:只要头容得下,身...
坚壁清野的近义词 坚壁清野的近义词有:固壁清野,空室清野,闭壁清野,坚壁清野[jiān bì qīng yě]的意思:...
讨厌的近义词 讨厌的近义词  中文发音:讨厌[tǎo yàn]  词语解释:谓事情麻烦,令人心烦。惹人厌恶。  近...
通都大邑的近义词 通都大邑的近义词有:沃野千里,通天大邑,通衢大邑,通邑大都,通都大埠,通都巨邑,通都大邑[tōng ...
盲翁扪籥的近义词 盲翁扪籥的近义词有:盲人扪烛,盲翁扪龠,盲翁扪籥[máng wēng mén yuè]的意思:比喻只...
解甲释兵的近义词 解甲释兵的近义词有:解兵释甲,解甲释兵[jiě jiǎ shì bīng]的意思:解:解除;释:卸下...
重峦复嶂的近义词 重峦复嶂的近义词有:重峦叠嶂,重峦叠巘,重峦复嶂[zhòng luán fù zhàng]的意思:同...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
清静的反义词   一、【反义词】  喧嚣、嘈杂、吵杂、烦扰、烦嚣  二、【基本解释】  [释义](形)(环境)安静...
毫无疑义的近义词及意思 毫无疑义的近义词及意思毫无疑义近义词: 不容置疑( 注释:不允许有什么怀疑。表示论证严密,无可怀疑。...
贯通的近义词是什么   新知识会以新颖、或许奇妙的方式与旧知识融会贯通。下面是小编收集整理的贯通的近义词,希望对您有所帮...
乔太守乱点鸳鸯谱的近义词 乔太守乱点鸳鸯谱的近义词有:乱点鸳鸯谱,乔太守乱点鸳鸯谱[qiáo tài shǒu luàn di...
移动应用架构设计:如何转变开发... 移动应用架构设计:如何转变开发流程 2023 年掌握移动应用程序架构的指南࿰...
计算机组成原理实验1---运算...     本实验为哈尔滨工业大学计算机组成原理实验,实验内容均为个人完成,...
八面威风的近义词及意思 八面威风的近义词及意思八面威风近义词: 八面威风( 注释:威风:令人敬畏的'气势。各个方面都很威风。...