当我按下开关,震惊了一众答辩老师,乍一看,啊,就这?

news2024/11/27 16:53:18

基于机器视觉的爬行机器人(毕业设计)

  • 零、实现功能
  • 一、关于本想法
  • 二、理论分析
  • 三、3D结构设计
  • 四、硬件设计
    • 主控板
    • 驱动板
  • 五、软件设计
    • 控制程序
    • 机器视觉
    • APP设计
  • 六、结束语

零、实现功能

  1. 实现了爬行机器人的移动控制功能。采用三角步态控制机器人移动,通过运动学逆运算得出控制角度。
  2. 实现了上位机控制功能。采用蓝牙模块,实现蓝牙无线通信,下发控制指令控制机器人。
  3. 实现了实时监控功能。通过WIFI模块将是系统采集到的视频画面上传到上位机界面中。
  4. 实现了显示动画效果、灯光效果。促进人机交互体验。

    一个呆萌的小机器人

一、关于本想法

我从小就是一个闲不住的孩子,小时候也动手拆过家里的遥控器、电子玩具等一些物品,对电子的世界也是充满了好奇,随着逐渐成长,在大学期间,我开始更深入的了解电子世界,当我接触单片机之后,小时候的一些梦想,就好像能得到了诠释,做一辆遥控小车、做一个音乐播放器、做一个掌上游戏机,这些都能够在电子的世界里找到答案。
于是那是的我也就有了一个梦想,那就是在大学期间做一个机器人,经过不断地学习与挑战,这个梦想也就在今天得到了展现。下图就是我设计的爬行机器人。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、理论分析

由于爬行机器人是通过舵机来控制各个足之间的传动,从而实现爬行机器人移动过程的稳定。运动学的逆运算就是这样一种适合爬行机器人移动控制的算法。作为一种逆解算法,运动学的逆运算实际上就是输入坐标轴参数,得出舵机执行的角度。该算法的实现,需要以机器人的中心建立空间直角坐标系,然后将原点偏移到六个足跟部,足尖在空间直角坐标系内的轨迹坐标,就是逆解算法输入的参数,根据算法的解析,就得出了各个舵机的控制量。

通过查阅文献和相关资料,发现运动学逆运算大多是采用矩阵运算实现,计算出舵机控制角度和整个足部之间移动位置的关系。因为看的不是很懂,所以本设计进行取巧,用三角函数关系硬算出来,但最后也没用上,因为发现舵机死区和主控性能不够,理论的计算实际上达不到一个预期的效果。所以最后直接输入不同参数验证,取了一个效果看起来比较好的值。以下为相关程序。

void core_run(double x, double y, double z, int *angle)
{
	int flag[2] = {0};     		//负坐标判断标志,[0]为x轴,[1]为z轴
	double l;					//模长投影
	double l1;					//模长
	double angle0;				//小腿角1
	double angle1;				//腿连接角2
	double angle2;				//大腿角3
	double angle11;				//辅助角1
	double angle12;				//辅助角2
	double angle13;				//辅助角3
	
	if(z < 0){
		flag[1] = 1;
	}
	if(x < 0){
		flag[0] = 1;
	}
	
	l = sqrt(pow(x,2) + pow(y,2));			//进行三角变换处理
	l1 = sqrt(pow(l,2) + pow(z,2));
	angle11 = acos(  (pow(l1,2) + pow(A1,2) - pow(A2,2)) / (2*l1*A1)  );
	angle12 = acos(  l / l1  );
	angle13 = acos(  (pow(l1,2) + pow(A2,2) - pow(A1,2)) / (2*l1*A2)  );
	
	if(flag[1] == 1){
		angle12 = -angle12;
	}
	angle0 = atan(x/y);						//解算出舵机执行的弧度
	angle1 = PI/2 - angle11 - angle12;
	angle2 = angle11 + angle13;
	if(flag[0] == 1){
		angle0 = -angle0;
	}
	
	angle[0] = angle0 * (180.0/PI);			//解算出执行角度,传入数组中
	angle[1] = angle1 * (180.0/PI);
	angle[2] = angle2 * (180.0/PI);
}

