|
(分享資料)內(nèi)含機(jī)械自搭的機(jī)器小狗的3D模型樣本,還附帶了arduino的驅(qū)動(dòng)程。這個(gè)機(jī)器小狗只含四個(gè)舵機(jī),通過修改舵機(jī)的參數(shù)來實(shí)現(xiàn)機(jī)器狗的前進(jìn)和后退。
四自由度并聯(lián)四足.jpg (256.54 KB, 下載次數(shù): 27)
下載附件
2018-6-25 00:32 上傳
- #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}; //各個(gè)舵機(jī)的初始位置
- 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);
- }
- }
復(fù)制代碼
|
-
-
四自由度并聯(lián)四足.rar
2018-6-25 00:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
581.56 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|