引言
机械臂是一种可编程的、自动化的机械系统,它可以模拟人类的动作,完成各种任务,例如装配、喷涂、包装、搬运、焊接、研磨等。由于其高度灵活性和多功能性,机械臂在现代社会中已经得到了广泛的应用。
myCobot 280 M5Stack 2023是一款高性能桌面型机械臂,其强大的功能和多种新特性使其成为教育、科研和轻型制造等领域的理想选择。该机械臂不仅具备精准的运动控制和高效的工作能力,而且支持ROS2的环境适配、ps2手柄控制、自干涉碰撞等多种新功能,这些功能使得该机械臂更加智能、灵活和安全。本篇文章将详细介绍myCobot280 2023的新功能和应用场景,帮助读者深入了解这款机械臂的特点和优势,并探索如何在教育、科研和制造等领域中发挥其潜力。
myCobot280 2023简介
myCobot 280是一款轻量级桌面型机械臂产品,重量不到800克,可重复定位精度控制在0.5毫米以内,负载能力为250克,工作半径为280毫米。该机械臂具有丰富的接口,支持主流编程语言和环境,例如Python、C++、ROS1/2等。这使得它非常适合用于教育、科研、等领域。
新功能
myCobot 280 2023 具有以下新功能:
(如果您当前使用的是第一代myCobot 280,则可以升级固件以访问新功能。
● 提高通信速度和 ROS2 支持
● 自干扰碰撞和手柄控制
● 复合机器人及物流自动化研究
提高通信速度和 ROS2 支持
● myCobot 280 2023的通信速度比之前的版本提高了五倍,现在可以达到20ms。这种改进可以提高机械臂的响应能力,使控制更加灵敏,减少通信造成的事故。机器人的运动速度也更快,减少了事故的发生。
myCobot 280 2023 现在支持 ROS2 环境,它与 ROS1 有两个不同之处。首先,ROS2提高了实时性能,可以更精确地控制机器人的运动路径和速度。这适用于需要高实时性能的应用。其次,ROS2使用数据分发服务(DDS)协议,与ROS1相比,该协议提高了网络通信性能,使其在处理机器人控制命令和提高机器人响应速度方面更加高效。但是,ROS1已经在机器人领域得到了广泛的应用,并且具有相对完整的控制库和开发环境,使得开发和应用机器人相关软件变得容易。ROS2相对较新,在市场上的应用较少。因此,用户在选择控件开发环境时,需要考虑自己的具体需求和实际情况,选择最合适的一种。
● 自干涉碰撞和手柄控制
○ 自干涉碰撞:新添了一个自干涉碰撞功能,这个功能能使本体在发生关节碰撞的时候会立刻停止运动,不会继续运动下去导致机械臂出现掉电情况。这个功能可以有效避免机械臂在工作过程中出现异常情况导致的损坏,提高了机械臂的安全性和可靠性。
通过收集用户的反馈,已经研发人员对产品的期望,这项技术可以说是很大程度上解决了一个问题,在以往如果说强行让机械臂关节进行碰撞的话,整个机器就会执行掉电保护,需要重新上电恢复控制,给不少用户造成了麻烦。
目前这项技术并不开源,所以不能过多的揭晓其中的算法和原理。
● 还有一个游戏手柄控制功能,允许用户使用 PS2 游戏控制器控制机器人的运动和操作,还增加了对吸盘和夹具的控制。此功能简化了编程过程并改善了用户体验。句柄控制功能基于一组 Python 程序,引入 Pygame 库来设置控制器的密钥(相当于自定义句柄)。这是一个相对简单的项目,有兴趣的人可以在此基础上进一步开发。该项目是开源的,并在GitHub上共享。
def main():
global action
pygame.init()
pygame.joystick.init()
try:
joystick = pygame.joystick.Joystick(0)
except:
print("Please connect the handle first.")
return
joystick.init()
done = False
start_time = 0
while not done:
for event_ in pygame.event.get():
if event_.type == pygame.QUIT:
done = True
# 按键按下或弹起事件
elif (
event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP
):
buttons = joystick.get_numbuttons()
# 获取所有按键状态信息
for i in range(buttons):
button = joystick.get_button(i)
if i == 7:
if button == 1:
action = 7
break
else:
action = 0
if i == 1:
if button == 1:
action = 11
break
if i == 0:
if button == 1:
action = 10
break
if i == 3:
if button == 1:
action = 9
break
if action == 9 and button == 0:
action = 0
break
if i == 2:
if button == 1:
action = 8
break
if action == 8 and button == 0:
action = 0
break
if i == 4:
if button == 1:
action = 18
start_time = time.time()
break
if start_time != 0 and button == 0:
if time.time() - start_time > 2:
start_time = 0
break
else:
start_time = 0
action = 0
if i == 5:
if button == 1:
action = 21
start_time = time.time()
break
if start_time != 0 and button == 0:
if time.time() - start_time > 2:
start_time = 0
break
else:
start_time = 0
action = 0
# print("button " + str(i) + ": " + str(button))
# 轴转动事件
elif event_.type == pygame.JOYAXISMOTION:
axes = joystick.get_numaxes()
# 获取所有轴状态信息
# while True:
for i in range(axes):
axis = joystick.get_axis(i)
# res[i] = axis
if i == 1:
if axis < -3.0517578125e-05:
action = 1
break
elif axis > -3.0517578125e-05:
action = 2
break
else:
action = 0
if i == 0:
if axis < 0:
action = 3
break
elif axis > 0:
action = 4
break
else:
action = 0
if i == 2:
if axis < 0:
action = 17
break
elif axis > 0:
action = 16
break
else:
action = 0
if i == 3:
if axis < -3.0517578125e-05:
action = 5
break
elif axis > -3.0517578125e-05:
action = 6
break
else:
action = 0
if i == 4:
if axis > 0.9:
action = 19
start_time = time.time()
break
if start_time != 0 and axis == -1.0:
if time.time() - start_time > 2:
start_time = 0
break
else:
start_time = 0
action = 0
if i == 5:
if axis > 0.9:
action = 20
start_time = time.time()
break
if start_time != 0 and axis == -1.0:
if time.time() - start_time > 2:
start_time = 0
break
else:
start_time = 0
action = 0
# print("axis " + str(i) + ": " + str(axis))
# 方向键改变事件
elif event_.type == pygame.JOYHATMOTION:
# hats = joystick.get_numhats()
# 获取所有方向键状态信息
# for i in range(hats):
hat = joystick.get_hat(0)
# print("hat " + str(i) +": " + str(hat))
if hat == (0, 1):
action = 12
elif hat == (0, -1):
action = 13
elif hat == (-1, 0):
action = 14
elif hat == (1, 0):
action = 15
elif hat == (0, 0):
action = 0
pygame.quit()
复制
是一个相对比较简单的项目,如果有兴趣的话可以在次基础上进行再次的开发。
项目是开源的已经分享在GitHub,links:
https://github.com/elephantrobotics/pymycobot/tree/main/demo/handle_control
复合机器人与物流自动化研究
● myCobot 280 2023还可以与由树莓派4B控制的SLAM雷达车myAGV组合,形成一个复合机器人,可以学习和研究物流自动化、导航和其他功能。此功能使机器人在处理不同的场景和任务时更加灵活多才多艺,提高了其综合应用能力。
● myAGV:关于车辆,hackster网站上有很多介绍文章,一些开发者使用myAGV和myCobot 280来实现一些项目。
总结
总的来说,myCobot 280 2023是一款具有多种新功能和改进的机械臂,大大增强了其性能和应用范围。除了提升通信速度、支持 ROS2、避免自干扰碰撞外,我们还推出了 AI Kit 2023,将机器视觉与机械臂相结合,实现类似工业的自动化场景,让机械臂的应用更加广泛和多样化。
此外,myCobot 280 2023 还有许多其他功能等着你去探索,比如绘图、AI分拣抓取等,这将进一步拓展机械臂的应用范围和创新。如果您有更好的项目和想法,请随时与我们分享。我们非常乐意听取您的建议,为您提供更好的服务。
如果您有任何其他问题或疑虑,请随时与我们联系。我们很乐意为您提供帮助。