介绍
今天,我将向大家展示一个我独立设计并实现的机械臂模型。这个模型的核心功能是实现实时的手势追踪——只需用手轻轻拖拽,机械臂就能立即跟随你的动作进行移动。
我之所以想要创造这样一个模型,是因为在一些危险环境中,我们可以用机械臂来代替人工进行作业,从而避免人员的生命安全受到威胁。
你可能会问,为什么不直接使用远程的键盘控制、手柄控制或者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 robotsend_coords([list_coords],speed,mode)example:import timefrom pymycobot.mycobot import mycobot# create a objectmc = mycobot(com7,115200)# angles controlmc.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
获取实时角度信息
pymycobot提供了”get_angles()方法可以过去当前机械臂的角度信息。
# can obtain the current angle information of the robotic arm in real timeget_angles()# exampleprint(real-time angles:,mc.get_anlges())result: real-time angles:[0,0,0,0,0,0]# continuously obtain the current anglewhile true: angels = mc.get_angles() print(angles) time.sleep(0.1) #go to the next step every 0.1s
机械臂的刷新模式设置
机械臂的刷新模式:主要分为两种插补模式和非插补模式,是指在运动轨迹规划中,控制机械臂末端执行器的移动方式。如果没有设置任何模式,机械臂可能无法正确执行预期的运动,并且可能导致以下后果:
运动不平滑
运动不准确
运动不连续
插补模式:插补模式可以实现平滑连续的轨迹规划,确保机械臂末端执行器的位置和姿态在运动过程中平滑过渡。
非插补模式:非插补模式是指机械臂在运动过程中只关注特定的目标点,而不进行插值计算。在非插补模式下,机械臂的位置和姿态会在关键点之间直接跳跃,而不会经过平滑的过渡。
在进行多个机械臂同时使用插补模式进行运动时,可能会出现等待或排队的情况,所以我们选择使用非插补模式。
#set refresh modeset_fresh_mode(1/0) 1:no interpolation0:interpolationmc.set_fresh_mode(1)
我们将前面的整合在一起的代码如下
code:
import timefrom pymycobot.mycobot import mycobotmc = mycobot(com7, 115200) #release armmb = mycobot(com11, 115200) #move armmb.set_fresh_mode(1) #no interpolationtime.sleep(1)mc.release_all_servos() #release robottime.sleep(1)speed = 100while 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 connectionfrom pymycobot.mycobot import mycobotmc = mycobot(com7, 115200) mb = mycobot(com11, 115200)
用最基础的usb数据线进行连接,我们电脑上就有两个机械臂的串口号,可以对他们分别发送指令任务。
让我们一起来看看效果如何
总结
根据内容可以看出来虽然说是能够做到百分之七八十的同步。也会因为一些其他的因素所影响 ,造成了不小的延迟。造成延迟的原因可能有几个方面,比如说数据处理和传输的速度,机械臂的反应速度,软件的优化,硬件的性能等等,这些都是可能 产生延迟的因素。
除此之外,还有一个很大的局限性就是,它们的通信通过串口进行连接的,如果距离稍微远一点的话就没办法在用这种方法去使用,实用性不强,后期我会尝试使用蓝牙,wifi等无限连接的方式来尝试控制。
本次记录就更新到这里,如果你有更好的想法,无论是优化的功能或者说是其他的建议欢迎在下方留言。
WLAN抗干扰分析
三星S8/S8 PLUS跑分曝光,排名十分尴尬!
意法半导体推出两款新芯片组 可节省电路板空间
苹果平板电脑图片集锦
第三届“芯动北京”中关村IC产业论坛即将在北京召开
开源六轴协作机械臂MechArm案例演示!
物联网存在着哪些隐性消费
MM32F5330内存保护单元(MPU)设计
新科技智能镜子将如何融入到我们的生活当中
谷歌和腾讯完成了强强联手后第一次共同亮相,共同投资AI医药研发公司
全新一代“遂宁云”AI人脸识别测温智能疫控门禁一体机上市
stm32的任务调度方式和步骤
MAX11129低功耗、12/10位、8/16通道串行ADC
Digi-Key Electronics宣布与LogiSwitch达成新的市场产品全球分销合作伙伴关系
无刷电机是交流电还是直流电?
通过机器学习实现更智能的公用事业管理
PCB设计技巧百问,Q&A in PCB design
亚马逊kindle十周年 四款kindle对比哪款是你心仪的产品?
软件无线电技术与可重配置计算体系结构
北京市:发布促进智能传感器创新生态高质量发展倡议