模型文件来自于大神Spider robot开源,代码文件为原创测试用,比较无脑的重复代码,入门阶段。单片机采用arduino uno开发板,HC05蓝牙模块,SG90舵机12个,目前还没有PID算法,后期应该会加上吧。

#转载引用请标明出处,另外禁止商用

Arduino UNO开发板

Adruino UNO是一款常见的Adruino板子,如图5.1所示,从复位按钮开始顺时针依次是TWI接口、数字输入输出接口、电源指示灯、ICSP编程接口、主控单片机ATmega328,模拟输入接口、电源接口、DC电源输入接口、稳压芯片、USB接口。

Adruino UNO的工作电压为5V,供电范围一般是6-20V。考虑电压较低可能导致供电不足,驱动不了模块电压过高可能会使板子上面的稳压芯片过热影响板子使用寿命,所以实际的供电范围在7-12V之间。Adruino UNO的供电方式有3种,可以根据开发者的需要自己选择供电方式。第一种是外部的直流电源连接到DC电源输入接口来给UNO板子供电;第二种是通过UNO板子的USB接口,电脑通过USB线连接到UNO板子的USB接口可以用来下载程序给板子以及供电。当前两种供电方式没有采用时,可以使用第三种供电方式,即使用UNO板子上电源接口处的GND 和VIN引脚供电。但如果前两种供电方式已经采用的话,可以通过VIN给外部模块或者面包板供电。电源接口引脚中的5V引脚是通过稳压芯片或USB的5V电压,为板子上的5V芯片供电;其中的3.3V引脚是通过稳压芯片产生的3.3V电压,驱动电流最大为50mA。
        板子上的14路数字输入输出接口工作电压为5V,其中还有一些具有特定功能的引脚。本次毕业设计过程中使用到0、1、2、6以及7号数字输入输出引脚。0号引脚和1号引脚可用于串口通信,0号引脚为RX,1号引脚为TX,提供串口接收信号。这两个引脚用于连接HC-05蓝牙模块。2号引脚作为触发中断引脚,有3种触发模式,分别是上升沿、下降沿触发以及同时触发。本次毕设中2号引脚用于控制4个LED指示灯。6号和7号引脚属于正常功能的引脚。
        板子上的AO-A5接口是模拟输入接口,默认输入信号范围是0-5V。和数字输入接口类似,模拟输入接口也有几个引脚具有特定功能。

 步态规划:

四足步态采用了x型步态,操作部分代码见AutodataCmd部分,使用HC05蓝牙模块,由于舵机数量较多采用数组直接定义。启动时会进入准备状态,进行行进前需要启动Start进入预备状态。

‘x’型步态规划方式如下:

前进步态:

如图所示,在“X”型步态时,四足榛蛛机器人前进步态是A腿抬起→A腿前移(1号舵机带着A腿逆时针转动)→A腿落下→C腿抬起→C腿前移(7号舵机带着C腿顺时针转动)→C腿落下→AC两条腿复位→B腿抬起→B腿前移(4号舵机带着B腿顺时针转动)→B腿落下→D腿抬起→D腿前移(10号舵机带着D腿逆时针转动)一D腿落下一BD两条腿复位。

后退步态:

在“X”字型步态时,如图所示,四足蜘蛛机器人后退步态是:A腿抬起→A腿向右移(1号舵机带着A腿顺时针转动)→A腿落下→C腿抬起→C腿向右移(7号舵机带着C腿逆时针转动)→C腿落下→AC两条腿复位→B腿抬起一B腿向左移(4号舵机带着B腿逆时针转动)一B腿落下一D腿抬起→D腿向左移(10号舵机带着D腿顺时针转动)→D腿落下→ED两条腿复位。

左转/右转步态规划:

在“X”型步态时,如图所示,四足蜘蛛机器人左转步态是A腿抬起→A腿向左移(1号舵机带着A腿逆时针转动)→A腿落下→C腿抬起→C腿向右移(7号舵机带着C腿逆时针转动)→C腿落下→B腿抬起→B腿向左移(4号舵机带着B腿逆时针转动)→B腿落下→D腿抬起→D腿向右移(10号舵机带着D腿逆时针转动)→一D腿落下→ABCD 四条腿复位。

图略,四足蜘蛛机器人右转步态是:A腿抬起→A腿向右移(1号舵机带着A腿顺时针转动)→A腿落下→C腿抬起→C腿向左移(7号舵机带着C腿顺时针转动)→C腿落下→B腿抬起→B腿向右移(4号舵机带着B腿顺时针转动)→B腿落下一→D腿抬起→D腿向左移(10号舵机带着D腿顺时针转动)→D腿落下一ABCD 四条腿复位。

