目 录
摘 要 I
Abstract II
1 文献综述 1
1.1 国外六足仿生机器人的发展情况 1
1.2 国内六足仿生机器人的发展情况 2
1.3 六足仿生机器人研究中存在的问题 2
1.4 六足仿生机器人的发展趋势 3
1.5 论文的主要内容 3
1.6 小结 4
2 六足仿生机器人的结构分析与步态规划 5
2.1 昆虫运动原理分析 5
2.2 六足仿生机器人六边形模型和长方形模型之间的比较 6
2.3 使用Inventor软件对六足仿生机器人实体造型 8
2.4 六足仿生机器人的结构分析 9
2.5 六足仿生机器人的步态规划 11
2.5.1 机器人坐标系的定义 11
2.5.2 六足仿生机器人腿的运动分析 12
2.5.3 牛顿―辛普森求解方法在运动求解中的应用 14
2.5.4 六足仿生机器人的直线行走步态 16
2.5.5 六足仿生机器人的转弯步态 18
2.5.6 六足仿生机器人的横向行走步态 19
2.5.7 六足仿生机器人的越障步态 20
2.6 小结 22
3 六足仿生机器人控制系统的硬件设计 23
3.1 舵机的原理与控制 23
3.2 控制系统的方案设计和选择 24
3.3 控制系统分析 25
3.3.1 主控芯片介绍 25
3.3.2 控制模块设计 27
3.3.3 电源模块设计 27
3.3.4 串口通信模块设计 28
3.3.5 无线通信模块 29
3.4 小结 30
4 六足仿生机器人控制系统的软件设计 31
4.1 控制系统的主程序 31
4.2 六足仿生机器人的单腿控制程序设计 32
4.3 六足仿生机器人的直线行走程序设计 33
4.4 六足仿生机器人的转弯程序设计 35
4.5 六足仿生机器人的越障程序设计 36
4.6 小结 37
5 结论与展望 38
参 考 文 献 40
致 谢 42
1.5 论文的主要内容
以六足仿生机器人为研究对象,研究了六足仿生机器人的控制系统。
(1)基于昆虫的身体结构和运动机理,给出了六足仿生机器人的简化结构模型。研究了六足仿生机器人的三足步态,详细分析了直线行走步态和转弯步态。
(2)对六足仿生机器人的矩形模型和六边形模型进行了分析比较。
(3)采用一片式解决方案,设计并制作了六足仿生机器人的硬件控制系统。系统具有良好的稳定性和可扩展性。
(4)采用Keil uVision3编写了六足仿生机器人控制系统的程序。通过编译、仿真、调试,实现了对六足仿生机器人的控制。
(5)对六足仿生机器人进行建模,使用Matlab进行系统仿真。并对程序进行移植,实现了六足仿生机器人的高实时性和高适应性的步态控制。
3 六足仿生机器人控制系统的硬件设计
六足仿生机器人有6条腿,而每条腿有3个转动关节,共计18个关节。每个关节由一个舵机驱动,因此需要18路PWM来控制这18个舵机。因此控制系统设计的关键是如何协调控制这18个舵机来实现直线行走和转弯等步态。此外,我们要设计的是能够自己计算生成步态所需数据并且能够根据需要实时调节步态的控制系统,所以主控芯片需要具有足够快的执行速度和良好的数学计算能力。
3.1 舵机的原理与控制
舵机又名伺服电机,是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机可以在自动控制和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机的工作原理:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,脉冲宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
舵机的控制需要一个周期20ms左右的脉冲,脉冲的高电平部分一般为0.5~2.5ms。如图3.1所示。

图3.1 舵机控制信号

输入信号的脉冲宽度和舵机输出转角之间呈线性对应关系,如图3.2所示。

图3.2 控制信号脉宽和舵机转角之间的关系

在我们的六足仿生机器人上使用的是MG995舵机,其参数如下:
1.尺寸:40.7×19.7×42.9mm
2.重量:55g
3.反应转速:无负载速度0.17s/60°(4.8V);0.13s/60°(6.0V)
4.工作死区:4us
5.工作电压:3.0~7.2V
6.工作扭矩:13kg·cm
7.使用温度:-30~+60℃

#include "spider.h"
#include "stm32f10x_init.h"void SPDRStructInit(SPIDER* spdr)
{spdr->Spdr_State = SPDR_STAT_NONE;spdr->Spdr_Height = 30.0;spdr->Right_Front_Leg.Height = spdr->Spdr_Height;spdr->Right_Front_Leg.Length = 140.0;spdr->Right_Front_Leg.anglenear = 90.0;spdr->Right_Front_Leg.Joint_Far  = 540;spdr->Right_Front_Leg.Joint_Mid  = 540;spdr->Right_Front_Leg.Joint_Near = 540;spdr->Right_Middle_Leg.Height = spdr->Spdr_Height;spdr->Right_Middle_Leg.Length = 140.0;spdr->Right_Middle_Leg.anglenear = 90.0;spdr->Right_Middle_Leg.Joint_Far  = 540;spdr->Right_Middle_Leg.Joint_Mid  = 540;spdr->Right_Middle_Leg.Joint_Near = 540;spdr->Right_Back_Leg.Height = spdr->Spdr_Height;spdr->Right_Back_Leg.Length = 120.0;spdr->Right_Back_Leg.anglenear = 90.0;spdr->Right_Back_Leg.Joint_Far  = 540;spdr->Right_Back_Leg.Joint_Mid  = 540;spdr->Right_Back_Leg.Joint_Near = 540;spdr->Left_Front_Leg.Height = spdr->Spdr_Height;spdr->Left_Front_Leg.Length = 140.0;spdr->Left_Front_Leg.anglenear = 90.0;spdr->Left_Front_Leg.Joint_Far  = 540;spdr->Left_Front_Leg.Joint_Mid  = 540;spdr->Left_Front_Leg.Joint_Near = 540;spdr->Left_Middle_Leg.Height = spdr->Spdr_Height;spdr->Left_Middle_Leg.Length = 140.0;spdr->Left_Middle_Leg.anglenear = 90.0;spdr->Left_Middle_Leg.Joint_Far  = 540;spdr->Left_Middle_Leg.Joint_Mid  = 540;spdr->Left_Middle_Leg.Joint_Near = 540;spdr->Left_Back_Leg.Height = spdr->Spdr_Height;spdr->Left_Back_Leg.Length = 120.0;spdr->Left_Back_Leg.anglenear = 90.0;spdr->Left_Back_Leg.Joint_Far  = 540;spdr->Left_Back_Leg.Joint_Mid  = 540;spdr->Left_Back_Leg.Joint_Near = 540;
}void SPDRChangeHeight(SPIDER *spdr,double newheight)
{spdr->Spdr_Height = newheight;spdr->Right_Front_Leg.Height = newheight;spdr->Right_Middle_Leg.Height = newheight;spdr->Right_Back_Leg.Height = newheight;spdr->Left_Front_Leg.Height = newheight;spdr->Left_Middle_Leg.Height = newheight;spdr->Left_Back_Leg.Height = newheight;
}void SPDRRenovateAllData_H(SPIDER* spdr)
{TIM_RFLJfarRenovate(spdr->Right_Front_Leg.Joint_Far);TIM_RFLJmidRenovate(spdr->Right_Front_Leg.Joint_Mid);TIM_RFLJnearRenovate(spdr->Right_Front_Leg.Joint_Near);TIM_RMLJfarRenovate(spdr->Right_Middle_Leg.Joint_Far);TIM_RMLJmidRenovate(spdr->Right_Middle_Leg.Joint_Mid);TIM_RMLJnearRenovate(spdr->Right_Middle_Leg.Joint_Near);TIM_RBLJfarRenovate(spdr->Right_Back_Leg.Joint_Far);TIM_RBLJmidRenovate(spdr->Right_Back_Leg.Joint_Mid);TIM_RBLJnearRenovate(spdr->Right_Back_Leg.Joint_Near);TIM_LFLJfarRenovate(spdr->Left_Front_Leg.Joint_Far);TIM_LFLJmidRenovate(spdr->Left_Front_Leg.Joint_Mid);TIM_LFLJnearRenovate(spdr->Left_Front_Leg.Joint_Near);TIM_LMLJfarRenovate(spdr->Left_Middle_Leg.Joint_Far);TIM_LMLJmidRenovate(spdr->Left_Middle_Leg.Joint_Mid);TIM_LMLJnearRenovate(spdr->Left_Middle_Leg.Joint_Near);TIM_LBLJfarRenovate(spdr->Left_Back_Leg.Joint_Far);TIM_LBLJmidRenovate(spdr->Left_Back_Leg.Joint_Mid);TIM_LBLJnearRenovate(spdr->Left_Back_Leg.Joint_Near);
}void SPDRRenovateAllData_S(SPIDER* spdr,u16* array)
{spdr->Right_Front_Leg.Joint_Far  = array[0];spdr->Right_Front_Leg.Joint_Mid  = array[1];spdr->Right_Front_Leg.Joint_Near = array[2];spdr->Right_Middle_Leg.Joint_Far = array[3];spdr->Right_Middle_Leg.Joint_Mid = array[4];spdr->Right_Middle_Leg.Joint_Near= array[5];spdr->Right_Back_Leg.Joint_Far   = array[6];spdr->Right_Back_Leg.Joint_Mid   = array[7];spdr->Right_Back_Leg.Joint_Near  = array[8];spdr->Left_Front_Leg.Joint_Far   = array[9];spdr->Left_Front_Leg.Joint_Mid   = array[10];spdr->Left_Front_Leg.Joint_Near  = array[11];spdr->Left_Middle_Leg.Joint_Far  = array[12];spdr->Left_Middle_Leg.Joint_Mid  = array[13];spdr->Left_Middle_Leg.Joint_Near = array[14];spdr->Left_Back_Leg.Joint_Far    = array[15];spdr->Left_Back_Leg.Joint_Mid    = array[16];spdr->Left_Back_Leg.Joint_Near   = array[17];
}














