开源六轴协作机械臂MechArm案例演示!

news2024/11/17 3:29:02

介绍

今天,我将向大家展示一个我独立设计并实现的机械臂模型。这个模型的核心功能是实现实时的手势追踪——只需用手轻轻拖拽,机械臂就能立即跟随你的动作进行移动。

我之所以想要创造这样一个模型,是因为在一些危险环境中,我们可以用机械臂来代替人工进行作业,从而避免人员的生命安全受到威胁。

你可能会问,为什么不直接使用远程的键盘控制、手柄控制或者APP控制,而要选择手动拖拽的方式呢?我觉得只有手动操作,才能最大程度上满足我们对动作精准度的需求。因此,我决定开始尝试制作这个模型,并初步完成了整个demo。

我希望,通过这个demo,我能向大家展示出机械臂的无限可能性,同时也希望能激发出大家对未来科技的无限憧憬。

机械臂设备

mechArm 270 M5

mechArm 270 是一款六自由度的机械臂,它精巧的结构设计,能够放入一个书包里,携带和方便。较为重要的一点是开放了很多控制的API,用python能够快速开始对机械臂的控制。没有很复杂的操作,甚至还有图形编程,这对一些不是很懂代码的人也能够快速上手控制机械臂。

mechArm是一款桌面型的仿工业结构的机械臂,工作最大半径在270mm,负载250g,重复定位精度控制在±0.5mm。

Project

 介绍完基础的设备,我们就开始介绍我时如何制作这个demo过程的记录。

使用的环境

操作系统:windows11

编程语言:python3.9+

python lib:pymycobot,time

pymycobot是大象机器人的一个开源库,专门用来控制大象机器人的机械臂。一段简单的控制代码例子。

Code:

#Main methods used

#Create objects to communicate with the robotic arm.
MyCobot(serial,baud)
# angles control robot,
send_angles([list_angles],speed)
# coords control robot
send_coords([list_coords],speed,mode)

Example:

import time
from pymycobot.mycobot import MyCobot

# create a object
mc = MyCobot("com7",115200)

# angles control
mc.send_angles([0,0,0,0,0,0],100)
time.sleep(1)
mc.send_angles([90,90,90,90,90,90],100)
time.sleep(1)


简单介绍了下如何使用python来控制mechArm,是不是很容易呢。

分析问题

开始项目之前要搭建框架,了解我们具体需要解决什么问题才能够实现。对此我做了一个项目的流程图。下面我将手动施教的机械臂简称为R1,跟随运动的机械臂简称为R2。

Control robotic arm:上边已经提到了如何控制机械臂,使用pymycobot库提供的方法就可以实现了。

Motion Control methods:R1机械臂可以用手拖动,时时刻刻返回当前机械臂的角度信息,R2机械臂接收R1的机械臂角度信息进行控制。

Communication between robotic arms:整个项目中这一步骤是比较重要的一步。建立好之后,机械臂能够发送信息就能够很轻易的实现了。

接下来主要讲解Motion Control methods和communication between robotic arms。

Motion Control methods

  1. 获取实时角度信息

pymycobot提供了”get_angles()"方法可以过去当前机械臂的角度信息。

# Can obtain the current angle information of the robotic arm in real time
get_angles()

# example
print("real-time angles:",mc.get_anlges())

result: real-time angles:[0,0,0,0,0,0]

# Continuously obtain the current angle
while True:
    angels = mc.get_angles()
    print(angles) 
    time.sleep(0.1) #Go to the next step every 0.1s

  1. 机械臂的刷新模式设置

机械臂的刷新模式:主要分为两种插补模式和非插补模式,是指在运动轨迹规划中,控制机械臂末端执行器的移动方式。如果没有设置任何模式,机械臂可能无法正确执行预期的运动,并且可能导致以下后果:

  1. 运动不平滑
  2. 运动不准确
  3. 运动不连续

插补模式:插补模式可以实现平滑连续的轨迹规划,确保机械臂末端执行器的位置和姿态在运动过程中平滑过渡。

非插补模式:非插补模式是指机械臂在运动过程中只关注特定的目标点,而不进行插值计算。在非插补模式下,机械臂的位置和姿态会在关键点之间直接跳跃,而不会经过平滑的过渡。

