前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术融合与创新大象机器人水星Mercury X1人形机器人案例研究!

技术融合与创新大象机器人水星Mercury X1人形机器人案例研究!

原创
作者头像
大象机器人
发布于 2024-04-28 06:03:12
发布于 2024-04-28 06:03:12
40200
代码可运行
举报
运行总次数:0
代码可运行

引言

在科技迅速发展的当下,人形机器人正变得日益重要,其应用范围从工业自动化到服务业不断扩展。本文将通过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数据线能够获取到图像的相机模组。

接下来,我们将探讨这些技术在实际应用中是如何被集成到机器人中,并展示其在具体任务中的表现。

场景流程介绍

1.建图设立标记点

建图:首先在所处的环境里,使用Mercury X1自带的雷达,通过ROS中的SLAM技术进行建图,用的是gmapping算法进行2D建图。启动机器人,对系统进行初始化,在所处的环境中移动,通过雷达传感器收集数据,SLAM算法将这些数据转化为一个结构化的地图,同时实时更新机器人的位置,为了确保地推的准确性,建议在环境中多移动会。

标记A,B点:在RViz中使用“Publish Point”工具,在地图上点击想要标记的位置,就会发布一个点到ROS的默认话题,重复这个过程在B点也进行标记,记录下A,B点的坐标

在程序中修改好保存的点位,之后就可以进行定点巡航了。

移动到A桌,进行物体的识别与抓取

完成完上一步骤之后,Mercury X1运动到A桌进行物体的抓取。

因为物体的检测是根据手臂末端的摄像头进行的,所以在一开始未知的情况下,会对周围的环境先进行一个巡视,发现目标之后快速计算目标物体的位置。

#扫描全部物体的代码

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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的时间进行等待。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
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在提高生产效率、减少人工成本和应对复杂操作环境中的重要价值。