三角步态是一种仿生学步态,主要是参照了多足昆虫的爬行特点。在本设计爬行机器人中,共有6足,按照逆时针方向分别以A-F命名。将这6足分为2组,分别是A、C、E和B、D、F。其中,A、C、E作为第一组足,B、D、F作为第二组足。每组足的三个端点连接在一起,就组成了两个三角形。在机器人移动时,两组足之间交替运动,第一组足抬升时,第二组足就固定在地面,起到支撑作用。此时第一组足则往前伸,体现移动过程。然后再将第一组足放下,第二组足抬升,同时整个机器人的身体前移。如此循环交替两组足之间的动作,就完成了爬行机器人的移动控制。通过三角步态实现的移动具有稳定性,这是由于三角形的结构稳定特性,而且由于两组足之间是稳定分布的,当爬行机器人移动时,不仅能够确保在任何状态下都能有三足进行支撑。足之间所承受压力也是较为平均分摊的。将爬行机器人的六个足顺序进行调换,就能够实现向六个方向的移动控制,体现了爬行机器人移动控制的灵活特性。三角步态示意如下图所示。
在这里插入图片描述

三、3D结构设计

关于3D结构设计,采用Fusion360,用Fusion360的原因就是它足够灵活,操作也比较简单,在本课题中,共设计了14个3D结构件,包括重复在内,一共打印了86个结构件。Fusion360设计界面如下图。
在这里插入图片描述
由于在大二期间有幸接触了3D打印机,产生了浓厚的兴趣,于是同年就基于开源项目自己DIY了一台3D打印机,主要就是在淘宝上买来零件,根据教程组装,给控制板烧录固件,就搭建起了人生的第一台3D打印机。关于本结构设计,也并非空穴来风,而是参考了国外的一个开源项目的3D结构设计。那么为什么要自己重新去做呢,主要原因有两个,第一就是我自己想独立完成本课题的全部设计(没有完全实现,因为时间不够,云台部分还是采用了OPENMV官方开源的结构),第二就是开源项目中的结构设计我感觉有些地方不合理(有些地方容易断裂,当然也可能和打印机精度和耗材材质有关),而且与我需要用的舵机不适配,于是我就自行设计了爬行机器人的3D结构。下图为开源项目的结构示意图。
在这里插入图片描述
而我自己设计的3D结构图,从形状上大部分参考了该项目,但在细节方面和尺寸方面做出了改动,使其能够适配国产舵机,也能满足本人的审美需求。下图为本设计的结构图。
在这里插入图片描述

四、硬件设计

关于硬件,做了两个PCB的设计。分为主控板和驱动板两块板子,两块板子之间通过2.54mm的排针进行连接。

其中驱动板主要采用贴片式的封装,通过PCA9685芯片提供16个PWM输出接口,再由主控单元引出2个PWM输出接口,完成18足的舵机驱动。驱动板也设计了2个5V电源管理模块,分别用于舵机的供电以及控制系统的供电。

主控板则主要采用直插式的封装,引出了主控STM32单片机最小系统、OLED显示屏、蓝牙模块等的接口,通过排插与驱动板的连接,体现控制特点。

硬件设计示意图如下。
在这里插入图片描述
整个设计看起来也比较简单,板子的体积也比较大,不够紧凑。布线也比较随意,主要原因还是为了求稳,毕竟是毕业设计,没有那么多时间去试错。今后也希望自己在有时间时进行改良,去实现更好地想法。

主控板

主控板采用直插封装,主控用的是STM32F103C8T6最小系统单片机,也就是市面上常见的小模块,引出了蓝牙接口,实现手机蓝牙控制;OLED接口,进行眼神动画展示;FLASH存储模块接口,存放眼神表情;MPU6050接口,保持姿态稳定;云台接口,控制两个舵机驱动摄像头云台转动;RGB灯接口,实现灯光特效。
在这里插入图片描述

驱动板

驱动板用到了贴片焊接,用的舵机驱动芯片应该是市面上中低配置的一款,主要引出了18个舵机驱动接口,2个电源管理模块,1个电源输入接口和1个主控通信接口。
在这里插入图片描述

五、软件设计

软件设计主要分三块,控制程序、机器视觉和APP设计。

控制程序

采用了KEIL5-IDE来设计STM32单片机的控制程序。本设计核心程序是一种自定义的算法,实际上也就是根据三角步态来一帧一帧的去写控制,没有太大的参考价值,但我在设计过程中也有了一些其他想法,如果能实现的话确实是一个不错的创新点,在后续过程中会加以完善。

关于思路

  1. 对PCA9685进行驱动控制,完成16路的舵机驱动控制,通过IIC通信建立该芯片与主控芯片之间的联系;
  2. 对STM32单片机的PWM输出进行配置,配置好4个输出通道,其中2个用于2足的驱动,另外2个用于驱动云台;
  3. 封装角度控制函数,输入参数为舵机编号(1-20)与舵机执行角度,输出效果是控制该编号舵机执行至该角度;
  4. 通过逆解算法与实际测试得出稳定移动的控制角度;
  5. 封装三角步态函数,分为6个不同方向的移动函数;
  6. 配置蓝牙串口函数,根据不同指令,体现不同的控制效果;
  7. 引入MPU6050,通过简单判断维持姿态稳定(后期改进换用精度更高的舵机,拟引入PID算法);
  8. 配置显示功能,分两个过程,先配置图显函数,再配置FLASH读取函数,实现眼神播放效果;
  9. 根据相关数据手册与资料,实现RGB灯光效果。

