基于Arduino的自平衡机器人设计

news/2025/3/16 13:48:46/文章来源:https://www.cnblogs.com/linkstu/p/18774848

这是一个相对简单,视觉上有效的平衡机器人项目,只需要四个组件来制作。

自平衡机器人是一种能使自身保持平衡而不致坠落到地面的装置。它的功能是利用车轮和车身的电机轴线运动来保持平衡。有几种类型的自平衡机器人,在这个特殊的情况下,我将向你展示一种制造两轮平衡机器人的方法。实际上,这个机器人是我和我的一个学生一起做的,这是一个高中毕业设计。这是一种最简单的平衡机器人,只需要几个部件就可以制造出来。

首先,让我们解释所使用的组件及其功能。

本项目由PCBWay赞助。他们有你需要的所有服务,以最优惠的价格创建你的项目,无论是一个学校项目,还是复杂的专业项目。在PCBWay上,你可以分享你的经验,或者为你的下一个项目获得灵感。他们还以最优惠的价格提供完整的表面贴装SMT PCB组装服务,并进行ISO9001质量控制。

现在,让我们简单地解释一下它的工作原理:加速度计测量机器人相对于重力的方向,陀螺仪检测倾斜速率。Arduino使用PID(比例,积分,导数)控制器来处理来自传感器的数据。

PID控制器计算出维持机器人平衡所需的速度和方向调整。如果机器人向前倾斜,马达旋转得更快,使机器人向前移动,防止摔倒。如果它向后倾斜,马达就会使机器人向后移动以恢复平衡。当机器人检测到不平衡时,它会通过调整车轮速度、移动质心或向前或向后移动以保持其位置来进行补偿。

简单介绍一下Arduino代码。之前已经多次描述了安装代码的方法,所以现在我只关注由于所使用组件的不同特性而需要针对每种情况单独进行的修改,以及它们的放置方法。

现在是有趣的部分,即为我们构建的设备定制代码。根据组件的布局,机器人的重心会发生变化,而且每个MPU6050板都有最小的差异,需要在部分代码中进行补偿。如果我们更详细地看一下代码,我们会看到有一个地方是设置陀螺仪偏移量的。

在这部分代码中,错误被纠正在MPU6050芯片的制造过程中。对于每个单独的芯片,这些值是不同的。它们的值是使用专门为此目的制作的Arduino代码确定的,您可以在本文末尾下载它。

接下来,我们需要继续设置加速度计。在“双设定值”行中,我们需要设置一个与我们的设备相对应的值。

为了获得这个值,我们需要将机器人保持在一个理想的垂直位置,垂直于表面,并在串行监视器上读取所需的值。对我来说,大概是182。

最后,我们需要通过实验确定PID控制所需的Kp, Kd和Ki的值。

为此,我们将这三个值都设置为零。现在我们给Kp赋值并进行测试。Kp过小会使机器人摔倒。太大的Kp会使机器人疯狂地来回移动。一个好的Kp会使机器人稍微前后移动。接下来我们需要确定Kd。一个良好的Kd值将减少振荡,直到机器人几乎稳定,并将保持机器人站立。最后设置Ki。正确的Ki值将缩短机器人稳定所需的时间。我想强调的是,表面需要足够粗糙,以增加它和车轮之间的摩擦。

最后是一个简短的结论。这是一个相对简单,视觉上有效的平衡机器人项目,只需要3个组件来制作。然而,它的设置,虽然可能很耗时,但仍然是很多乐趣,试图让机器人稳定地站在它的“自己的脚”上。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scanner进阶学习

Scanner进阶使用hasNextInt(),hasNextFloat(),hasNextDouble()等方法,可用于判断输入数据的类型​ 例:判断输入的数据是否整数类型,或是否是浮点数类型 public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int i=0;float f=0.0f;System…

第三周上课习题

TempConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in [F,f]: C = (eval(TempStr[0:-1]) - 32)/1.8 print("转换后的温度是C{:.2f}".format(C)) elif TempStr[-1] in [C, c]: F = 1.8*eval(TempStr[0:-1]) + 32 print("转换…

父子组件传值-@link- 可以互相传递

@Entry@Componentstruct Parent { @State count: number = 1; build() { Column() { Column({ space: 10 }) { //父组件标题 Text(父组件).textStyle() //父组件计数器 Row({ space: 10 }) { Text(@State).textStyle() …

使用 INFINI Gateway 保护 Elasticsearch 集群之修改查询不合理参数(一)

本文将探讨如何使用 INFINI Gateway 修改查询不合理的参数,此方法同样适用于 Opensearch 和 INFINI Easysearch 。 在之前的文章中,我们介绍了如何阻断不合理的查询。有些不合理查询是本身就非常消耗资源,比如模糊查询、嵌套聚合等。还有些不合理查询是因为指定了不合理的参…

20242931 2024-2025-2 《网络攻防实践》第三周作业

20242931 2024-2025-2 《网络攻防实践》第三周作业 1. 实验内容 (1)动手实践tcpdump 使用tcpdump开源软件对在本机上访问www.baidu.com网站过程进行嗅探,回答问题:你在访问www.baidu.com网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? (2)动手实践Wir…

Android开发--Lesson02--常见的控件

一.简单空间 TextView TextView用来显示文本信息,可以在XML文件中添加并且添加其相对的样式:它的样式主要有以下内容:<TextViewandroid:id="@+id/textViewExample" <!-- 设置TextView的唯一标识符,用于在代码中引用 -->android:layout_width="wra…

AI编程:最疯狂的MCP服务器你一定要试试

我还记得我第一次听说MCP(模型上下文协议)的时候,我心想: “哈?又一个花里胡哨的缩写,这个世界已经快被这些缩写淹没了!” 但当我意识到MCP就像AI界的通用连接器——就像USB-C之于手机和笔记本电脑——我瞬间兴奋了。 再也不用折腾那些只能在某个地方工作的插件或奇怪的…

20241217实验一《Python程序设计》实验报告

20241217 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2412 姓名: 黄迅 学号:20241217 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

域自适应

信息时代产生的大量数据使机器学习技术成功地应用在许多领域。大多数机器学习技术需要满足训练集与测试集独立同分布的假设,但在实际应用中这个假设很难满足。 域适应是一种在训练集和测试集不满足独立同分布条件下的机器学习技术。一般情况下的域适应只适用于源域目标域特征空…

JDK8-时间格式化类-时区类-工具类--java进阶day07

1.时间格式化类:DateTimeFormatter1.创建方式 使用DateTimeFormatter调用ofPattern方法即可. 2.格式化方法创建好DateTimeFormatter对象后,调用format方法,将要格式化的日期对象放入即可.3.日期字符串解析 将一个日期字符串变为日期,需要用到日历类对象,调用它的parse方法…

无人机仿真环境介绍及其配置

博客地址:https://www.cnblogs.com/zylyehuo/参考 https://space.bilibili.com/393165606/channel/collectiondetail?sid=1750583&spm_id_from=333.788.0.0仿真器 VS 模拟器目录为什么要学习 ROS 发展现状课程介绍ROS 是什么 历史起源总体设计 一个目标五个特点点对点的设…

为什么 AI 在处理新闻方面如此糟糕

托马斯史密斯插画来源:Ideogram新闻流淌在我的血液里。我的日常工作是一家新闻摄影机构的负责人,而我的主网站是一个专注于旧金山湾区新闻的站点。 我与新闻内容息息相关,所以我对 AI 在处理新闻方面的糟糕表现感受尤为深刻。 哥伦比亚新闻评论(Columbia Journalism Review…