机器人技术处于工业 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 度。
接下来要解决的是如何生成驱动信号,PWM 扩展板(上图)使用四个 8 位寄存器来驱动每个 PWM 信号。
on 寄存器定义信号变高的计数,off 寄存器定义信号变低的计数。
因此,我们可以将开启时间设置为 0,然后定义关闭信号的计数,以获得所需的信号宽度。
Vivado 构建
Zynq PS - 这是 Zynq 处理系统
一旦完成了PL设计,我们就可以构建设计并将其导出到软件。
软件设计
我们将在软件中开发大部分应用程序。由于我们希望在多种模式下使用它,并在将来进行升级时使用它,因此我们需要一种模块化方法。
因此,为每个关节开发了一个可以根据需要调用和使用的函数。每个关节都能够接收无符号的 8 位值,然后将该 8 位值与 90 度 (1.5 ms) 脉冲宽度相加或相减,以获得所需的角度。
我这样做有几个原因:
从操纵杆读取的值也是 8 位。
因此,我们需要确保操纵杆和手臂之间的运动对齐。
两个操纵杆中,第一个连接到 JA,第二个连接到 JB(JA和JB是PMOD接口,就是普通的GPIO)。
JA 当沿 X 方向移动时,将向前或向后移动手臂;当沿 Y 方向移动时,它将上下移动手臂。
JB 在 X 方向移动时会旋转手腕,在 Y 方向移动时会上下移动手腕。
每个移动函数的代码都非常相似,并且可以在后面提供的代码找到,但是,下面提供了向上向下函数以供参考
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(YData128?){ ??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。
审核编辑:汤梓红
-
FPGA
+关注
关注
1646文章
22069浏览量
619711 -
机器人
+关注
关注
213文章
29829浏览量
213547 -
人工智能
+关注
关注
1809文章
49151浏览量
250612 -
机器学习
+关注
关注
66文章
8510浏览量
134844
原文标题:FPGA/SoC控制机械臂
文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
STM32的医疗康复机器人手臂控制系统
用意念控制的植入式机器人手臂
以ARM为传感器 自动跟踪机器人手臂相机位置
怎样使用Android手机的蓝牙控制机器人手臂
在未来机器人手臂将可以替代人类的双手
Arduino与树莓派打造Chatbot语音控制机器人手臂

机器人手臂使用哪种型号的泰和承比较合适
Arduino机器人手臂
用于Arduino Due的DIY Braccio机器人手臂护罩

评论