180浏览
查看: 180|回复: 11

[项目] 【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

[复制链接]
Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

我们来聊聊麦克纳姆轮。它们棒极了,充满魔力,我觉得每个人都应该在一生中尝试一次。麦克纳姆轮是一种全向轮设计,可以让陆地车辆向任何方向移动。

你会在网上找到很多DIY项目,但似乎没有一个能正确地编程。我遇到的所有项目都使用按钮来控制这些神奇的机器人,这限制了它们的运动方向。麦克纳姆轮很特别,所以你不能像普通轮子那样直接把它们装在电机上。我们在编程时必须考虑麦克纳姆轮的力学原理。

在本文中,我将向您展示如何制作自己的麦克纳姆轮机器人并使用操纵杆对其进行正确的编程。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 补给品

我使用了现成的业余爱好零件来完成这个项目。它们在任何网站上都很容易买到。如果你想省钱,可以尝试从 Banggood 或 Aliexpress 购买。如果你是学生,可以做一个精彩的演示文稿或报告,向你的学校或学院展示你将如何完成这个项目,并向他们申请资金,我相信他们会帮助你的。
Wemos mini D1
4 x 360 伺服
2 x 16340 锂离子电池
2 x 16340 电池座
4 个麦克纳姆轮
SSD1306 0.96英寸I2C OLED显示屏
穿孔板(7 x 5 厘米)
公头和母头引脚
电线
焊接设备

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 第一步:了解麦克纳姆轮的力学原理

我们不是通过机械方式控制麦克纳姆轮,而是通过改变电机转速和旋转方向来控制机器人的运动。改变电机转速和旋转方向可以产生不同方向的运动。请参考上图,红色箭头指示电机和机器人的旋转方向。我已经在视频中解释了这个概念。

想象一下一个机器人向前移动,那么作用在轮子上的所有力看起来就像这样。现在,如果我们试着找出作用在机器人上的净力,所有作用在X方向(红色标记)的力会相互抵消,因为它们大小相等,方向相反。Y方向的力保持不变,因为它们平行且方向相同。现在我们的机器人会向前移动。

利用同样的概念,我们可以找到各个方向的力,最终得到四个方程,每个轮子一个。这些方程将帮助我们控制机器人,如下所示。

左前轮 = 速度 + 平移 - 转弯;
右前轮 = 速度 - 平移 - 转弯;
LeftBackWheel = 速度 - 平移 + 转弯;
右后轮 = 速度 + 扫射 - 转弯;

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图3

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 第二步:如何控制机器人?

答案是“操纵杆”。这个神奇的设备有两个摇杆,可以让我们同时进行多个输入。我们的控制方程包含三个变量。如果使用按钮,我们需要同时按下三个按钮才能完成任何复杂的动作。而操纵杆的使用方法非常简单自然。

我编写了一个 Android 应用,其工作原理类似操纵杆,并通过 WiFi 进行通信。它有两个摇杆,左侧摇杆可以沿 X 和 Y 方向移动,而右侧摇杆只能沿 X 方向移动。

这些摇杆控制着我们控制方程中的不同变量。如果你一次移动一个摇杆,就能获得非常静态的运动,同时使用两个摇杆也能带来乐趣。

控制速度,也就是前进和后退

控制扫射,即左右滑动

控制机器人绕其几何中心转动

所有这些参数的组合将允许您在任何方向上控制机器人。您无需担心方程式,因为电机速度已在应用程序内部计算。应用程序使用这些方程式计算速度,并通过 WiFi 将其发送给机器人。

您不会在机器人的代码中看到这些方程式,因为它们是在应用程序中实现的。作为参考,方程式应该这样写。

速度=Ly;
扫射 = Lx;
转弯=Rx;
左前轮 = Ly + Lx - Rx;
右前轮 = Ly - Lx - Rx;
左后轮 = Ly - Lx + Rx;
右后轮 = Ly + Lx - Rx;
控制机器人有很多更好的方法。这是最简单的方法,因为数学很简单。我将在下一个版本中实现更好、更快的方法。请勿将本文用于任何严肃的工作。这是一个业余项目,想了解更多关于麦克纳姆轮的信息,请阅读一些研究论文。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 步骤3:组装

整个项目都是3D打印的,所有文件都可以从下面的链接下载。只有三个3D打印文件,所以组装起来很简单。请使用GrabCAD的“分解”功能查看每个部件的组装情况。

我使用 2 毫米螺丝将整个底盘连接在一起,为了将电机固定在车轮上,我设计了一个可以拧到车轮上的轮毂。伺服喇叭必须用胶水粘在轮毂上才能确保连接牢固。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图3

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图4

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 步骤4:如何连接电机和车轮

我们将使用 360 伺服电机,因为它们接线方便,而且 Wemos 没有足够的端口容纳两个电机驱动器。由于壁很薄,所以拧螺丝时要小心,不要用力过猛。我附上了模型的原始 CAD 文件,您可以根据需要进行修改。

您不能随意将轮子安装到任意位置。麦克纳姆轮必须以固定方式连接。请参考图。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 步骤5:电路图

我使用的是 5x7cm 的通用穿孔板。我们有两块电池,一块给 Wemos 电机,一块给舵机。它们没有连接在一起,而是分别供电,但你必须连接两块电池的地线才能组成完整的电路,否则它将无法工作。

            “为了安全起见,在连接到电脑之前请切断所有电源”

如果您愿意,可以使用任何其他 ESP 板,只需更改代码中的引脚即可。该程序应适用于大多数 ESP 板。

请参考上图。我在图中和代码中都标注了伺服电机。

Fl = 左前轮

Fr = 字体右轮

Bl = 左后轮

Br = 右后轮

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图3

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

