码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 机械臂速成小指南(十九):机械臂的电路板抓取实验


    👨‍🏫🥰🥳需要机械臂相关资源的同学可以在我的CSDN主页中找到哦🤖😽🦄

    指南目录📖:

    🎉🎉机械臂速成小指南(零点五):机械臂相关资源🎉🎉

    机械臂速成小指南(零):指南主要内容及分析方法

    机械臂速成小指南(一):机械臂发展概况

    机械臂速成小指南(二):机械臂的应用

    机械臂速成小指南(三):机械臂的机械结构

    机械臂速成小指南(四):机械臂关键部件之减速机

    机械臂速成小指南(五):末端执行器

    机械臂速成小指南(六):步进电机驱动器

    机械臂速成小指南(七):机械臂位姿的描述方法

    机械臂速成小指南(八):运动学建模(标准DH法)

    机械臂速成小指南(九):正运动学分析

    机械臂速成小指南(十):可达工作空间

    机械臂速成小指南(十一):坐标系的标准命名

    机械臂速成小指南(十二):逆运动学分析

    机械臂速成小指南(十三):轨迹规划概述

    机械臂速成小指南(十四):多项式插值轨迹规划

    机械臂速成小指南(十五):线性规划

    机械臂速成小指南(十六):带抛物线过渡的线性规划

    机械臂速成小指南(十七):直线规划 

    机械臂速成小指南(十八):圆弧规划

    机械臂速成小指南(十九):机械臂的电路板抓取实验

    机械臂速成小指南(二十):机械臂的位姿重复性实验

    机械臂速成小指南(二十一):几何雅可比矩阵

    机械臂速成小指南(二十二):机械臂逆运动学的数值解方法

    机械臂速成小指南(二十三):Paul方法求解机械臂运动学逆解(含matlab代码) 

    🦾🌏🪐以下为正文🦾🌏🪐

    六自由度机械臂上位机python代码(带详细注释,含正逆运动学及轨迹规划等)icon-default.png?t=N7T8https://download.csdn.net/download/m0_53966219/87521956?spm=1001.2014.3001.5503六自由度机械臂下位机代码及pcb设计icon-default.png?t=N7T8https://download.csdn.net/download/m0_53966219/88480657?spm=1001.2014.3001.5503

            在设计好六自由度机械臂的控制程序(包含上位机及下位机)后,我们需要通过实验来验证机械臂的精度与可行性。

            本篇文章通过设计电路板抓取实验来验证机械臂作业的可行性。严格来说这个实验设计的没有什么科学依据,仅供参考。

    一、上位机设计

            控制机械臂时,使用由Python编写的上位机(GUI编程使用Python内置的图形开发界面库Tkinter)。

    1.GUI界面

            共分为三个界面:关节校准界面、主控界面及轨迹点寄存器界面。

    关节校准界面主控界面轨迹点寄存器界面

            我们所使用的六自由度机械臂以开环形式运行,无法获取各关节期望角度与当前实际角度的差值。因此,在机械臂作业前,需对所有关节进行校准。

            上位机需同时满足对关节的单独控制及对末端执行器的直接控制,因此设计主控界面。其中,左下方为命令行显示区域。

            当机械臂所执行的任务需要定义多个轨迹点时,可将轨迹点的位置坐标与RPY角值储存于该寄存器中。

    2.通信协议

            前6位为各关节需旋转到的期望角度。第7位用于调节机械臂各关节的旋转速度。第8、9位用于设定运动中加速段的时长与加速度。第10、11位用于设定运动中减速段的时长与减速度。最后1位为判断程序是否出现错误的标识符,若目标点位于可达工作空间内则置为0,下位机执行程序语句。

    3.命令说明

    注:该部分在资源中的上位机源代码部分中有详细注释,可跳过

    Move J。该命令是使机械臂所有的关节一起工作来完成移动,轨迹形状通常不为直线, 而是一个所有关节一起工作的扫动。这是最简单也是最常用的方法。这就是前文中我们分析的线性规划。

    off J。这是一个被存储位置的值抵消的联合移动。此移动将应用在“teach new position”按钮上方的存储位置字段中设置的任何存储位置号。

    Move L。这将执行一个完美的直线到期望位置。这个程序生成向下位机发送一系列的路径点。

    Move A。使得机械臂的轨迹为一圆弧。首先选择“Move A Beg”,并同时设置机械臂的运行速度(示教是设置速度比例)。其次,选择“Move A Mid”,然后示教第二个点。最后选择“Move A End”,并在终点或弧线上标出你想要的轨迹点。命令窗口现在将有 3 行代码,每行对应 3 个点。当一个“Move A Beg”的代码行被执行,程序将自动运行接下来的 2 行代码来计算弧并生成轨迹。如果轨迹无法实现,这一步就无法进行。当所有形成弧的路径点都被传输到下位机的过程中,在执行移动 a 之前会有几秒钟的延迟。

    Move C。在空间中3个点确定一个圆,因此,我们同样需要储存三个点的坐标。步骤与Move A相同。

    Move SP。在轨迹点寄存器界面中有 16 个可以设置的存储位置。X,Y,Z,Y,P,R,对于你想要执行的任何位置或程序中的多个位置。当你示教时,机械臂将移动到你在寄存器标签上为存储位置所输入的位置。

    off SP。使机械臂移动到一个存储位置,然后通过另一个存储位置的值对该位置进行偏移。

    Teach SP。这个移动命令将插入 6 行到你的程序中,当执行时将机器人当前位置存储到你选择的轨迹点寄存器中。这使得根据需要填充存储的位置变得更加容易。

    二、实验设计

            我们设计实验的操作对象为尺寸为3.8cm×2.8cm的电路板,实验中机械臂的运动路线如下图所示。

            其中,实线方框表示电路板拿取区域,虚线方框表示电路板放置区域。所有电路板均位于基坐标系的平面上,圆弧上各区域间相距22.5°,实际摆放如下图所示。

            实验过程中,机械臂需要沿着圆弧轨迹将电路板从拿取区域移动至放置区域,同时,最后一块电路板需要在移动过程中旋转90°。

            生成轨迹所需要的目标点按通信协议储存于上位机的指令显示区域(位于主控界面左下角),如下图所示。

    三、机械臂夹爪控制程序

            机械臂夹爪的控制选用了之前学习过的正点原子开发板舵机型号为S3010,是之前搞智能车竞赛剩下的,该舵机的转角与高电平的脉宽有关,黑线接地,红线接电源(5V),白线为控制线。

    1. int main(void)
    2. {
    3. u8 key; //保存键值
    4. u16 pwmval=1945; //pwm比较值初始化,此时夹爪张开到最大角度
    5. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    6. delay_init(168); //初始化延时函数
    7. uart_init(115200);//串口波特率115200
    8. TIM14_PWM_Init(2000-1,840-1); //84M/840=0.1Mhz的技术频率,重装载值为2000,所以pwm频率为50hz,周期为20ms
    9. KEY_Init(); //初始化与按键连接的硬件接口
    10. while(1) //根据按键改变夹爪开闭状态
    11. {
    12. delay_ms(10);
    13. key=KEY_Scan(1); //得到键值
    14. if(key)
    15. {
    16. switch(key)
    17. {
    18. case KEY0_PRES: //按下按键0,夹爪闭合
    19. pwmval=pwmval+1; //递增,通过改变加数,改变夹爪速度
    20. if(pwmval>1945) //该限值由夹爪机械结构决定
    21. pwmval=1945;
    22. break;
    23. case KEY1_PRES: //按下按键1,夹爪张开
    24. pwmval=pwmval-1; //递减,通过改变减数,改变夹爪速度
    25. if(pwmval<1875)//该限值由夹爪机械结构决定
    26. pwmval=1875;
    27. break;
    28. }
    29. }
    30. TIM_SetCompare1(TIM14,pwmval); //改变占空比
    31. }
    32. }
  • 相关阅读:
    Networkx绘图和常用库函数坐标绘图
    PMP考前最后2天思路整理
    Java零基础入门-算术运算符
    干货!十分钟搞懂消息队列的选型
    [附源码]计算机毕业设计springboot房产中介管理系统
    库引入方法
    JavaScript
    自动驾驶(八十四)---------中间件对比分析
    元数据管理-解决方案调研二:元数据管理解决方案——Saas/内部解决方案(2)
    C++算法 —— 动态规划(3)多状态
  • 原文地址:https://blog.csdn.net/m0_53966219/article/details/126436779
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号