机器视觉

机器视觉功能实现了一个视频流传输到上位机显示的功能(就是直接调用一下图传库,进行点对点式的图传)。

APP设计

APP采用App Inventor组件搭载手机APP控制端。App Inventor是麻省理工学院某教授研发的一种开源安卓APP开发环境,采用的编程方式是一种图形化编程,能够快速实现安卓APP的开发,在本设计上位机中,通过调用其内部的蓝牙控件库来实现蓝牙无线通信,以安卓APP作为客户端,爬行机器人作为服务器,实现蓝牙通信过程,客户端将控制的指令上传到爬行机器人主机中,然后执行相应的移动控制功能和其它功能。其次上位机还搭载了Web浏览框,通过图传模块,可以将 OPENMV摄像头采集到的画面,实时上传到上位机中进行远程监控显示。APP界面如下图所示。
在这里插入图片描述
整个界面的图案是在网上找图抠下来的,也符合自己的审美预期。通过开关控制视频流传输开启;通过按键和选择框进行蓝牙连接;通过显示框和发送、清除按键,进行指令下发和指令查看;下方的12个按键是固定指令按键,按下就直接发相应的字符;滑动条可以控速;摇杆控制机器人移动和方向(摇杆是采用了内里的一个球控件,后期会出一期教程展开说明)。

六、结束语

本设计算是实现了自己的一个小想法,也有些遗憾,很多想到的功能都没有实现,祝愿自己后续能够更进一步。最后引用稚晖君的一句话结尾,“保持热爱,奔赴星海”。虽青春不再年少,但属于我们的天空却依旧广阔,愿我们带着雏鹰的斗志,勇敢高飞。

(本项目在后续整理好资料后开源,有兴趣的小伙伴可以多多讨论,分享心得)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/577261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”:Bw-Tree

【技术分享】万字长文图文并茂读懂高性能无锁 “B-Tree 改”&#xff1a;Bw-Tree 原文链接&#xff1a; https://mp.weixin.qq.com/s/I5TphQP__tHn6JoPcP–_w 参考文献可能需要科学上网才能下载。如果你获取不到这几篇论文&#xff0c;可以关注公众号 IT技术小密圈 回复 bw-tre…

类和对象初阶

目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 注意 1.4 总结 二、拷贝对象时的一些编译器优化 三、static成员 3.1 静态成员变量 3.1.1 引入 3.1.2 特点 3.1.3 区别 3.2 静态成员函数 3.2.1 引入 3.2.2 特点 3.2.3 例题 四、友元 4.1 友元函…

数据结构与算法·第2章【线性表】

线性结构具有以下基本特征&#xff1a; 有唯一的一个被称为首元素&#xff08;或头元素&#xff09;的元素&#xff0c;没有直接前驱&#xff1b;有唯一的一个被称为尾元素&#xff08;或尾节点&#xff09;的元素&#xff0c;没有直接后继。 数据元素之间存在一对一的线性关…

python 实现单链表

链表 链表是一种在存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过链表中的指针链接次序实现。 链表是由一系列的结点组成&#xff0c;结点可以在运行时动态生成。每个结点包含两部分&#xff1a;数据域与指针域。数据域存储数据元素&#xff0c;指针域存储下一…

Yapi内网部署[CentOS7]

mongo安装 # 下载MongoDB https://www.mongodb.com/try/download/community4.2.24 RedHat/CentOS7.0 tgz# 安装MongoDB mkdir -p /home/jpge/devp-tools/tools cd /home/jpge/devp-tools/tools wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.24.tgz…

线性代数:线性方程求解、矩阵的逆、线性组合、线性独立

本文参考www.deeplearningbook.org一书第二章2.3 Identity and Inverse Matrices 2.4 Linear Dependence and Span 本文围绕线性方程求解依次介绍矩阵的逆、线性组合、线性独立等线性代数的基础知识点。 一、线性方程 本文主要围绕求解线性方程展开&#xff0c;我们先把线性…

揭秘Redis持久化原理,探索fork与Copy-on-Write的魔法!

大家好&#xff0c;我是小米&#xff0c;今天我将和大家一起探索Redis持久化原理中的两个关键概念&#xff1a;fork和Copy-on-Write。这两个概念对于理解Redis的数据持久化机制至关重要。让我们一起来揭开这些技术的神秘面纱吧&#xff01; Redis持久化简介 在开始之前&#…