在进行多个机械臂同时使用插补模式进行运动时,可能会出现等待或排队的情况,所以我们选择使用非插补模式。

#Set refresh mode
set_fresh_mode(1/0) 
1:no interpolation
0:interpolation

mc.set_fresh_mode(1)

我们将前面的整合在一起的代码如下

Code:

import time
from pymycobot.mycobot import MyCobot

mc = MyCobot("COM7", 115200)    #release arm
mb = MyCobot("COM11", 115200)   #move arm

mb.set_fresh_mode(1)    #no interpolation
time.sleep(1)
mc.release_all_servos() #release robot
time.sleep(1)
speed = 100
while True:
    angles = mc.get_angles()    #get release arm angles
    mb.send_angles(angles, speed)   #send angles to move arm
    time.sleep(0.1)

Communication between robotic arms:

我们的方案是两台机械臂接入同一个PC,用串口连接的方式.

# build connection
from pymycobot.mycobot import MyCobot

mc = MyCobot("COM7", 115200)   
mb = MyCobot("COM11", 115200)

用最基础的usb数据线进行连接,我们电脑上就有两个机械臂的串口号,可以对他们分别发送指令任务。

让我们一起来看看效果如何

总结

根据内容可以看出来虽然说是能够做到百分之七八十的同步。也会因为一些其他的因素所影响 ,造成了不小的延迟。造成延迟的原因可能有几个方面,比如说数据处理和传输的速度,机械臂的反应速度,软件的优化,硬件的性能等等,这些都是可能 产生延迟的因素。

除此之外,还有一个很大的局限性就是,它们的通信通过串口进行连接的,如果距离稍微远一点的话就没办法在用这种方法去使用,实用性不强,后期我会尝试使用蓝牙,WiFi等无限连接的方式来尝试控制。

本次记录就更新到这里,如果你有更好的想法,无论是优化的功能或者说是其他的建议欢迎在下方留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

I2C 通信-stm32入门

关于 I2C 通信的内容主要分为 两大块。 第一块:介绍协议规则,然后用软件模拟的形式来实现协议。第二块:介绍 STM32 的 I2C 外设,然后用硬件来实现协议。 因为 I2C 是同步时序,软件模拟协议也非常方便,目前…

给csgo游戏搬砖新手的十大建议

1、不要参与赌博性质的开箱和炼金,因为真的会上瘾,赚了还好,亏了你得哭。 2、实在想要玩饰品,直接去悠悠有品或者网易buff看价格,底价再砍10元,总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请…

性价比高的照明品牌,考研考公必备护眼台灯推荐

据国家卫生健康委员会发布的调查数据显示,我国青少年儿童总体近视率为52.7%、高度近视人口超3000万。儿童是民族的未来和希望,青少年儿童眼健康问题更是牵动着每一个人的神经。遗传、双眼视功能不正常、用眼负荷过重等因素都是造成青少年近视的原因,其中,大量的电子产品侵入以及…

外汇天眼:8家平台被监管拉黑,其中1家为假冒JP Morgan

就在最近,有八家未经监管授权的外汇交易公司被监管机构拉黑,其中有一家为假冒JP Morgan。具体新闻如下: 英国FCA对未授权平台Gens Markets发出警告 上周,英国金融行为监管局(FCA)对未经过监管授权的外汇平…

【计算机组成原理】存储系统

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理计算机组成原理中 存储系统的知识点和值得注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以…

光伏发电量计算有哪些注意点?

光伏发电量的计算是光伏项目开发过程中至关重要的一环。准确计算光伏系统的发电量不仅可以为项目的设计和规划提供数据支持,还可以为项目的投资决策和运营管理提供依据。以下是光伏发电量计算过程中需要注意的几个要点。 地理位置和气候条件 地理位置和气候条件是影…

STM32 ADC转换器、串口输出

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么?二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准?2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…

五周年活动周历!AutoGen解析·技术畅聊·3大城市工坊本周启动!

飞桨星河社区在成立的5年以来,已汇集660万AI开发者,覆盖深度学习初学者、在职开发者、企业开发者、高校教师、创业者等,已成为AI领域最具影响力的社区之一,无论是AI爱好者还是AI开发者,都能在这里探索AI的无限可能。 …

Python的控制流语句使用

