1. 功能说明
本文示例将实现R328a样机4自由度并联机器狗下蹲的功能。
2. 结构说明
本样机的并联驱动结构与 【R082】4自由度并联四足 类似,两款样机可以对比来看。
本样机腿部的结构如下图所示:驱动核心部分是两个5杆结构的组合。
驱动核心部分再搭配下图的四杆结构,即可构成单侧的腿。驱动核心部分再搭配下图的四杆结构,即可构成单侧的腿。
3. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
主控板 | Basra主控板(兼容Arduino Uno) |
扩展板 | Bigfish2.1扩展板 |
电池 | 7.4V锂电池 |
电路连接:为了便于识别控制4自由度并联机器狗,我们先规定好机器狗的前方以及舵机位置编号(如下图所示):
将舵机(A1、A2 、B1、B2)连接在Bigfish扩展板的D4、D7、D3、D8端口,如下图所示:
4. 功能实现
上位机:Controller 1.0
下位机编程环境:Arduino 1.8.19
实现思路:实现4自由度并联机器狗站立、前蹲、后蹲的动作。
4.1 调试舵机角度
利用上位机 Controller软件调整4自由度并联机器狗的舵机角度,记录下机器狗站立、前蹲、后蹲时舵机的角度;然后利用Arduino IDE进行下位机编程,利用这些角度实现机器狗下蹲的功能。
对于如何利用Controller软件进行调试机器狗的舵机角度,可参考【U002】如何驱动模拟舵机-Controller 1.0b软件的使用 在本次实验中,经过调试,对于4自由度并联机器狗站立、前蹲、后蹲时的舵机角度值如下图所示:
4.2 示例程序
下面提供一个4自由度并联机器狗下蹲的参考例程
/*------------------------------------------------------------------------------------版权说明: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-05-26 https://www.robotway.com/------------------------------*//*本例程实现机器小狗站立、前蹲和后蹲*/#include<Servo.h>#define SERVO_SPEED 60 //定义舵机转动快慢的时间#define ACTION_DELAY 0 //定义所有舵机每个状态时间间隔Servo myServo[4];int f = 15; //定义舵机每个状态间转动的次数,以此来确定每个舵机每次转动的角度int servo_port[4] = {3,4,7,8}; //定义舵机引脚int servo_num = sizeof(servo_port) / sizeof(servo_port[0]); //定义舵机数量float value_init[4] = {1513,1457,1074,1545}; //定义舵机初始角度void setup() {Serial.begin(9600);for(int i=0;i<servo_num;i++){ServoGo(i,value_init[i]);}delay(2000);}void loop() {Dog_squat();}void Dog_squat(){servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立servo_move(1243,1703,1278,1299);//向后蹲下servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立servo_move(1715,1255,1052,1545);//向前蹲下servo_move(value_init[0],value_init[1],value_init[2],value_init[3]);//直立}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]) / f;}for(int i=0;i<f;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);}delay(ACTION_DELAY);}
5. 扩展样机
本样机可以做出一些扩展,如下图所示的在样机上方增加平板,此样机可用探索者零件或探索者兼容零件制作。
及程序源代码样机3D文件资料内容详见 4自由度并联机器狗-下蹲