×

通过以太网控制的机械臂

消耗积分:0 | 格式:zip | 大小:0.29 MB | 2022-11-03

维生素B2

分享资料个

描述

介绍

我喜欢机器人手臂。我喜欢你只需要一些简单的机械部件、一些伺服器或电机、一个好的软件,你就可以获得一个不仅壮观有趣而且真正有用的设备。我想建立一个,因为我有一个我非常喜欢的机器人课程。

当你建造一个机械臂时,你可以学到很多东西,所以我认为这是一个很好的中级项目,可以加深你在机器人方面的知识。开始吧!

机械臂

你可以从大约 20 美元购买机器人手臂。为了进行实验,我想从更便宜的开始。稍后我将建造或购买更强大的机器人手臂,但现在我将在Banggood 制作这款25 美元的 DIY 机器人手臂。

这是一个 4DoF(自由度)机械臂,其中 3 个伺服器用于移动,一个用于执行器(我在项目中将其称为夹具)。这意味着夹具可以移动到特定区域的任何位置,但其角度不能改变。这是一个很大的限制,但现在还可以,它仍然适用于很多事情。

DIY 套件带有 4 个伺服器,因此实际上除了控制器之外,您还可以获得构建机器人手臂的每个组件。这些伺服器还不错,但我更喜欢这些:

这些伺服系统比蓝色的伺服系统快,并且使用金属齿轮而不是塑料。

机器人零件有 4 个塑料片。您必须从这些表中删除零件。

 
poYBAGNiUYiAB8rhAAncu09Sc98365.jpg
组装机械臂
 

由一堆零件组成的机械臂套件。我建议您观看以下视频。在这段视频中,一个俄罗斯人正在建造相同类型的机械臂。建筑部分于7:43开始。

 

我在包装上获得了有关如何构建机械臂的链接,但图像和说明的质量都非常低。那个视频好多了 可能你可以弄清楚什么是什么,但如果你这样做,你最终会陷入组装、拆卸、重新组装的几乎无限循环。

插入舵机时要非常小心。当您拧紧螺丝时,这种塑料的设计很容易折断。螺钉的最佳紧固度对机器人的其他部分也很重要。把它们弄得太紧,你就不能用伺服系统移动机器人手臂的各个部分。

经过一番搭建后,您将拥有自己的机械臂。

 
poYBAGNiUZWAbLhiAAqgBB-CNmg389.jpg
 

定位伺服系统有足够长的电缆,但夹具需要更长的电缆。我拆开了那个伺服器,拆掉了旧电缆,我使用了至少两倍长的电缆。

好吧,机器人手臂已经准备好了,但很可能你想以某种方式控制它。为此我需要一个微控制器,因此我选择了我的Arduino 101来完成这项工作。

 
poYBAGNiUZeAP0LSAABXpagkdAY172.jpg
Arduino 101
 

它是唯一使用英特尔微控制器(英特尔居里)的官方 Arduino 板。它具有内置陀螺仪和加速度计。它也有蓝牙,所以它让我有可能在未来通过 BLE 控制机器人。该板的另一个非常有用的功能是串行通信的工作方式。与大多数 Arduino 不同,USB 串行和引脚 1 和 0(TX 和 RX)上的 UART 并不相同。它有它的好处,比如当我重新编程 Arduino 时,我不必从引脚 0 和 1 断开任何其他通信电路。它也可用于调试目的。

如果你想使用 USB 端口的串口,那么你必须使用“Serial”,如果你想使用 GPIO0 和 GPIO1 引脚,那么你有“Serial1”

 
pYYBAGNiUZqAGgujAADsebBcjp0234.png
 

Arduino 101 有 4 个支持 PWM 的 GPIO(GPIO3、GPIO5、GPIO6 和 GPIO9),我用它们来控制舵机。

沟通

我的机械臂可以通过串口进行控制(具体为 Serial1)。为此,我使用了最新的通信模块WIZ750SR

 
poYBAGNiUbOAeyE3AA68aJUpYkw989.jpg
WIZ750SR
 

这是一个带有 Cortex-M0 MCU 的小型以太网模块。它的基本功能是串行转以太网模块,但您可以轻松地重新编程模块以满足您的需求。如果你愿意,你可以把这个板变成一个 I2C 到以太网板。

一个非常酷的功能是板载 TCP 服务器(或客户端)。使用 TCP 服务器,您可以远程控制 Arduino,就像您通过 USB 串行所做的一样,但可以在世界任何地方!在 Arduino 方面,它是完全透明的。您无需在草图中添加任何额外代码即可使用此模块。

 

 
pYYBAGNiUdSAKtkiABHcjhtt7Pc728.jpg
WIZ750SR 在其评估板上
 

 