组合数学第四讲

Generating Function&#xff08;生成函数&#xff09; 这里是一个普通生成函数例子&#xff0c;生成函数一般适用于根据递推关系式求出比较复杂的通项公式的 关键点&#xff1a; 1.项可转换成G(x)-,因为生成函数规定是从0到∞的 2.,当|x|<1时&#xff0c;最终可收敛为。这里…

基础算法(六):回溯算法

前言 Hello大家好&#xff0c;停了半个多月算法学习的荔枝又变菜了&#xff0c;最近决定认认真真地重新学习回溯&#xff0c;无意间看到Carl哥的代码随想录&#xff0c;感动之余也是跟着一步步走&#xff0c;后悔上车晚了呜呜呜~~~。之前自己摸索确实有点难受&#xff0c;在这篇…

YUM安装LNMP架构配置命令与搭建论坛

LNMP架构配置命令与搭建论坛 LNMP简介安装须知安装 Nginx配置yum源yum安装nginx并查看版本号开启服务并且设为开机自启 安装 MySQL 5.7 (mariadb)移除软件包下载安装mysql安装MySQL报错问题解决方案&#xff1a; 开启服务并设为开机自启在日志文件中找出root用户的初始密码登录…

数据结构 --- 树

1、二叉树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 每个结点最多有两棵子树&#xff0c;即二叉…

CAPL(vTESTStudio) - CAPL控制RS232继电器

目录 为什么要使用CAPL控制继电器? 一、RS232继电器选择 二、继电器通信协议

AList 一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs。

一个支持多种存储&#xff0c;支持网页浏览和 WebDAV 的文件列表程序&#xff0c;由 gin 和 Solidjs 驱动。 特点 使用简单 AList 从一开始就设计为易于安装&#xff0c;并且可以在所有平台上使用。 多种存储 AList 支持多个存储提供商&#xff0c;包括本地存储、阿里云盘、O…

大数据治理入门系列:数据治理

在信息经济时代&#xff0c;数据是企业的一大关键资产。为了制定科学、有效、合理的决策&#xff0c;企业需要收集大量的数据并进行各种数据分析&#xff0c;为决策提供依据。在此过程中&#xff0c;收集数据的速度、数据的质量和可靠性、对数据的分析过程、合适的分析工具等&a…

三十四、数学知识——约数(试除法 + 约数个数 + 约数之和 + 欧几里得算法)

约数相关算法主要内容 一、基本思路1、定义2、试除法——求一个数的所有约数3、约数个数4、约数之和5、欧几里得算法——辗转相除法&#xff08;求解最大公约数&#xff09; 二、Java、C语言模板实现三、例题题解 一、基本思路 1、定义 约数&#xff1a; 约数是指一个数&…

利用百度API进行植物识别

植物识别_拍照识别植物-百度AI开放平台百度AI植物识别,支持识别超过2万种通用植物和近8千种花卉&#xff0c;接口返回植物的名称&#xff0c;并获取百科信息&#xff0c;适用于拍照识图类APP中https://ai.baidu.com/tech/imagerecognition/plant 偶然看到的&#xff0c;不过真…

STM32F103C8T6+2.4寸SPI TFT触摸屏代码+标准库 项目开发

目录 模块清单&#xff1a; 模块介绍&#xff1a; 1&#xff1a;STM32F103C8T6 2&#xff1a;2.4寸SPI TFT触摸屏 项目结果展示 2.4寸 TFT SPI显示触摸屏 2.4寸 SPI TFT 显示触摸屏代码下载链接&#xff1a; (1条消息) 2.4寸SPITFT显示触摸屏资源-CSDN文库 模块清单&#x…

Vue后台管理系统【附源码】

登录 – 完成 路由拦截 – 完成 商品管理&#xff08;增加、编辑、搜索、删除&#xff09; – 完成 角色管理&#xff08;增加、编辑、搜索、删除、权限管理&#xff09; – 完成 交易订单&#xff08;增加、编辑、搜索、删除&#xff09; – 完成 用户管理&#xff08;增加、编…

在Centos Stream 9上Docker的实操教程 - 实操准备篇

在Centos Stream 9上Docker的实操教程 - 实操准备篇 认识Docker准备Centos Stream 9安装Docker更新仓库绕不开的HelloWorld结语 认识Docker 什么都要实操了&#xff0c;你还不知道Docker是什么&#xff1f;网上关于Docker的介绍一搜一大把&#xff0c;博主就不必浪费时间去侃侃…