#转载引用请标明出处,另外禁止商用

UNO代码控制代码:

#include<Servo.h>
//#include<MsTimer2.h>
#define sMaxAngle 175
#define sMinAngle 5Servo servo[12];//定义舵机数组名称
int servo_pin[12];//定义引脚
bool mode;//模式调整void setup() {Serial.begin(9600);Serial.println("Robot begin work");Initialize();
}void loop() {if(Serial.available()){char serialCmd = Serial.read();if(mode == 1){//ArmdataCmd(serialCmd);//指令模式}else{AutodataCmd(serialCmd);//自动模式}}
}void PreMode(char serialCmd = 's'){//进入预备模式for(int pre = 90;pre >= 45;pre--){servo[4].write(pre);delay(15);servo[6].write(pre);delay(15);}for(int pre = 90;pre <= 135;pre++){servo[5].write(pre);delay(15);servo[7].write(pre);delay(15);    }for(int pre_2 = 90;pre_2 <= 135;pre_2++){servo[9].write(pre_2);delay(15);servo[10].write(pre_2);delay(15);}for(int pre_2 = 90;pre_2 >= 45;pre_2--){servo[8].write(pre_2);delay(15);servo[11].write(pre_2);delay(15);    }for(int pos = 90;pos <= 135;pos++){//进入准备模式Serial.println(pos);servo[0].write(pos);delay(15);servo[2].write(pos);delay(15);    }for(int pos = 90;pos >= 45;pos--){Serial.println(pos);servo[1].write(pos);delay(15);servo[3].write(pos);delay(15);}
}void AutodataCmd(char serialCmd){//自动模式给出相应操作if(serialCmd == 'B'||serialCmd == 'H'||serialCmd == 'R'||serialCmd == 'L'){Serial.println("+Warning:Robot in Auto Mode...");delay(100);while(Serial.available()>0) char wrongCommand =Serial.read();//清除串口错误信息return;}switch(serialCmd){case 's':Serial.println("Enter preparing Model!!!");PreMode();Serial.println("Preparation Over!!!");break;case 'w'://前进步态命令Serial.println("Robot starts to go ahead!!!");for(int i = 0;i <= 5;i++){Goahead_leg1();Goahead_leg3();aheadIni_leg13();Goahead_leg2();Goahead_leg4();aheadIni_leg24();}Serial.println("Ahead Command had overed!!!"); break;case 'x'://后退步态命令Serial.println("Robot starts to come back!!!");for(int i = 0;i <= 3;i++){Bcak_leg1();Back_leg3();Back_Ini13();Back_leg2();Back_leg4();Back_Ini24();}Serial.println("Back Command had overed!!!");break;case 'a'://左转步态命令Serial.println("Robot starts to turn left!!!");Goahead_leg1();Back_leg3();Back_leg2();Goahead_leg4();Left_Ini();      //turnLeft();break;case 'd':Serial.println("Robot starts to turn right!!!");Bcak_leg1();Goahead_leg3();Goahead_leg2();Back_leg4();Right_Ini();//turnRight();break;case 'q':Serial.println("Robot starts to stand up!!!");turnUp();break;case 'o':Serial.println("Robot initialized");Initialize();break;}
}void Initialize(){//机器人初始化for(int i = 0;i <= 11;i++){servo_pin[i] = i+2;servo[i].attach(servo_pin[i],500,2500);servo[i].write(90);}
}void Goahead_leg1(char serialCmd = 'w'){//前进腿1  for(int pos = 45;pos <= 75;pos++){servo[8].write(pos);delay(15);}for(int pos = 135;pos <= 165;pos++){servo[0].write(pos);delay(15);}for(int pos = 75;pos >= 45;pos--){servo[8].write(pos);delay(15);}
}void Goahead_leg3(char serialCmd = 'w'){//前进腿3for(int pos = 45;pos <= 75;pos++){servo[11].write(pos);delay(15);}for(int pos = 135;pos >= 105;pos--){servo[2].write(pos);delay(15);}for(int pos = 75;pos >= 45;pos--){servo[11].write(pos);delay(15);}
}
void aheadIni_leg13(char serialCmd = 'w'){//腿13复原for(int pos = 165;pos >= 135;pos--){servo[0].write(pos);delay(15);    }for(int pos = 105;pos <= 135;pos++){servo[2].write(pos);delay(15);}
}void Goahead_leg2(char serialCmd = 'w'){//前进腿2for(int pos = 135;pos >= 105;pos--){servo[9].write(pos);delay(15);  }for(int pos = 45;pos >= 15;pos--){servo[1].write(pos);delay(15);}for(int pos = 105;pos <= 135;pos++){servo[9].write(pos);delay(15);  }
}void Goahead_leg4(char serialCmd = 'w'){//前进腿4for(int pos = 135;pos >= 105;pos--){servo[10].write(pos);delay(15);}for(int pos = 45;pos <= 75;pos++){servo[3].write(pos);delay(15);}for(int pos = 105;pos <= 135;pos++){servo[10].write(pos);delay(15);}
}void aheadIni_leg24(char serialCmd = 'w'){//腿24复原for(int pos = 15;pos <= 45;pos++){servo[1].write(pos);delay(15);}for(int pos = 75;pos >= 45;pos--){servo[3].write(pos);delay(15);}
}void turnUp(char serialCmd ='q'){//皮皮虾代码,谨慎使用for(int pos = 90;pos <=135;pos++){servo[4].write(pos);delay(15);servo[6].write(pos);delay(15);}for(int pos = 45;pos <= 90;pos++){servo[5].write(pos);delay(15);servo[7].write(pos);delay(15);    }for(int pos = 135;pos >= 90;pos--){servo[4].write(pos);delay(15);servo[6].write(pos);delay(15);    }for(int pos = 90;pos >= 45;pos--){servo[5].write(pos);delay(15);servo[7].write(pos);delay(15);    }
}void Bcak_leg1(char serialCmd = 'x'){//腿1撤回for(int pos = 45;pos <= 90;pos++){servo[8].write(pos);delay(15);}for(int pos = 135;pos >= 105;pos--){servo[0].write(pos);delay(15);}for(int pos = 90;pos >= 45;pos--){servo[8].write(pos);delay(15);}
}void Back_leg3(char serialCmd = 'x'){//腿3撤回for(int pos = 45;pos <= 75;pos++){servo[11].write(pos);delay(15);}for(int pos = 135;pos <= 165;pos++){servo[2].write(pos);delay(15);}for(int pos = 75;pos >= 45;pos--){servo[11].write(pos);delay(15);}
}void Back_Ini13(char serialCmd = 'x'){//撤回13复原for(int pos = 105;pos <= 135;pos++){servo[0].write(pos);delay(15);}for(int pos = 165;pos >= 135;pos--){servo[2].write(pos);delay(15);}
}void Back_leg2(char serialCmd = 'x'){//腿2撤回for(int pos = 135;pos >= 105;pos--){servo[9].write(pos);delay(15);  }for(int pos = 45;pos <= 75;pos++){servo[1].write(pos);delay(15);}for(int pos = 105;pos <= 135;pos++){servo[9].write(pos);delay(15);  }
}void Back_leg4(char serialCmd = 'x'){//腿4撤回for(int pos = 135;pos >= 105;pos--){servo[10].write(pos);delay(15);}for(int pos = 45;pos >= 15;pos--){servo[3].write(pos);delay(15);}for(int pos = 105;pos <= 135;pos++){servo[10].write(pos);delay(15);}
}void Back_Ini24(char serialCmd = 'x'){//撤回24复原for(int pos = 75;pos >= 45;pos--){servo[1].write(pos);delay(15);}for(int pos = 15;pos <= 45;pos++){servo[3].write(pos);delay(15); }
}void Left_Ini(){//x步态左转复原for(int pos = 165;pos >= 135;pos--){servo[0].write(pos);delay(15);servo[2].write(pos);delay(15);}for(int pos = 75;pos >= 45;pos--){servo[1].write(pos);delay(15);servo[3].write(pos);delay(15);    }
}void Right_Ini(){//x步态右转复原for(int pos = 105;pos <= 135;pos++){servo[0].write(pos);delay(15);servo[2].write(pos);delay(15);}for(int pos = 15;pos <= 45;pos++){servo[1].write(pos);delay(15);servo[3].write(pos);delay(15);}
}

嵌入式学习记录(1)——四足蜘蛛机器人相关推荐

  1. 分享一个四足蜘蛛机器人(带源码)

    分享一个四足蜘蛛机器人 - 开题 进入大学以来,学习单片机已经很长时间了.之前都是在开发板上学习各种外设,做各种实验,一直也都没正经的做过什么项目.刚好临近毕业,需要做毕业设计,我感觉这是一个很好的机 ...

  2. 四足蜘蛛机器人--制作过程记录

    更新:老有人问舵机的编号,https://www.instructables.com/id/DIY-Spider-RobotQuad-robot-Quadruped/  原作者链接里面什么都有,有些人 ...

  3. 2022 还有人做四足蜘蛛机器人

    1️⃣前面的话

  4. 动作捕捉技术在四足仿生机器人研究中的应用

    轮式/履带式移动机器人可以胜任很多场景的探索.运输的任务,但是随着应用空间的拓展,需要机器人在山地.峭壁.丛林.雪地等崎岖复杂的地形的任务也逐渐增多,轮式/履带式机器人难以在这类地形中移动.自然界中动 ...

  5. 三维荧光平行因子学习记录--(四)平行因子组件导出--(一)

    三维荧光平行因子学习记录–(四)平行因子组件导出–(一) 注:本文仅作为自己的学习记录以备以后复习查阅 本文参考博客链接: https://zhuanlan.zhihu.com/p/377996430 ...

  6. 《SysML精粹》学习记录--第四章

    <SysML精粹>学习记录 第四章:内部模块图(Internal Block Diagram,IBD) IBD介绍 组成部分属性 引用属性 连接器 项目流 内嵌组成部分和引用 小结 第四章 ...

  7. 【DIY】打造一个六足蜘蛛机器人

    摘要:本文主要介绍如何DIY一个六足蜘蛛机器人,内容包括建模.3D打印材料.舵机控制.运动控制等内容,目前初步完成制作,运动控制还在改进 作者博客地址:http://www.yooongchun.cn ...

  8. 四足步行机器人的结构设计及仿真

    目 录 摘要 I ABSTRACT II 第1章 绪论 1 1.1 课题研究的目的和意义 1 1.2 国内外关于四足步行机器人的发展现状 2 1.2.1 国外关于四足步行机器人的发展现状 2 1.2. ...

  9. 四足爬行机器人运动_四足爬行机器人控制研究

    龙源期刊网 http://www.qikan.com.cn 四足爬行机器人控制研究 作者:韩飞 吴宝春 陈益 王志远 李志刚 来源:<智能计算机与应用> 2017 年第 01 期 摘要:本 ...

最新文章

  1. 并发编程中一种经典的分而治之的思想!!
  2. 用Async函数简化异步代码
  3. 718保时捷spyder_我要买保时捷718 Spyder的原因:新手也可以玩手动
  4. python人工智能是什么意思_Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现...
  5. myeclipse需要配置服务器得项目是,【SpringMVC】使用Myeclipse创建SpringMVC项目【超详细教程】...
  6. 吴恩达机器学习ex8:异常检测
  7. 项目总结一:情感分类项目(emojify)
  8. Docker批量拉取和推送的Linux Shell脚本
  9. java 加密使长度变短
  10. 当游戏遇到区块链之链游经济系统思考
  11. 三级网络技术无纸化模拟软件 (未来)教育
  12. 通讯录管理系统 指针 链表 学生管理系统 人员管理系统
  13. 人工智能、大数据、数据挖掘、机器学习-数据集来源
  14. html 页面只能打印一半,打印机只能打印一部分-打印机只能打印一半是什么问?打印机只能打印 – 手机爱问...
  15. Soul App 高管被捕,恶意举报导致竞品被下架
  16. EChart饼图文字大小调整
  17. 利用.htaccess文件实现不带www域名301跳转到带www域名
  18. 测试类型(αβ测试 、AB测试)
  19. java对接微信支付收不到支付通知问题(亲身实践)
  20. 【IVIF:特征聚合网络】

热门文章

  1. python与机器人王国_【工业机器人】盘点日本最值得关注的工业机器人13大巨头!...
  2. Python识别快递条形码及Tesseract-OCR使用详解
  3. Java-MVC三层架构
  4. 计算机房建设采购方案,机房建设整体投标方案(DOCX 111页)
  5. vb.net 教程 1-1 从 hello world 开始
  6. 破解入门(二)-----认识OllyDBG
  7. 川农在线平时作业c语言答案,川农《C语言(专科)》17年3月在线作业答案
  8. 宽度优先搜索算法(BFS)详解(超级详细讲解,附有大图)
  9. 加权最小均方误差算法(WMMSE)论文复现,附Matlab代码
  10. 【项目实战】Spring Cloud Gateway入门介绍 - 网关过滤器工厂