Python的控制流语句使用 判断语句 if分支示意图语法介绍注意事项示例 for循环示意图语法介绍列表推导式示例 while循环与for的区别语法介绍示例 判断语句 if分支 示意图 单、双、多分支: 语法介绍 # 单分支 if condition:expression # 双分支 if condition:exp…

儿童绘本故事:鱼小乐的海洋奇幻之旅

《鱼小乐的海洋奇幻之旅》Chapter 1: 美好的计划一个晴朗的日子,鱼小乐和她的同学们聚在一起,兴奋地计划着一场奇妙的冒险。他们决定一起前往珠海海洋王国,展开一场海洋奇幻之旅。On a sunny day, Fishy Joy and her classmates gathered tog…

《On Java》

文章目录 一、Java概述1.JVM、JRE和JDK的关系2.什么是Java程序的主类3.Java和C的区别 三、面向对象3.1 面向对象三大特性封装继承多态 3.2 基本类型默认值3.3 和 equals 四、操作符4.1 比特和字节4.2 位操作&^ 4.3 运算符Math.round()loat f3.4;是否正确 4.4 实战小于n的最…

uni-app x生成的安卓包,安装时,提示不兼容。解决方案

找到 manifest.json 进入:源码视图 代码 {"name" : "xxx康养","appid" : "__xxx6","description" : "xxx康养","versionName" : "1.0.12","versionCode" : 100012,&…

4.3-Linux网络命名空间

查看本机的netWork namespace ip netns list 删除netWork namespace ip netns delete netnsName 创建netWork namespace ip netns add test1 查看test1这个netWork namespace的ip信息: ip netns exec test1 ip a 可以在虚拟机上执行:ip link 同样&#…

【探索Linux】—— 强大的命令行工具 P.17(进程信号 —— 信号保存 | 阻塞信号 | sigprocmask() | sigpending() )

阅读导航 引言一、阻塞信号1. 信号相关常见概念(1)信号递达(2)信号未决(3)阻塞信号(4)忽略信号 2. 信号在内核中的表示⭕信号在内核中的表示示意图 3. sigset_t (数据类型…

振弦式轴力计和振弦采集仪组成的安全监测解决方案

振弦式轴力计和振弦采集仪组成的安全监测解决方案 振弦式轴力计和振弦采集仪是一种常用的结构安全监测工具,可以用于评估建筑物、桥梁、隧道或其他结构的结构健康状态和安全性能。这种监测方案较为先进、精确,并且能够监测长期的结构反应,因此…

环境土壤物理Hydrus2D/3D模型实践技术应用

HYDRUS是基于Windows系统界面开发的环境土壤物理模拟软件,是用于模拟一维和多维变饱和多孔介质的水分运动、溶质(污染物等)运移、根系吸水和溶质吸收、以及热量传导等方面的强有力工具。HYDRUS还包括一个参数优化算法,用于各种土壤…

elFinder ZIP 参数注入导致命令注入 (CVE-2021-32682)

漏洞描述 elFinder 是一个用于 Web 的开源文件管理器,使用 jQuery UI 用 JavaScript 编写。 在 elFinder 2.1.48 及更早版本中发现一个参数注入漏洞。此漏洞可能允许攻击者在托管 elFinder PHP 连接器的服务器上执行任意命令,即使配置最少也是如此。这…

MySQL用得好好的,为何要转ES?

MySQL是一种关系型数据库,它可以高效地存储和查询结构化的数据。 ES是一种分布式搜索引擎,它可以快速地对海量的非结构化或半结构化的数据进行全文检索和分析。 MySQL 和 ES 的数据存储方式也不同。MySQL 中的数据通常是以关系型表的形式存储在磁盘上&…

第二十章(多线程)

一.线程的简介 Windows操作系统是多任务操作系统,它以进程为单位。一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程。系统可以分配给每一个进程有一段有限的使用CPU的时间(也可以…

Echarts tooltip配置项的属性 图表悬浮框

这个小图标就是tooltip的配置项 tooltip:{} //默认样式 自定义显示数据 如果没有自定义的属性可以 只是写data [1254,1551,574,10]… series: {//图表配置项 如大小,图表类型name: 图表名字,type: bar,//图表类型data: [{value: 454,time: 2012-11-12},{value: 898…