1. 任务描述
本实验中机器人将通过完成将工作区外的工件搬运至工作区的任务,来模拟机器人的搬运过程。机器人首先需要通过循迹找到未存放在工作区内的工件,然后利用机械爪将工件夹起并保持工件处于加持状态(距离地面1cm以上),最后将工件搬运至工作区即算完成任务。
工件和场地如下图所示:
2. 电子硬件
在这个实验中,采用了以下硬件,请大家参考:
Basra主控板(兼容Arduino Uno)、Bigfish2.1扩展板、灰度传感器、7.4V锂电池
3. 示例程序
流程图:
编程环境:Arduino 1.8.19
例程代码(214f_porterage.ino)如下:
/********************************************************************* 版权说明:Copyright 2022 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 机器谱 2022-10-20 https://www.robotway.com/ *************************** 实验接线 ****************************** 左侧车轮接6/10端口;右侧车轮接5/9端口; 关节模块的舵机线连接到D11端口,机械爪的舵机线连接到D12端口 ******************************************************************/ #include <Servo.h> Servo servo_pin_12; Servo servo_pin_11; void grab(); void trun_left(); void forward(); void putdown(); void go_putdown(); void carstop(); void trun_right(); void brake(); void setup() { pinMode( 18, INPUT); pinMode( 14, INPUT); pinMode( 10, OUTPUT); pinMode( 6, OUTPUT); pinMode( 5, OUTPUT); pinMode( 9, OUTPUT); servo_pin_12.attach(12); servo_pin_11.attach(11); servo_pin_12.write( 91 ); servo_pin_11.write( 145 ); delay( 1500 ); } void loop() { if (!( digitalRead(18) )) { if (!( digitalRead(14) )) { brake(); grab(); go_putdown(); } else { trun_right(); } } else { if (!( digitalRead(14) )) { trun_left(); } else { forward(); } } } void go_putdown() { forward(); delay( 500 ); carstop(); delay( 1000 ); putdown(); while ( true ) { carstop(); } } void trun_right() { analogWrite(6 , 80); analogWrite(10 , 0); analogWrite(5 , 0); analogWrite(9 , 80); } void forward() { analogWrite(6 , 80); analogWrite(10 , 0); analogWrite(5 , 80); analogWrite(9 , 0); } void carstop() { analogWrite(6 , 0); analogWrite(10 , 0); analogWrite(5 , 0); analogWrite(9 , 0); } void trun_left() { analogWrite(6 , 0); analogWrite(10 , 80); analogWrite(5 , 80); analogWrite(9 , 0); } void grab() { servo_pin_12.write( 50 ); delay( 1000 ); servo_pin_11.write( 110 ); delay( 1000 ); } void brake() { analogWrite(6 , 100); analogWrite(10 , 100); analogWrite(5 , 100); analogWrite(9 , 100); delay( 500 ); } void putdown() { servo_pin_11.write( 145 ); delay( 1000 ); servo_pin_12.write( 91 ); delay( 1000 ); } |
资料内容:循迹搬运-例程源代码、工件3D文件(资料下载链接 轮式机械臂小车-循迹搬运)