1. 功能說(shuō)明
本文示例將實(shí)現(xiàn)R328a樣機(jī)4自由度并聯(lián)機(jī)器狗下蹲的功能。
2. 結(jié)構(gòu)說(shuō)明
本樣機(jī)的并聯(lián)驅(qū)動(dòng)結(jié)構(gòu)與 【R082】4自由度并聯(lián)四足 類(lèi)似,兩款樣機(jī)可以對(duì)比來(lái)看。
本樣機(jī)腿部的結(jié)構(gòu)如下圖所示:驅(qū)動(dòng)核心部分是兩個(gè)5桿結(jié)構(gòu)的組合。
兩個(gè)五桿結(jié)構(gòu)圖驅(qū)動(dòng)核心部分再搭配下圖的四桿結(jié)構(gòu),即可構(gòu)成單側(cè)的腿。驅(qū)動(dòng)核心部分再搭配下圖的四桿結(jié)構(gòu),即可構(gòu)成單側(cè)的腿。
四桿結(jié)構(gòu)單側(cè)腿部圖整機(jī)3. 電子硬件
在這個(gè)示例中,我們采用了以下硬件,請(qǐng)大家參考:
主控板 |
|
擴(kuò)展板 |
|
電池 |
7.4V鋰電池 |
電路連接:為了便于識(shí)別控制4自由度并聯(lián)機(jī)器狗,我們先規(guī)定好機(jī)器狗的前方以及舵機(jī)位置編號(hào)(如下圖所示):
將舵機(jī)(A1、A2 、B1、B2)連接在Bigfish擴(kuò)展板的D4、D7、D3、D8端口,如下圖所示:
4. 功能實(shí)現(xiàn)
上位機(jī):Controller 1.0
下位機(jī)編程環(huán)境:Arduino 1.8.19
實(shí)現(xiàn)思路:實(shí)現(xiàn)4自由度并聯(lián)機(jī)器狗站立、前蹲、后蹲的動(dòng)作。
4.1 調(diào)試舵機(jī)角度
利用上位機(jī) Controller軟件調(diào)整4自由度并聯(lián)機(jī)器狗的舵機(jī)角度,記錄下機(jī)器狗站立、前蹲、后蹲時(shí)舵機(jī)的角度;然后利用Arduino IDE進(jìn)行下位機(jī)編程,利用這些角度實(shí)現(xiàn)機(jī)器狗下蹲的功能。
對(duì)于如何利用Controller軟件進(jìn)行調(diào)試機(jī)器狗的舵機(jī)角度,可參考【U002】如何驅(qū)動(dòng)模擬舵機(jī)-Controller 1.0b軟件的使用 在本次實(shí)驗(yàn)中,經(jīng)過(guò)調(diào)試,對(duì)于4自由度并聯(lián)機(jī)器狗站立、前蹲、后蹲時(shí)的舵機(jī)角度值如下圖所示:
機(jī)器狗站立時(shí)的舵機(jī)值機(jī)器狗前蹲時(shí)的舵機(jī)值機(jī)器狗后蹲時(shí)的舵機(jī)值4.2 示例程序
下面提供一個(gè)4自由度并聯(lián)機(jī)器狗下蹲的參考例程(Dog_squat.ino),例程源代碼詳見(jiàn) 【https://www.robotway.com/h-col-237.html】 ,實(shí)驗(yàn)效果可參考演示視頻。
/*------------------------------------------------------------------------------------
版權(quán)說(shuō)明: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 機(jī)器譜 2023-05-26 https://www.robotway.com/
------------------------------*/
/*
本例程實(shí)現(xiàn)機(jī)器小狗站立、前蹲和后蹲
*/
#include?Servo.h??>
#define SERVO_SPEED 60 //定義舵機(jī)轉(zhuǎn)動(dòng)快慢的時(shí)間
#define ACTION_DELAY 0 //定義所有舵機(jī)每個(gè)狀態(tài)時(shí)間間隔
Servo myServo[4];
int f = 15; //定義舵機(jī)每個(gè)狀態(tài)間轉(zhuǎn)動(dòng)的次數(shù),以此來(lái)確定每個(gè)舵機(jī)每次轉(zhuǎn)動(dòng)的角度
int servo_port[4] = {3,4,7,8}; //定義舵機(jī)引腳
int servo_num = sizeof(servo_port) / sizeof(servo_port[0]); //定義舵機(jī)數(shù)量
float value_init[4] = {1513,1457,1074,1545}; //定義舵機(jī)初始角度
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) //舵機(jī)轉(zhuǎn)動(dòng)
{
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. 擴(kuò)展樣機(jī)
本樣機(jī)可以做出一些擴(kuò)展,如下圖所示的在樣機(jī)上方增加平板,此樣機(jī)可用探索者零件或探索者兼容零件制作。
審核編輯黃宇
-
機(jī)器狗
+關(guān)注
關(guān)注
3文章
168瀏覽量
10062
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論