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