本帖最后由 驴友花雕 于 2025-6-1 18:07 编辑

## 步骤6:代码

我们将使用 Arduino 来编程机器人。默认情况下,Arduino 中不会显示 Wemos mini。我们需要将其添加到 Arduino IDE。请参阅这篇关于 如何将 ESP32 添加到 Arduino IDE 的文章。

在编译代码之前安装这些库。

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;">#include <ESP8266WiFi.h>
  2. #include <WiFiUdp.h>
  3. #include <Servo.h>
  4. #include <SPI.h>
  5. #include <Wire.h>
  6. #include <Adafruit_GFX.h>
  7. #include <Adafruit_SSD1306.h>   </pre>
复制代码


伺服引脚根据此连接伺服器,也参考电路图。

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;"> fl.attach(15);//d8-Forward left
  2. fr.attach(D7);//Forward right
  3. bl.attach(D6);//Back left
  4. br.attach(D5);//Back right </pre>
复制代码


根据您的 WiFi 热点更改 WiFi 名称和密码。机器人和手机应连接到同一热点。

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;">// Set WiFi credentials
  2. #define WIFI_SSID "SINGTEL-42E6" //Wifi name
  3. #define WIFI_PASS "huiweimaev" //Wifi password
  4. #define UDP_PORT 4210 //UDP port name</pre>
复制代码


机器人从应用程序接收每个轮子的命令,然后将值映射到伺服器。

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;">flss=map(sParams[0].toInt() ,-99,99,1000,2000);//Forward left wheel speed
  2. frs=map(sParams[1].toInt() ,-99,99,1000,2000);//Forward right wheel speed
  3. bls=map(sParams[2].toInt() ,-99,99,1000,2000);//Back left speed
  4. brs=map(sParams[3].toInt() ,-99,99,1000,2000);//Back right speed</pre>
复制代码


此函数调用各种眼睛动画。不要被眼睛部分吓到,它们只是我们在转换图像后得到的随机数。显示在这里没有任何实际用途,如果你预算有限,可以忽略它。

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;">void eyeMoves(){
  2. blink_eye();
  3. lookright();lookright();
  4. blink_eye();
  5. lookleft();lookleft();
  6. }</pre>
复制代码

通常,您会看到这些类型的机器人有前进、后退、左转和右转四个功能,但我们只有两个,一个用于停止电机,另一个用于控制所有动作。

motor_forward() 这个名字其实不太好,因为它不只控制前进方向,而是通过一个函数控制所有方向的运动,因为我们把速度值作为参数传递。我懒得改它了 :)

  1. <pre class="ql-syntax" spellcheck="false" style="padding: 5px 10px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 13px; color: rgb(248, 248, 242); border-radius: 3px; margin-top: 5px; margin-bottom: 5px; line-height: 20px; word-break: break-all; background-color: rgb(35, 36, 31); border: 1px solid rgb(211, 211, 211); max-width: 100%; counter-reset: list-1 0 list-2 0 list-3 0 list-4 0 list-5 0 list-6 0 list-7 0 list-8 0 list-9 0; max-height: 500px; overflow: hidden auto;">void motor_forward(int flss,int frs,int bls,int brs)
  2. {
  3.   fl.writeMicroseconds(flss);
  4.   fr.writeMicroseconds(frs);
  5.   bl.writeMicroseconds(bls);
  6.   br.writeMicroseconds(brs);
  7. }
  8. void motor_stop()
  9. {
  10.   fl.writeMicroseconds(1500);
  11.   fr.writeMicroseconds(1500);
  12.   bl.writeMicroseconds(1500);
  13.   br.writeMicroseconds(1500);
  14.   eyeMoves();  
  15.    }</pre>
复制代码


您可能会在代码中看到一些未使用的内容。如果机器人仍然运行良好,请将其删除并重新编译代码。



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 步骤7:如何使用操纵杆

安卓应用程序可以从Github下载。安装后,您将看到如上所示的界面。机器人和手机都应该连接到同一个 WiFi 热点。

要连接到机器人,您必须输入机器人的 IP 地址和 UDP 端口。要获取机器人的 IP 地址,请将代码上传到 Wemos mini。在 Wemos mini 连接到电脑后,依次点击“工具”>“串行监视器”打开串行监视器,将波特率更改为 115200,并按下 Wemos 上的重置按钮。您应该会在串行监视器上看到一些文本。如果机器人连接成功,您应该会看到 IP 地址和 UDP 端口。记下这些信息并将其输入到应用程序中。现在您应该可以控制机器人了。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图3

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

## 步骤8:我们完成了

大功告成
耶,你造了一个机器人。现在,一切应该都正常了。同时使用两个摇杆,让机器人做出一些疯狂的动作。屏幕是可选的,它只是用来显示眼睛的。眼睛实际上是像 Vector 机器人一样动态的。我忘了录制这部分,后来剪辑视频的时候才发现 :(

别担心,通过制作这个项目我已经学到了很多东西,下一个版本将会更加智能,并具有许多很酷的功能。

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图2



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 7 天前

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程

附录
项目链接:https://benchrobotics.com/roboti ... ogram-it-correctly/
项目作者:印度  shubham_bhatt
视频教程(4分钟):https://www.youtube.com/watch?v=02XoeB-G1BY
3D 文件:https://grabcad.com/library/mecanum-wheel-robot-3d-printed-1
项目代码:https://content.instructables.co ... F278495L5ZBZ6GL.ino
安卓应用程序:https://github.com/sastejugaad/Deskbot-Mecanum-Wheel-robo

【Arduino 动手做】如何制作麦克纳姆轮机器人并正确编程图1

附件.zip

18.77 MB, 下载次数: 26

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail