0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何创建FPGA控制的机器人手臂

OpenFPGA 来源:OpenFPGA 2023-10-24 17:15 次阅读

FPGA/SoC控制机械

机器人技术处于工业 4.0、人工智能和边缘革命的前沿。让我们看看如何创建 FPGA 控制的机器人手臂。

介绍

机器人技术与人工智能和机器学习一起处于工业 4.0 和边缘革命的最前沿。

因此,我认为创建一个基础机器人手臂项目会很有趣,我们可以回过头来添加几个功能,例如:

逆运动学 - 确定末端执行器的位置。

AI / ML - 操作期间的对象分类。

网络控制——实现边缘远程控制。

此示例将使用一个机器人手臂,该机器人手臂在 Zynq SoC 的控制六个伺服系统。可以使用简单的软件界面或使用两个操纵杆进行直接控制。

伺服控制

我们需要做的第一件事是弄清楚如何控制伺服位置。伺服电机是最简单的驱动电机之一,也是机器人技术的理想选择,因为只要我们保持相同的驱动信号,它们就能保持相对位置。

那么伺服的驱动信号是什么呢?我们使用的同类伺服系统中的大多数都使用 60Hz PWM 波形。在 60Hz 波形的 16.66 ms 周期中,信号将在 0.5 ms 到 2.5 ms 之间为高电平。信号的持续时间将驱动伺服器在 0 到 180 度之间运动。

0.5 ms 脉冲驱动 0 度位置,而 2.5 ms 脉冲将驱动 180 度位置。因此,可以通过将信号驱动为 1.5 ms 脉冲来维持 90 度。

因此,增加或减少脉冲13.9 us宽度会使舵机移动 1 度。

49b07e52-7246-11ee-939d-92fbcf53809c.png

接下来要解决的是如何生成驱动信号,PWM 扩展板(上图)使用四个 8 位寄存器来驱动每个 PWM 信号。

on 寄存器定义信号变高的计数,off 寄存器定义信号变低的计数。

因此,我们可以将开启时间设置为 0,然后定义关闭信号的计数,以获得所需的信号宽度。

Vivado 构建

49bc9a66-7246-11ee-939d-92fbcf53809c.png

Zynq PS - 这是 Zynq 处理系统

AXI IIC - 在 PL 中实现的 I2C 接口

一旦完成了PL设计,我们就可以构建设计并将其导出到软件。

软件设计

我们将在软件中开发大部分应用程序。由于我们希望在多种模式下使用它,并在将来进行升级时使用它,因此我们需要一种模块化方法。

因此,为每个关节开发了一个可以根据需要调用和使用的函数。每个关节都能够接收无符号的 8 位值,然后将该 8 位值与 90 度 (1.5 ms) 脉冲宽度相加或相减,以获得所需的角度。

我这样做有几个原因:

单个 RS232 字节可以包含所需的电机位置。

从操纵杆读取的值也是 8 位。

因此,我们需要确保操纵杆和手臂之间的运动对齐。

两个操纵杆中,第一个连接到 JA,第二个连接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。

JA 当沿 X 方向移动时,将向前或向后移动手臂;当沿 Y 方向移动时,它将上下移动手臂。

49c72eea-7246-11ee-939d-92fbcf53809c.png49d6e5c4-7246-11ee-939d-92fbcf53809c.png

JB 在 X 方向移动时会旋转手腕,在 Y 方向移动时会上下移动手腕。

49e1f356-7246-11ee-939d-92fbcf53809c.png49ee9aca-7246-11ee-939d-92fbcf53809c.png

每个移动函数的代码都非常相似,并且可以在后面提供的代码找到,但是,下面提供了向上向下函数以供参考

voidup_dwn(u8YData){
SendBuffer[0]=0x0A;
SendBuffer[1]=0x00;
XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP);
SendBuffer[0]=0x0B;
SendBuffer[1]=0x00;
XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP);
SendBuffer[0]=0x0C;
u16signal;
if(YData< 128 ){
  signal = 122 + (YData * 1.91);
 }
 else if (YData == 128){
  signal = 369;
 }
 else{
  signal = 369 + ((YData - 128) * 1.91);
 }
 u8 cent_l_off, cent_h_off;
 cent_l_off = (u8)signal;
 cent_h_off = (u8) (signal>>8);
SendBuffer[1]=cent_l_off;
XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP);
SendBuffer[0]=0x0D;
SendBuffer[1]=cent_h_off;
XIic_Send(iic.BaseAddress,IIC_SLAVE_ADDR,(u8*)&SendBuffer,sizeof(SendBuffer),XIIC_STOP);
}

软件应用程序结构的其余部分是:

初始化 PWM 扩展板和 Pmod 操纵杆。

对手臂进行自检并将所有伺服系统定位在 90 度。

通过 RS232 接收命令或来自操纵杆的命令。

当然,如果我们希望在命令中进行硬编码来执行重复任务,我们也可以。

初步测试

一旦 Vivado 构建和初始软件可用,下一步就是确保软件能够正确移动伺服系统。

当移动操纵杆时,可以使用示波器测量 PWM 信号。

随着操纵杆的移动,脉冲宽度逐渐从 0.5 ms 变为 2.5 ms。

49fb8514-7246-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

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

    关注

    1602

    文章

    21320

    浏览量

    593194
  • 机器人
    +关注

    关注

    206

    文章

    27033

    浏览量

    201400
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230600
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130559

原文标题:FPGA/SoC控制机械臂

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32的医疗康复机器人手臂控制系统

    器设计的医疗康复机器人手臂控制系统,具有杰出的功耗控制和电机控制的高级定时器,能产生3对可配置并互补输出的PWM信号。通过在Simulink上建立双闭环PID算法模型,得到合适的PID
    发表于 08-22 09:31

    以ARM为传感器 自动跟踪机器人手臂相机位置

    机器人手臂能够到达一个狭小的空间或拾取一个精致的物体之前,机器人需要精确地知道它的手在哪里。卡内基梅隆大学机器人研究所的研究人员已经证明,连接到机器人手上的相机可以快速
    发表于 12-30 14:33 1855次阅读

    机器人手臂5种不同的运动组合

    一般机器人手臂有3个自由度,即手臂的伸缩、左右回转和升降 (或俯仰)运动。手臂回转和升降运动是通过机座的立柱实现的,立柱的横向移动即为手臂的横移。
    的头像 发表于 04-18 09:48 1.6w次阅读
    <b class='flag-5'>机器人手臂</b>5种不同的运动组合

    关于蓝牙控制Atmel制造的机器人手臂的介绍

    蓝牙控制并且指导机器人手臂动作
    的头像 发表于 07-09 03:22 3316次阅读

    亚马逊用机器人手臂来分拣投递物品已获专利

    据外媒消息,亚马逊已经获得了2015年首次申请的专利,该专利描述的是用机器人手臂来分拣投递物品。
    发表于 09-13 09:10 1265次阅读

    首款无创脑控机器人手臂诞生

    来自卡内基梅隆大学与明尼苏达大学的研究人员日前利用无创的脑机接口(BCI)技术,成功开发出第一款由大脑控制机器人手臂,具有连续跟踪计算机光标的能力。
    发表于 06-28 09:46 833次阅读

    机器人手臂的典型机构有哪些

    机器人手臂的伸缩、横向移动均属于直线运动。
    发表于 07-08 11:42 6w次阅读
    <b class='flag-5'>机器人手臂</b>的典型机构有哪些

    怎样使用Android手机的蓝牙控制机器人手臂

    在这个项目中,我将向您展示如何构建Arduino&amp; amp;使用Android手机的蓝牙控制机器人手臂。该机器人手臂可以在手动模式下操作,也可以在全自动模式下进行编程。
    的头像 发表于 07-29 09:11 7884次阅读

    如何用手臂控制一个DOF机器人手臂

    我们使用PVC管和电线套管制作一个自由度(DOF)机器人手臂。用于弯头联合我们使用一个伺服电机。伺服连接到Pin-9的Arduino板。
    的头像 发表于 08-22 16:48 2878次阅读
    如何用<b class='flag-5'>手臂</b><b class='flag-5'>控制</b>一个DOF<b class='flag-5'>机器人手臂</b>

    Hibot机器人手臂Float Arm可用于哪些应用环境

    能代替“脏乱、危险、严重”的工作的机器人手臂“Float Arm”
    的头像 发表于 04-20 16:06 4987次阅读

    Arduino与树莓派打造Chatbot语音控制机器人手臂

    在网上有许多关于制作机器人手臂的项目,但他们都有类似的控制方式,我感觉缺少了一些乐趣!所以我们决定制作一个可以使用聊天机器人控制机器人手臂
    发表于 03-16 11:47 30次下载
    Arduino与树莓派打造Chatbot语音<b class='flag-5'>控制</b><b class='flag-5'>机器人手臂</b>

    机器人手臂使用哪种型号的泰和承比较合适

    机器人手臂的伸缩、横向移动均属于直线运动。实现手臂往复直线运动的机构形式比较多,常用的有活塞油(气)缸、齿轮齿条机构、丝杠螺母机构以及连杆机构等。由于活塞油(气)缸的体积小、重量轻,因而在机器人
    发表于 03-17 17:16 418次阅读

    Arduino机器人手臂

    方案介绍MARK 1是可编程的Arduino机器人手臂。但是,还不止这些,该机械臂可以由手势控制。硬件部件:Arduino UNO    ×    1个    伺服马达MG996R×    6    5V电池组×    1个    PCA9685具有I2C接口的8通道8W
    发表于 12-30 14:42 3次下载

    用于Arduino Due的DIY Braccio机器人手臂护罩

    电子发烧友网站提供《用于Arduino Due的DIY Braccio机器人手臂护罩.zip》资料免费下载
    发表于 06-14 15:07 0次下载
    用于Arduino Due的DIY Braccio<b class='flag-5'>机器人手臂</b>护罩

    如何创建FPGA控制机器人手臂

    机器人技术处于工业 4.0、人工智能和边缘革命的前沿。让我们看看如何创建 FPGA 控制机器人手臂
    的头像 发表于 10-24 17:26 993次阅读
    如何<b class='flag-5'>创建</b><b class='flag-5'>FPGA</b><b class='flag-5'>控制</b>的<b class='flag-5'>机器人手臂</b>?