如果你对该案例感兴趣的话麻烦点赞留言支持我们,你的支持是我们更新的动力!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
论网盘的秒存与限制下载速度(看完这个你可能还是不想开网盘会员)
hello,我码神又回来了,这几天做个入门项目,有点头秃,开个小章来混混水,都做好了,发车了。 提到网盘大家都不陌生,小到小学生,大到中年大叔,大家可谓是对网盘又爱又狠,爱上网盘的便捷,恨上网盘的慢,慢,慢!!!今天我们就来聊一下网盘的爱恨情仇 1.网盘为什么能秒传? 首先我们来科普一下文件上传的知识 文件上传顾名思义就是把文件从本地电脑发送到存储文件的远程服务器上,小文件的上传倒没有什么好说的,主要考虑的是大文件上传怎么 更快、更稳定、更灵活、更快响应 等等,以提高用户的体验。
秋名山码神
2022/12/13
1.3K0
论网盘的秒存与限制下载速度(看完这个你可能还是不想开网盘会员)
Spring Boot 如何上传大文件?骚操作~
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。
架构师修炼
2020/12/16
2.5K0
Spring Boot 如何上传大文件?骚操作~
大文件上传和断点续传_文件断点续传实现的思路
支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验;
全栈程序员站长
2022/09/21
2.1K0
大文件上传和断点续传_文件断点续传实现的思路
深入理解文件上传下载的原理及实现逻辑
文件上传的是根据 http 协议的规范和定义,完成请求消息体的封装和消息体的解析,然后将二进制内容保存到文件。
Lion 莱恩呀
2025/01/01
4400
深入理解文件上传下载的原理及实现逻辑
Java如何实现大文件分片上传,断点续传和秒传
关于文件上传模块,主要难点还是集中在大文件上传,毕竟我们无法确保在一个http连接中,能够将一个大文件完整传输过来,特别是在网络环境不稳定的情况下,如果是这样的话,一旦传输过程中出现错误,那就意味着需要重新传输整个文件,相信这是我们都不希望看到的局面,而本文就是来介绍打破这种局面的办法。
大忽悠爱学习
2022/11/12
4.6K0
Java如何实现大文件分片上传,断点续传和秒传
聊一聊前端上传大文件的几种方式。
使用PHP来展示常规的表单上传是一个不错的选择。首先构建文件上传的表单,并指定表单的提交内容类型为enctype="multipart/form-data",表明表单需要上传二进制数据。
用户6835371
2021/06/01
2.9K0
实战篇:断点续传?文件秒传?手撸大文件上传
最近接到一个新的需求,需要上传2G左右的视频文件,用测试环境的OSS试了一下,上传需要十几分钟,再考虑到公司的资源问题,果断放弃该方案。
阿Q说代码
2021/09/09
1K1
实战篇:断点续传?文件秒传?手撸大文件上传
springboot实战之文件分片上传、断点续传、秒传
上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式
lyb-geek
2019/11/20
25K2
springboot实战之文件分片上传、断点续传、秒传
Java实现浏览器大文件上传
文件上传是许多项目都有的功能,用户上传小文件速度一般都很快,但如果是大文件几个g,几十个g的时候,上传了半天,马上就要完成的时候,网络波动一下,文件又要重新上传,抓狂🤯。那有什么办法解决解决这个问题,答案就是把文件分片,一段一段把文件拆开上传。
一杯茶Ja
2024/09/15
2820
Node+Vue 实现大文件上传,断点续传等
【每日更新 Suggest 👍 question & answers】正经的前端学习 🌟🌟 一个 ☝️ 正经的前端学习,以阶段性来驱动学习,每天进步一点点🤏 !leetcode题解,记录自己的leetcode解题之路…… webvueblog.github.io/file-breakp… 地址 👇 github.com/webVueBlog/… Node+Vue 实现大文件上传,断点续传等 Vue 大文件上传和断点续传(帮忙点赞star谢谢,感谢♥) file-breakpoint-continue 源代码
达达前端
2022/04/29
2.9K0
Node+Vue 实现大文件上传,断点续传等
大文件上传实践分享
导读 在互联网时代,大文件上传已成为常见的需求,无论是企业还是个人用户,都可能面临大文件传输的挑战。本文将分享一些实践经验,帮助更高效地处理大文件上传问题。我们将探讨选择合适的传输工具、优化网络设置、分块上传等策略,以及一些实用的技巧和注意事项。通过这些实践分享,将能够提高文件上传的成功率,节省时间并减少麻烦。让我们一起探索大文件上传的最佳实践吧!
京东技术
2024/03/18
4420
大文件上传实践分享
大文件上传:秒传、断点续传、分片上传
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。
程序员小猿
2022/03/09
2.2K0
大文件上传时如何做到秒传?
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有比较好的上传体验呢,答案有的,就是下边要介绍的几种上传方式
二哥聊运营工具
2022/07/11
1.1K0
大文件上传时如何做到秒传?
springboot+vue实现在线网盘(云盘)系统
今天教大家如何设计一个网盘(云盘)系统系统 , 基于目前主流的技术:前端vue,后端springboot。
家庭Q秋-3993387644
2025/05/26
1830
springboot+vue实现在线网盘(云盘)系统
面试官:大文件上传如何做断点续传?
分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(Part)来进行分片上传
用户3806669
2021/04/15
8.4K0
面试官:大文件上传如何做断点续传?
快速学习-断点续传解决方案
通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大 小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了,电断了没 有上传完成,需要客户重新上传,这是致命的,所以对于大文件上传的要求最基本的是断点续传。
cwl_java
2020/01/14
1.2K0
快速学习-断点续传解决方案
大文件上传原理及实现方案
在网络应用中,大文件上传是一个技术挑战。本文详细解析了大文件上传的核心原理,并探讨了多种实现方案。从基本的文件分割、断点续传到复杂的并行上传,文章涵盖了一系列技术细节和最佳实践,包括如何处理网络波动、提高数据传输效率等关键问题。此外,还介绍了相关的前端和后端技术支持。无论是开发者还是架构师,这篇文章都将提供有力的技术指导和实战参考,帮助读者高效解决大文件上传问题。
京东技术
2024/02/27
3K0
大文件上传原理及实现方案
AspNetCore中的文件上传与下载优化
在现代Web开发中,文件上传和下载是常见的功能需求。然而,随着文件大小的增加或网络环境的变化,传统的文件上传和下载方式可能会遇到性能瓶颈或用户体验问题。本文将深入讲解如何在AspNetCore中实现大文件上传、分块上传、断点续传以及高效的文件下载。
郑子铭
2025/05/12
1330
AspNetCore中的文件上传与下载优化
网盘系统设计:万亿 GB 网盘如何实现秒传与限速?
网盘,又称云盘,是提供文件托管和文件上传、下载服务的网站(File hostingservice)。人们通过网盘保管自己拍摄的照片、视频,通过网盘和他人共享文件,已经成为了一种习惯。我们准备开发一个自己的网盘应用系统,应用名称为“DBox”。
小熊学Java
2023/12/04
1.1K0
网盘系统设计:万亿 GB 网盘如何实现秒传与限速?
Spring学习笔记(三十六)——SpringBoot 实现大文件分片上传、断点续传及秒传
simple-uploader文档案例:https://github.com/simple-uploader/vue-uploader vue-simple-uploader文档案例:https://github.com/simple-uploader/Uploader/blob/develop/README_zh-CN.md
不愿意做鱼的小鲸鱼
2022/09/26
5.5K1
Spring学习笔记(三十六)——SpringBoot 实现大文件分片上传、断点续传及秒传
推荐阅读
相关推荐
论网盘的秒存与限制下载速度(看完这个你可能还是不想开网盘会员)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档