六足仿生机器人的控制与实现相关推荐

  1. 基于Stm32的六足仿生机器人的控制平台

  2. DIY六足仿生机器人,了解一下?

    摘要:经过大一那次失败之后,我决定暂时停止该项目的开发,转而先去学习那些有关嵌入式开发的基础知识,等以后有能力的时候再去独立完成这个六足机器人.很幸运的是在我大学本科即将结束的时候,我已掌握了足够的知 ...

  3. 干货|手把手教你自制六足仿生机器人

    摘要:经过大一那次失败之后,我决定暂时停止该项目的开发,转而先去学习那些有关嵌入式开发的基础知识,等以后有能力的时候再去独立完成这个六足机器人.很幸运的是在我大学本科即将结束的时候,我已掌握了足够的知 ...

  4. 基于51单片机的六足仿生机器人

    大三上学期的期末设计,全程全手工DIY,历时一个月,时间主要花在机器人步态的调整,为了让机器人走得好一点,花了不少功夫,给出设计方案,仅供参考 先来看看视频效果:链接:http://pan.baidu ...

  5. 树莓派六足仿生蜘蛛机器人Hexapod二次开发源代码

    小R hexapod R1 树莓派六足智能机器人演示视频 小R科技XR Hexapod R1树莓派六足仿生机器人的二次开发SDK代码分为驱动层和AI层,驱动层使用C++编写,并提供so函数库供上层调用 ...

  6. 【全国大学生IoT设计竞赛】安谋科技灵动赛题国赛一等奖分享:多足仿生机器人

    本文参加极术社区和灵动微电子组织的2022全国大学生物联网设计作品征集活动. 8月26日至8月27日,由全国高等学校计算机教育研究会主办,湖南大学信息科学与工程学院承办,华为技术有限公司协办,上海交通 ...

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

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

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

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

  9. PVCBOT【15号A版】机械昆虫--六足爬行机器人

    本次项目介绍的是一个六足机械昆虫,即模仿有六只脚的昆虫进行爬行运动的机器人.本项目的六足机器人与 PVCBOT-13号 的双足机器人还有 PVCBOT-14号 的四足机器人一起,组成了PVCBOT仿生 ...

  10. 六足蜘蛛机器人+哈尔的移动城堡,一个神奇组合的设计制作!

    在大二的暑假里,我花了两个月的时间做了一个哈尔的移动城堡,这个移动城堡由一个六足机器人底盘和一个城堡的纸模组成,整个项目的成本控制在1000块左右,我们先来看看成品吧.           一.六足机 ...

最新文章

  1. httpwatchv11.1.46.0免费版
  2. DSP与FPGA和嵌入式是什么关系?
  3. 判断远程图片是否存在的JavaScript代码
  4. 使用Dezender对zend加密后的php文件进行解密
  5. java oca_OCA第6部分中的Java难题
  6. 分布式系统中,权限设计实践
  7. CentOs基础操作指令(运行级别)
  8. Android ArryaList 笔记
  9. linux环境下的TIME_WAIT和CLOSE_WAIT问题解决方法
  10. 开机时出现:reboot and select proper boot 、关于IDE与AHCI
  11. Word文档转换:如何使用Aspose.words在Java中将Word和图像转换为PDF
  12. mac 谷歌浏览器必备插件
  13. ESP32开发1---ESP32环境搭建(ESP-IDF+VSCode)
  14. vasp 模拟退火_【转】vasp的分子动力学模拟 - 第一原理 - 小木虫 - 学术 科研 互动社区...
  15. LED软模组圆柱屏、柔性屏、异形屏、柱子屏、方柱屏、创意显示屏案例分享
  16. Symmetric 配置数据库同步
  17. Oracle简单操作总结
  18. spring Aop中aop:advisor 与 aop:aspect的区别
  19. 1.11 等待通知机制wait和notify的使用,简单的生产者消费者
  20. mysql中更改数据库名字_【实操篇】_MySQL如何更改数据库名字?

热门文章

  1. Android快速开发推荐10个框架Android 快速开发框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、
  2. 【温州死中】温州RAP
  3. 在线ER模型设计工具,支持MySQL、SQLServer、Oracle、Postgresql sql导入,支持表、视图等编辑
  4. 东西帝国时代:西半球的罗马帝国和东半球的秦汉帝国
  5. 格林尼治时间与本地时间转换
  6. 使用 Parity 建立Proof-of-Authority (PoA) Ethereum Chain
  7. 使用jquery生成随机二维码的方法
  8. java反向查找dns_windows – 反向DNS查找
  9. 小白兔写话_小白兔写话二年级作文
  10. 在excel里插入图表_如何在Excel中锁定图表的位置