|
【R082】4自由度并联四足
作者:机器谱
概述 |
2. 结构说明
4自由度并联四足机器人结构每边2自由度,分布如下图所示,中间的2号舵机控制两条腿的前后运动;1号舵机控制前腿的抬、落,左右两边相差30°的相位。
1. 运动功能说明
本文示例将实现R082样机4自由度并联四足机器人行走的功能。
概述
3. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
主控板 | |
扩展板 | |
电池 | 7.4V锂电池 |
/*------------------------------------------------------------------------------------ 版权说明: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-04-14 https://www.robotway.com/ ------------------------------*/ #include <Servo.h> #define servo_speed 20 //servo_speed #define servo_speed2 45 #define action_delay 350 //action_delay Servo myServo[4]; int num = 10; int servo_port[4]={4,11,3,12}; //servo_pin int servo_num = sizeof(servo_port)/sizeof(servo_port[0]); //servo_pin length float value_init[4]={90, 90, 90, 90}; //各个舵机的初始位置 void setup() { // put your setup code here, to run once: Serial.begin(9600); for(int i=0; i<servo_num; i++) { ServoGo(i, value_init[i]); } } void loop() { // put your main code here, to run repeatedly: for(int i=0;i<1;i++) { left_right_bias(); delay(100); forward_back_lie_down(); delay(100); } //while(1) //{ // walk(); //} while(1) { test(); } } void test() { servo_move(90,60,90,90); servo_move(120,60,120,90); servo_move(120,60,120,120); servo_move(90,90,90,120); } void walk() { servo_move(90,60,90,90); servo_move(110,60,114,90); servo_move(110,60,114,130); servo_move(60,90,90,130); } void forward_back_lie_down() { servo_move2(90, 90, 90, 90); servo_move2(103,29,75,165); servo_move2(90, 90, 90, 90); servo_move2(90,156,90,20); servo_move2(90, 90, 90, 90); } void left_right_bias() { servo_move2(90, 90, 90, 90); servo_move2(47,136,57,119); servo_move2(90, 90, 90, 90); servo_move2(116,54,147,74); servo_move2(90, 90, 90, 90); } 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]) / num; }
for(int i=0;i<num;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); } } void servo_move2(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]) / num; }
for(int i=0;i<num;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_speed2); } } |
电路连接:舵机分别连接在Bigfish扩展板的D4、D11、D3、D12接口上。
4. 运动功能实现
编程环境:Arduino 1.8.19
将参考例程(machine_servo_dog.ino)下载到主控板,完成4自由度并联四足机器人行走的实验,实验效果可参考演示视频。
5. 资料清单
序号 | 内容 |
1 | 【R082】-例程源代码 |
2 | 【R082】-样机3D文件 |
【整体打包】-【R082】4自由度并联四足-概述-资料附件.zip | 816.84KB | 下载8次 | 下载 |