引言
在科技迅速发展的当下,人形机器人正变得日益重要,其应用范围从工业自动化到服务业不断扩展。本文将通过Mercury X1大象人形机器人的案例,探讨如何利用尖端技术如大型语言模型(LLM)、同时定位与映射(SLAM)、机器人操作系统(ROS)、开源计算机视觉(OpenCV)和S-Tag标记码技术来实现复杂环境中的精确物体抓取和移动。
此案例不仅展示了机器人的高级功能,也体现了现代机器人如何有效解决实际问题,预示着未来技术在工业和服务业中的应用前景。接下来的内容将详细说明实验的技术设置、步骤与成果。
技术点介绍
在Mercury X1的应用案例中,整合了多种技术使得机器人能够在复杂的环境中执行精准的物体抓取和移动任务。以下是案例中涉及到的关键技术和详细介绍:
1.LLM(Large Language Model)
大型语言模型(LLM)如ChatGPT系列,在机器人技术中的应用允许机器人理解和执行基于自然语言的指令。这种模型通过处理大量的文本数据学习语言的复杂性和上下文关系,使机器人能够解析用户的指令并转化为动作。
将一个对话形式的大语言模型,嵌入到机器人当中是目前一种比较热门的一种技术。
在Mercury X1机器人中,LLM用于理解自然语言解释操作命令,为后续的动作提供给决策。
2.同时定位与建图SLAM
SLAM技术是现代机器人和自动驾驶汽车中不可或缺的一部分,它允许机器人在没有外部帮助的情况下,在未知环境中进行定位和地图创建。通过使用激光雷达、摄像头和其他传感器,SLAM帮助Mercury X1机器人构建环境地图,实时更新其位置,并规划行动路径。这对于确保机器人在复杂环境中能够自主导航至关重要。
3.机器人操作系统 (ROS)
机器人操作系统(ROS)是一个灵活的框架,用于编写机器人软件。它提供了一系列工具和库,使开发者能够构建复杂而可靠的机器人行为。ROS的模块化设计允许Mercury X1机器人的开发者轻松集成不同的硬件和软件比如说机械臂的路径规划,移动地盘的建图导航避障等功能,处理数据通信,并管理多个传感器和执行器之间的交互。
ROS是一个非常强大的工具,在机器人应用领域当中,在全球范围内也是非常多人使用的。
4.开源计算机视觉库 (OpenCV)
OpenCV是用于实现图像处理和计算机视觉的开源库,它在本次的案例中扮演了至关重要的角色,没有它就不能完成这个项目。机器人的摄像头通过OpenCV分析收集到的视觉数据,识别和定位物体。OpenCV的算法使机器人能够识别物体形状、大小和精确坐标,这些信息对于精确抓取和操作至关重要。
提供了物体的坐标给机器人,就可以实现精准的抓取。
5.S-Tag标记码技术
S-Tag标记码是一种高度可靠的标识系统,设计用于在视觉上挑战的环境中提供准确的标记识别。这些标记被用于标识Mercury X1机器人操作环境中的物体和位置。即使在光线不足或视线受阻的情况下,S-Tag也能确保机器人通过其摄像头系统准确识别目标物体。
https://youtu.be/vnHI3GzLVrY
通过这些技术的应用,Mercury X1大象人形机器人能够执行复杂的任务,如自主导航、物体识别和精确操控,这些都是现代自动化和智能系统不可或缺的能力。
6.pymycobot
pymycobot是用于控制Mercury X1机器人机械臂和末端执行器(如夹爪)的Python库。它允许开发者精确控制机械臂的角度、坐标以及运动模式,包括差补模式和刷新模式。此库为机器人提供了高度的灵活性和可定制性,使得机器人能够执行复杂的抓取和操控任务,并适应各种操作需求。
产品介绍
Mercury X1
Mercury X1是由Elephant Robotics开发的一款先进的人形机器人,特别设计用于应对各种自动化任务。它拥有19个自由度,(单臂7个自由度)使其在执行任务时具有极高的灵活性和适应性。Mercury X1配备了轮式移动底座,由高性能直驱电机驱动,能够在复杂环境中稳定移动,并具备高达8小时的电池续航能力,适合个人和商业应用。
这款机器人采用高性能主控制器系统,配置了NVIDIA Jetson Xavier提供强大的计算支持,以处理视觉测距、传感器融合、定位与地图构建、障碍检测和路径规划等复杂算法。此外,Mercury X1的移动基座装备了LiDAR、超声波传感器和2D视觉系统,能够实现高感知的环境交互。
myCobot Pro Adaptive Gripper
2 指自适应夹持器可实现内部和外部平行夹持,以及独特的环绕式夹持模式。它可以拾起任何形状的任何物体并且不会松开。使用它来完成一系列完整的应用,并快速投入生产 - 无需机器人专业知识。它是高度灵活和可靠的机器人单元的关键。
myCobot Pro Camera Flange
使用USB-B数据线能够获取到图像的相机模组。
接下来,我们将探讨这些技术在实际应用中是如何被集成到机器人中,并展示其在具体任务中的表现。
场景流程介绍
- 建图设立标记点
建图:首先在所处的环境里,使用Mercury X1自带的雷达,通过ROS中的SLAM技术进行建图,用的是gmapping算法进行2D建图。启动机器人,对系统进行初始化,在所处的环境中移动,通过雷达传感器收集数据,SLAM算法将这些数据转化为一个结构化的地图,同时实时更新机器人的位置,为了确保地推的准确性,建议在环境中多移动会。
标记A,B点:在RViz中使用“Publish Point”工具,在地图上点击想要标记的位置,就会发布一个点到ROS的默认话题,重复这个过程在B点也进行标记,记录下A,B点的坐标
在程序中修改好保存的点位,之后就可以进行定点巡航了。
- 移动到A桌,进行物体的识别与抓取
完成完上一步骤之后,Mercury X1运动到A桌进行物体的抓取。
因为物体的检测是根据手臂末端的摄像头进行的,所以在一开始未知的情况下,会对周围的环境先进行一个巡视,发现目标之后快速计算目标物体的位置。
#扫描全部物体的代码
def detect_objects_all(flag):
if flag == 0:
detect_objects("left", ml_camera_pos_a, camera_data_a)
detect_objects("right", mr_camera_pos_a, camera_data_a)
cube_data, tray_data = judge_tray_cube(camera_data_a) else:
ml.send_angles([-41.88, 30.62, -1.14, -102.57, 59.89, 58.11, 9.63], 10)
mr.send_angles([45.94, 25.33, 0.15, -102.31, -58.65, 55.8, -13.94], 10)
waitl()
ml.set_gripper_value(0, 10)
mr.set_gripper_value(0, 10)
time.sleep(12)
detect_objects("left", ml_camera_pos_b, camera_data_b)
detect_objects("right", mr_camera_pos_b, camera_data_b)
ml.set_gripper_value(50, 10)
mr.set_gripper_value(50, 10)
cube_data, tray_data = judge_tray_cube(camera_data_b) return cube_data, tray_data
每个物体的表面都有贴有STag码,可以通过标记码来精准的获得物体的坐标参数,在此获得的物体坐标和机械臂的坐标并不在同一个坐标系当中,所以在机械臂的机器视觉算法当中,都会有一个世界坐标系,将物体的坐标,机械臂末端的坐标转化为世界坐标,这样就方便机械臂对物体进行抓取。
- 移动到B桌
拿着收纳箱,前往B桌进行分类。
- 对物体进行分类
跟第二步,物体的识别和抓取的算法是一样的,都是通过STag标记码识别之后获取物体的坐标进行分类。
技术难点
在开发过程中的难点最核心的是,双臂人形机器人协同控制的问题,主要从以下几个方面来分析:
- 精确的坐标和时间同步:
要精确计算两个手臂的运动轨迹,确保它们在抓取托盘时能同时到达预定位置。这要求系统能够同步控制两个独立的驱动系统,确保动作的协调性和同步性。
在Mercury X1夹爪托起托盘的时候,需要同时夹住托盘的边缘并且同时抬起托盘,为了确保同步进行,避免一方提前抬起,预设了1s的时间进行等待。
def put_up_tray(tray_data):
ml.set_gripper_value(60, 10)
mr.set_gripper_value(60, 10)
time.sleep(1)
for tray in tray_data:
offset, fact_bcl = get_obj_coords(tray["corners"], tray["ids"], tray["cur_coords"], tray['arm'])
point = fact_bcl.copy()
px, py, pz = point[0], point[1], point[2]
if tray["ids"] == [4] and tray['arm'] == "left":
af = (offset + 90) * pi / 180
mc = ml
Hei = 57
Len = -20
elif tray["ids"] == [5] and tray['arm'] == "right":
af = (offset - 90) * pi / 180
mc = mr
Hei = 57
Len = 30
else:
continue
# p3
px3 = px + Hei * cos(af) + Len * sin(af)
py3 = py + Hei * sin(af) - Len * cos(af)
pz3 = pz
p3 = [px3, py3, pz3]
mc.send_base_coord(6, offset, sp)
mc.send_base_coord(2, py3, sp)
mc.send_base_coord(1, px3, sp)
mc.send_base_coord(3, pz - 10, sp)
waitl()
ml.set_gripper_value(0, 10)
mr.set_gripper_value(0, 10)
time.sleep(2)
current_coordsl = ml.get_base_coords()
current_coordsr = mr.get_base_coords()
waitl()
ml.send_base_coord(3, current_coordsl[2] + 20, 20)
mr.send_base_coord(3, current_coordsr[2] + 20, 20)
waitl()
- 力学平衡和稳定性
在抓取大型或重物体时,双臂的协调尤为重要。需要确保机器人在执行任务时保持稳定,避免因力学不平衡造成的倾倒或损坏。这涉及到复杂的力学计算和实时反馈调节。
在本次项目中,因为动作并不算是很复杂,只需要将托盘同时抬起,同时放下就能够保证托盘的稳定性。如果在复杂的场景,比如说用手持乒乓球拍保证乒乓球拍上的球不会掉落,这个涉及力学平衡和稳定性就要考虑的多。
- 碰撞避免
在双臂操作中,防止手臂之间、手臂与机器人体、手臂与环境之间的碰撞是一大挑战。需要精确地规划每个手臂的运动路径,同时保持足够的安全距离。
总结
此案例不仅凸显了机器人技术在工业和服务领域的实际应用潜力,也展示了技术融合的重要性。通过详细介绍技术背景、实施步骤和具体应用,我们看到了Mercury X1在提高生产效率、减少人工成本和应对复杂操作环境中的重要价值。
如果你对该案例感兴趣的话麻烦点赞留言支持我们,你的支持是我们更新的动力!