我还有一个 WIZ750SR-TTL-EVB 评估板。我可以为 WIZ750SR 供电并有一个调试 USB 端口,但除了一些早期的实验外,我没有使用它。

 
poYBAGNiUdiAHa9KAADaPoTnnag839.png
WIZ750SR 的引脚排列
 

Arduino 101 和 WIZ750SR 都使用 3.3V,因此我不必对 TX 和 RX 引脚使用电平转换。Arduino 还通过其电源为以太网模块供电。该电路非常简单,您可以在本项目的原理图部分找到它。舵机有自己的 5V 电源。

 
pYYBAGNiUfuAAosBABCjy2B1Fm8771.jpg
 

设置模块

要使用此板,您必须先对其进行配置。我不会重新记录这部分,因为 WIZnet 的人已经在这里完成了,你可以确定你总是在那里获得最新的文档。

他们的文档很棒,但我有一些值得了解的信息,并且我有一些(已解决的)问题值得分享。

首先,您可以从评估板的 USB 端口为开发板供电,但除此之外,此端口主要用于调试和刷写。我相信您无法使用 USB 端口与 WIZ750SR 的 TCP 服务器通信,但如果您连接到此 COM 端口,您将收到调试信息。这让我一开始有些困惑,因为我不知道会发生什么。

 
poYBAGNiUgGAUeagAAM4KlRnWkI071.jpg
用跳线短接 RX TX 引脚,以测试与回波的连接
 

其次,如果 WIZ750SR 连接到您的网络时蓝色 LED 亮起,那么您的板应该正常工作,继续使用配置工具,它应该找到板。

当我尝试在配置工具中搜索设备时,我最大的问题发生了。第一次它工作得很好,但后来我没有时间,所以我停在那里。两周后,我再次尝试执行此操作,但在多个操作系统和多个网络上的计算机下再也找不到板子了。

我使用最新固件通过评估板的调试 USB 端口进行了重新刷新,并且它工作正常。我的 Windows PC 仍然找不到它,但 Ubuntu 下的 Python 版本可以。我不确定是什么问题,但这些步骤最终解决了我的问题。成功配置 WIZ750SR 后,我的 Windows PC 也可以再次找到它,所以我继续工作。

正如我所读到的,带有虚拟网络适配器调用的虚拟机也会弄乱搜索,所以如果你在搜索时遇到问题,你应该看看。

测试 TCP 通信的一个很好的工具是NetCat 使用此软件,您可以连接到 WIZ750SR 上的 TCP 服务器。安装 NetCat 后,使用此命令进行连接:

nc [tcp_server_ip] [tcp_server_port]  

之后,您可以直接从 WIZ750SR 发送和接收数据。我经常使用这个工具。

从 A 移动到 B

要移动机械臂,您必须告诉控制器您想要什么。最简单的方法是直接更新所有舵机的角度。更新关节角度可以通过一些试验和错误来完成,它实际上可以很好地工作。

琐事:使用关节角度控制机器人手臂存在一个问题:很难找到特定 XYZ 坐标的最佳关节角度,以及可选的 Roll、Pitch 和 Yaw 角度(世界坐标)。从关节角度和线段长度获取世界坐标是一个非常简单的计算,但从世界坐标获取关节角度是一个复杂得多的过程。一种称为逆运动学的解决方案就是这样做的工具。

在我的下一个机器人手臂项目中,我将使用逆运动学来控制具有世界坐标的机器人手臂,但现在我将仅使用关节角度来控制机器人。

 
pYYBAGNiUhyAauP_AA5WzZCQ9vM899.jpg
 

系统的速度是这里的一个关键点。伺服系统非常快,但它们仍然需要时间才能到达接收到的位置。另一方面,跳线不喜欢快速移动,所以我不得不放慢速度。无论是在硬件部分还是软件部分。

我通过为系统创建路径计算并插入延迟来做到这一点。当您为机器人手臂发送新的关节角度时,您必须提供一个额外的参数:速度(mDelay)。基本上,您是在告诉机械臂控制器循环的最小步进时间。路径计算器将计算每个定位伺服系统的可选步长。这意味着所有舵机将在大约同一时间达到其目标,并且速度取决于延迟。结果是每次都非常漂亮和平滑的线性运动。

效应器以不同的方式工作。基本上它只能有打开或关闭(具有3个不同级别的关闭强度)状态,没有平滑过渡。显然你会想尽快抓住物体,同时移动应该是平滑和漂亮的。

该系统目前有两种类型的命令。这是他们两个的示例:

  • G 1 --> 轻轻合上夹具。0 表示打开
  • A 10 130 120 110 --> 以 10 毫秒的步进时间、130º 上关节角度​​、120º 下关节角度和 110º 基础旋转器角度移动机器人手臂。

用于远程控制的 Android 应用程序

好的,所以此时我可以从世界任何地方控制机械臂,但我必须手动编写每个新命令。这种方式并不好玩。我需要一种更加用户友好的方式来控制机械臂,所以我制作了一个 Android 应用程序来做到这一点。

 

该应用程序有一个 TCP 客户端,因此它可以直接连接到 WIZ750SR 的 TCP 服务器。机械臂不存储旧动作和未来动作的图。它只知道当前的目标位置。这意味着应用程序不仅将整个运动图发送到机械臂,而且会根据位置反馈定期向机械臂发送新位置。如果您关闭应用程序或断开与 WIZ750SR 的连接,则机械臂将在到达最后接收到的位置后立即停止移动。

连接到机械臂后,您将进入配置屏幕。它包含 3 页。第一个是 Run(稍后会详细介绍),第二个是 Init,第三个是 Loop。Init 和 Loop 基本相同,它们唯一的区别是它们保存位置的位置。

 
pYYBAGNiUiGAfjGxAAD59y6zHqw754.png
在初始化页面上配置屏幕
 

除了保存按钮外,屏幕还包含 4 个搜索栏和一个抓手按钮。这些滑块用于设置移动的位置和速度,而夹具按钮用于打开或关闭效应器。所有更改都是瞬时的,因此您会立即看到机器人手臂上的新位置,但是您必须单击保存按钮才能将其添加到绘图中。这是一个简短的演示:

 

如果同时更改夹具状态和机械臂位置,则会将其保存为两个不同的命令。首先是夹具命令,然后是位置命令。

 
poYBAGNiUiOAWYwKAADovEkTMUE066.png
带有 init 和 loop 块的示例控制图
 

如您所料,情节的运行将从 init 开始。初始化和循环就像 Arduino 的设置和循环功能一样工作。Init 适用于以后不会重复的动作。当初始化命令完成后,循环命令将随之而来。循环命令将永远重复,或者至少在您停止绘图之前重复。如果您不需要循环或初始化,则只需将该字段留空。

这些字段是 EditText 字段,这意味着您可以轻松地编辑或删除它们的内容。如果您不想使用滑块,您可以手动编写命令。您也可以复制和粘贴该图。该应用程序将记住您运行的最后一个绘图以供以后使用。

“配置”下的第一行用作测试的视觉反馈。左侧部分显示机器人手臂的最新目标位置(S - 发送),而右侧字段是它的当前位置(R - 接收)。只要目标和当前位置相同,应用程序就会向机械臂发送一个新的目标位置。

Received command explanation:
5 0 100 116 60 --> Speed: 5, Gripper: open (0), upper joint angle: 100, lower joint angle: 116, base rotator angle: 60

 

如您所见,当只有 init 时,机械臂在执行完 init 命令后立即停止。

使用我的应用程序,您可以做很多事情,但未来还有很多改进的可能性。我计划在图中使用函数、条件控制、带参数的循环等。

 

如果你想构建一个类似的机器人,你可以在这个项目的代码段中找到 Arduino 代码和机器人手臂控制器应用程序。

结果

我同时使用了 init 和 loop 命令,它允许我执行一些中等复杂的任务。这是一个关于我的机器人手臂如何设置一些橡皮鸭(init)然后开始一个接一个地移动它们的视频,永远(循环)。

 

正如您所看到的,如果您考虑到这是一个非常便宜的机械臂,具有严重的硬件相关限制,运动非常流畅、连续和准确。

结论

我的软件运行得很好,将来我一定会努力改进这个机械臂,或者我会建造一个更先进的。我实现了我为这个项目计划的一切,没有任何严重的阻塞问题。

Arduino 101 非常适合这个用途。该板的唯一限制是仅有 4 个支持 PWM 的 GPIO。如果我将来构建一个自由度更高的新机械臂可能会成为问题,但是单独的 USB 串行和 GPIO 串行在开发过程中非常有用,并且该板还可以提供大量计算能力。

我认为 Android 应用程序是个好主意,但是我必须使它更健壮、用户友好并增加其功能。目前它是一个 alpha 版本。

WIZ750SR 是一个非常好的惊喜。我担心这块板会出现更多问题,但在配置之后,它工作得很好。它是完全透明的,我对此没有任何问题。这是一个非常易于使用的设备,也是我曾经与我的任何微控制器一起使用过的最好的以太网模块。

使用机械臂工作非常有趣,所以我一定会更多地了解它,然后与您分享我的知识!感谢您的阅读!

 
 
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !