人形机器人场景应用全解析,2024睿抗 AI ROBOT创新挑战赛火热报名中!

 人工智能(AI)已成为推动科技革命和产业变革的关键力量。随着大模型等AIGC技术的迅猛发展,AI正深刻改变我们的生活并重新定义生产方式。越来越多人期望将AI技术从纯粹的思维和计算扩展到与物理世界的互动中,即发展具身智能。

    为了推广并深化具身智能的创新和应用,“睿抗机器人开发者大赛——AI ROBOT创新挑战赛”应用而生,大赛旨在激发全国高校学生的研究热情,探索AI与机器人技术的融合,展示尖端技术成果。

    这一平台不仅可以促进技术交流和学习,更可以通过竞赛提高中国大学生的科技实践能力,推动教育与产业的深度融合,为机器人产业注入新活力。

    本届睿抗机器人开发者大赛,特选用大象机器人公司的轮式人形机器人作为官方赛具。

    这款机器人以其创新的设计和卓越的性能,在全球范围内获得了广泛关注和认可。其轮式移动底盘结合双臂协作机械臂,赋予了其卓越的灵活性和运动能力,使其能够完成各种复杂的动作和任务。

图片

    通过本次大赛,参赛者有机会深入了解和应用机器人动作控制、视觉处理、大语言模型以及人机交互等前沿技术,这不仅能够提升他们的技术能力,也将推动机器人技术的创新发展。

技术亮点

AI ROBOT

  • 智能机器人双臂协同操作

  • 大模型赋能机器人实现人类语言指令识别和理解

  • 基于GPU的高阶渲染引擎,支持高保真传感器数据输出的物理仿真,实现机器人快速开发

  • 快速生成合成数据降低数据采集难度

竞赛任务

AI ROBOT

  • 任务1:机器人运动控制

    选手需要通过发布运动指令或运行控制代码实现对机器人的简单运动控制。

  • 任务2:Isaac Sim仿真

    Isaac Sim 是由 NVIDIA 开发的一个机器人模拟平台,主要用于机器人仿真和人工智能的训练。选手需要使用现场提供的模型文件进行机器人仿真。

  • 任务3:Replicator合成数据生成

    选手需要使用平台提供的待抓取数字资产文件在Isaac Sim中应用Replicator生成合成数据。

  • 任务4:地图构建

    选手需要在比赛现场环境中控制机器人运动采集数据、构建地图

  • 任务5:模型训练

    选手需要在TAO中利用Replicator生成的数据集进行模型训练

  • 任务6:场景实现

    选手需要与机器人通过语音交互、多轮对话,进行点餐,点餐完成后机器人前往茶水区执行对应任务,任务完成后,机器人把餐食送到办公区指定区域。

图片

核心技术解析

AI ROBOT

  • 对象检测与追踪

    应用场景:该部分主要使用了NVIDIA的TAO Toolkit进行对象检测模型的训练、评估、剪枝和重训练。示范了如何使用预训练的ResNet-18模型对KITTI数据集进行训练和评估。

  核心技术:包括深度学习模型训练、模型剪枝以提高效率、以及使用ONNX格式导出模型以便在不同平台上部署。

    Run TAO training

!tao model ssd train --gpus 1 --gpu_index $GPU_INDEX \-e $SPECS_DIR/ssd_train_resnet18_kitti.txt \-r $USER_EXPERIMENT_DIR/experiment_dir_unpruned \-m $USER_EXPERIMENT_DIR/pretrained_resnet18/pretrained_object_detection_vresnet18/resnet_18.hdf5  

   Evaluate trained models

!tao model ssd evaluate --gpu_index $GPU_INDEX \-e $SPECS_DIR/ssd_train_resnet18_kitti.txt \-m $USER_EXPERIMENT_DIR/experiment_dir_unpruned/weights/ssd_resnet18_epoch_$EPOCH.hdf5

    Prune trained models​​​​​​​

!tao model ssd prune --gpu_index $GPU_INDEX \-m $USER_EXPERIMENT_DIR/experiment_dir_unpruned/weights/ssd_resnet18_epoch_$EPOCH.hdf5 \-o $USER_EXPERIMENT_DIR/experiment_dir_pruned/ssd_resnet18_pruned.hdf5 \-eq intersection \-pth 0.1   

    Retrain pruned models​​​​​​​

!tao model ssd train --gpus 1 --gpu_index $GPU_INDEX \-e $SPECS_DIR/ssd_retrain_resnet18_kitti.txt \-r $USER_EXPERIMENT_DIR/experiment_dir_retrain \-m $USER_EXPERIMENT_DIR/experiment_dir_pruned/ssd_resnet18_pruned.hdf5  

    Evaluate retrained model​​​​​​​

!tao model ssd evaluate --gpu_index $GPU_INDEX \-e $SPECS_DIR/ssd_retrain_resnet18_kitti.txt \-m $USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/ssd_resnet18_epoch_$EPOCH.hdf5

    Visualize inferences​​​​​​​

!tao model ssd inference --gpu_index $GPU_INDEX -i $DATA_DOWNLOAD_DIR/test_samples \-e $SPECS_DIR/ssd_retrain_resnet18_kitti.txt \-m $USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/ssd_resnet18_epoch_$EPOCH.hdf5 \-r $USER_EXPERIMENT_DIR/

    Model Export​​​​​​​

!tao model ssd export --gpu_index $GPU_INDEX \-m $USER_EXPERIMENT_DIR/experiment_dir_retrain/weights/ssd_resnet18_epoch_$EPOCH.hdf5 \-o $USER_EXPERIMENT_DIR/export/ssd_resnet18_epoch_$EPOCH.onnx \-e $SPECS_DIR/ssd_retrain_resnet18_kitti.txt \--batch_size 16 \--gen_ds_config
  • 机械臂控制

    应用场景:该部分主要控制机械臂,从定位物体、抓取到物体的搬运。包括机械臂的坐标转换、夹爪的控制和关节角度的调整。

    核心技术:通过Python代码控制机械臂的动作,使用转换函数处理机器视觉系统与机械臂之间的坐标转换,以及实时反馈控制机械臂的精确位置。​​​​​​​

# 初始化一个MyCobot对象
mc = MyCobot(PI_PORT, PI_BAUD)# 相机坐标(x,y,z)转换为机械臂目标点
cup_target = transform_point(cup_x,cup_y,cup_z)
# 打开夹爪
mc.set_gripper_state(0, 70)
time.sleep(2)
# 机械臂头部到达目标点mc.send_coords(cup_target, 30, 1)
time.sleep(1)
# 控制机械臂上抬避免打到物体
angle_datas = mc.get_angles()
print('angle_datas:',angle_datas)
mc.send_angle(Angle.J2.value,angle_datas[1]-5,20)
time.sleep(2)
# 机械臂头部再次到达目标点
mc.send_coords(cup_target, 30, 1)
time.sleep(3)
# 抓取
mc.set_gripper_state(1, 70)
time.sleep(3)
# 控制关节2运动,将物品拿起
angle_datas = mc.get_angles()
mc.send_angle(Angle.J2.value,angle_datas[1]-23,20)
time.sleep(2)
  • 语音识别

    应用场景:该部分是语音识别流程,从录音、保存音频文件到使用语音识别库(如SpeechRecognition)进行语音到文本的转换。

    核心技术:使用PyAudio进行音频的捕捉和处理,利用SpeechRecognition库进行本地语音识别。​​​​​​​

#语音录制
def record():p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print("请点单...")frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print("点单结束")stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()#语音识别
def detect_voice():r = sr.Recognizer()test = sr.AudioFile(WAVE_OUTPUT_FILENAME)with test as source:audio = r.record(source)return r.recognize_sphinx(audio, language='zh-cn')
  • 自动导航

    该部分主要实现了一个基于ROS(机器人操作系统)的自动导航系统,用于指导机器人在预设环境地图中自主移动到指定位置。以下是该代码实现的技术和场景概括:

    初始化和配置:代码中首先初始化了一个名为map_navigation的ROS节点,这是进行任何ROS通信前的必要步骤。

    设置了三个发布器,分别用于发送速度指令(/cmd_vel)、设置初始位置(/initialpose)和取消导航目标(/move_base/cancel)。

    导航到目标点:通过定义moveToGoal函数,代码实现了机器人到达特定目标位置的功能。这涉及到与move_base动作服务器的交互,该服务器负责处理路径规划和导航。

    动作客户端通过发送一个包含目标位置和姿态的MoveBaseGoal到move_base服务器,从而指示机器人移动到指定位置。

    目标位置的设定和导航执行:目标位置和姿态通过参数(xGoal, yGoal, orientation_z, orientation_w)传递给moveToGoal函数。

    机器人在收到目标位置后,动作客户端等待结果,判断是否成功到达目标。

    结果处理:根据动作客户端返回的状态,判断机器人是否成功到达目标位置,并进行相应的日志记录和反馈。​​​​​​​

import rospy
import actionlib
import sys
from geometry_msgs.msg import PoseWithCovarianceStamped
from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
from actionlib_msgs.msg import *
from actionlib_msgs.msg import GoalID
from geometry_msgs.msg import Point
from geometry_msgs.msg import Twistclass MapNavigation:def __init__(self):self.goalReached = Nonerospy.init_node('map_navigation', anonymous=False)  # 初始化 ROS 节点self.pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10)  # 发布速度指令的发布器self.pub_setpose = rospy.Publisher('/initialpose', PoseWithCovarianceStamped, queue_size=10)  # 发布设置初始姿态的发布器self.pub_cancel = rospy.Publisher('/move_base/cancel', GoalID, queue_size=10)  # 发布取消目标的发布器# move_basedef moveToGoal(self, xGoal, yGoal, orientation_z, orientation_w):       # 移动到目标点ac = actionlib.SimpleActionClient("move_base", MoveBaseAction)      # 创建动作客户端while (not ac.wait_for_server(rospy.Duration.from_sec(5.0))):sys.exit(0)goal = MoveBaseGoal()goal.target_pose.header.frame_id = "map"goal.target_pose.header.stamp = rospy.Time.now()goal.target_pose.pose.position = Point(xGoal, yGoal, 0)goal.target_pose.pose.orientation.x = 0.0goal.target_pose.pose.orientation.y = 0.0goal.target_pose.pose.orientation.z = orientation_zgoal.target_pose.pose.orientation.w = orientation_wrospy.loginfo("Sending goal location ...")ac.send_goal(goal)                          # 发送目标位置ac.wait_for_result(rospy.Duration(600))             # 设置超时时间if (ac.get_state() == GoalStatus.SUCCEEDED):            # 判断是否成功到达目标rospy.loginfo("You have reached the destination")return Trueelse:rospy.loginfo("The robot failed to reach the destination")return Falsemap_navigation = MapNavigation()  # 初始化导航
x_goal, y_goal, orientation_z, orientation_w = (0.0598191, -1.81509, 0.999547, 0.024365)  # 设置需要导航到达的点位
flag_feed_goalReached = map_navigation.moveToGoal(x_goal, y_goal, orientation_z, orientation_w)  # 开始导航,并返回是否到达目标点位
if flag_feed_goalReached:print("command completed")  # 成功到达目标定位
  • 二维码识别抓取

    这份代码主要展示了如何使用Python控制大象机器人的Mercury系列机械臂进行二维码识别和基于位置的物体操作。以下是该代码实现的技术和场景概括:

    硬件设置与初始化:代码首先初始化Mercury机械臂,设置其与计算机的通讯端口。

    同时设置和配置UVC相机,加载相机的校准参数(内参和畸变系数),这些参数用于后续图像处理和位置计算。

    图像捕捉与二维码识别:使用UVC相机捕捉实时图像帧。

    应用stag.detectMarkers方法识别图像中的二维码并获取其角点信息,这是二维码位置识别的关键步骤。

    二维码位置计算与机械臂定位:根据捕获的二维码角点及相机校准参数,计算二维码相对于相机的空间坐标。

    通过手眼标定技术(Eyes_in_hand_right方法),将二维码的相对坐标转换为机械臂基座坐标系中的位置。

    控制机械臂移动到计算出的二维码位置。

    交互执行:机械臂移动到二维码所在位置后,通过控制夹爪的开闭来实现物体的抓取操作。

from pymycobot import Mercury
from uvc_camera import UVCCamera
import stag
import numpy as np  # 导入需要的库mr = Mercury("/dev/ttyACM2")  # 设置右臂端口号mr.send_angles([92.78, -3.19, 0.0, -135.63, -112.56, 70.86, -49.26], 30)  # 将机械臂移至二维码区域
camera_params = np.load("src/camera_params.npz")  # 读取相机配置文件
mtx, dist = camera_params["mtx"], camera_params["dist"]  # 获取相机内参和畸变系数
camera = UVCCamera(4, mtx, dist)  # 设置相机id
camera.update_frame()  # 更新图像帧
frame = camera.color_frame()  # 获取彩色图像帧数据
(corners, ids, rejected_corners) = stag.detectMarkers(frame, 11)  # 根据图像,获取二维码角点
marker_pos_pack = calc_markers_base_position(corners, ids, 32, mtx,dist)  # 根据角点和相机内参、畸变系数,获取二维码相对于相机的坐标
cur_coords = np.array(mr.get_base_coords())  # 获取机械臂末端坐标
cur_bcl = cur_coords.copy()
cur_bcl[-3:] *= (np.pi / 180)  # 将机械臂末端旋转角度转为弧度
right_fact_bcl = Eyes_in_hand_right(cur_bcl, marker_pos_pack)  # 通过手眼标定获取二维码相对于基体的坐标right_target_coords = cur_coords.copy()
right_target_coords[0] = right_fact_bcl[0]
right_target_coords[1] = right_fact_bcl[1]
right_target_coords[2] = right_fact_bcl[2]
mr.send_base_coords(right_target_coords, 30)  # 控制机械臂移动至二维码处mr.set_gripper_value(0, 100)  # 闭合夹爪,抓取物品

报名参赛

AI ROBOT

  • 报名地址

    https://www.raicom.com.cn

    注:进入网站,成功注册之后在“赛事报名”中找到“AI ROBOT创新挑战赛”项目进行报名。

  • 参赛对象

    本科组:全日制高校在读学生(本科、研究生)

    高职组:全日制高校在读学生(高职)

  • 参赛要求

    1) 本赛项为团体赛,以院校为单位组队参赛,本科组、高组须为高校在籍学生和在职老师,不得跨校组队。

    2) 每个赛队由2-3名参赛学生(设队长1名)和1-2名指导老师。

    3)比赛过程中,参赛者需要在规定的时间内完成所选赛项的任务。这些任务可能包括机器人的设计、编程、调试以及实际运行等。

  • 参赛时间(省赛选拔赛)

    报名截止时间:2024年5月30日(最晚截止时间)

    区域赛选拔时间:2024年7月10日— 7月20日

    晋级公示:2024年7月25日(公示时间不少于 5 个工作日)

    注:各区域赛比赛时间和地点等安排以区域赛通知为准。

  • 咨询方式

图片

    随着科技的不断进步,我们相信通过此类竞赛的平台,能够有效促进科技与教育的深度融合,激发更多青年才俊在人工智能和机器人领域的探索热情。

    我们期待看到来自各地的优秀参赛者在本届大赛中展示出色的技术创新和解决方案,共同推动全球机器人技术向更高水平发展。让我们携手前行,共创智能科技的美好未来。

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

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

相关文章

探索中国文本到视频AI模型——Vidu

引言 随着人工智能技术的不断进步,我们见证了从文本到视频内容生成的革命。最近,一个名为Vidu的中国文本到视频AI模型引起了全球的关注。由清华大学和中国AI初创公司声书科技联合开发的Vidu,于2024年4月27日宣布,它声称能够生成高…

个人工控方面收藏网址记录(持续更新中)

1、OPC类 OPC Foundation GitHub Downloads - Unified Automation (unified-automation.com) 物联网IoT协议之OPC UA快速入门教程 | 源码先生的调试人生 (debugself.com) OPC Servers - OPC UA Migration - 100 Solutions by Matrikon (matrikonopc.com) Prosys OPC UA Simu…

k8s coredns配置

1.coredns可根据集群具体数量修改pod数,官方推荐比例为5/1,即有15台服务器最好是3个pod。 2.coredns会继承pod所在主机的dns解析,修改了主机的dns解析之后,coredns有一段时间的缓存,重启coredns才会在集群内部立刻生效该解析。 …

SpringBoot3集成WebSocket

标签:WebSocket,Session,Postman。 一、简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据&#xf…

003_PyCharm的安装与使用

如果你正在学习PyQt,本系列教程完全可以带你入门直至入土。 所谓从零开始,就是从软件安装、环境配置开始。 不跳过一个细节,不漏掉一行代码,不省略一个例图。 IDE 开始学习一个编程语言,我们肯定是首先得安装好它&…

Python代码:十、字符串连接

1、题目 小明有两个最好的朋友,他们的名字分别用input读入记录在两个字符串中,请使用字符串连接()帮助牛牛将两个朋友的名字依次连接在一个字符串中输出。 2、代码 import sysstr1 input() str2 input() str3 str1 str2 pr…

从0到1:使用HuggingFace的管线加载Diffusion模型生成第一张图像!

Hugging Face系列1:详细剖析Hugging Face网站资源 前言本篇摘要1. Hugging Face Hub三大件1.1 模型1.1.1 模型简介1.1.2 制作模型卡片1.1.3 模型下载和上传1.1.4 模型应用 1.2 数据集1.2.1 数据集简介1.2.2 调用代码1.2.3 AutoTrain在线微调 1.3 Space应用1.3.1 内容…

理解 Python 中的 `super()` 与 `__init__()` 方法

在 Python 的面向对象编程中,super() 函数和 __init__() 方法是两个非常重要的概念。它们在类的继承和初始化过程中扮演着关键的角色。本文将深入探讨这两个概念的工作原理,并通过示例代码来展示它们的使用。 基本原理 __init__() 方法 __init__() 是…

C# 结合 JavaScript 对 Web 控件进行数据输入验证

目录 关于数据验证 范例运行环境 验证设计 JavaScript 方法 设计 实现 调用示例 C# 方法 设计 实现 调用示例 小结 关于数据验证 在 Web 应用的录入界面,数据验证是一项重要的实现功能,数据验证是指确认 Web 控件输入或选择的数据&#xff…

C语言.动态内存管理

动态内存管理 1.为什么要有动态内存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常见的动态内存管理的错误4.1对NULL指针解引用操作4.2对动态开辟空间的越界访问4.3对非动态开辟内存使用free释放4.4使用free释放一块动态开辟内存的一部分4.5对…

Signal 即将成为JavaScript的一部分

什么是响应性? 在过去的几年中,响应性成为了所有现代前端框架以及React库的核心。 对于不熟悉前端开发的人来说,起初这可能是一个令人困惑的概念,因为它改变了常规的、自上而下的、从调用者到被调用者的顺序工作流。 在响应性范…

AR系列路由器配置VLAN间通信

AR路由器是华为公司推出的企业级路由器产品系列,具有高可靠性、高性能和易管理等特点。AR 系列路由器提供的功能包括路由转发、安全接入、语音、视频、无线等多种业务,支持各种接入方式和协议,并且可以方便地进行扩展和升级。 实验拓扑图&…

【全开源】云界旅游微信小程序(源码搭建/上线/运营/售后/维护更新)

开启您的云端旅行新体验 一、引言 在快节奏的现代生活中,旅行成为了人们放松身心、探索世界的重要方式。让您的旅行更加便捷、高效,打造了云界旅游小程序,带您领略云端旅行的无限魅力。 二、小程序功能概览 云界旅游小程序集成了丰富的旅游…

【Maven】Nexus私服简介_下载安装_登录

1、简介 1.1介绍 Nexus私服,也被称为Maven仓库管理器,是许多公司在自己的局域网内搭建的远程仓库服务器。提供了强大的仓库管理功能和构件搜索功能,使得开发人员能够更方便地管理和使用Maven项目中的依赖库。 1.2作用 内网访问&#xff1…

Python代码:七、小数化整数

1、题目 日常生活中我们会遇到很多小数,但是有的人不喜欢小数,因此会用四舍五入的方式将其去掉。在Python中我们更加简单,可以利用强制类型转换将小数转变成整数,请你试一试。 2、代码 import sysn float(input()) print(int(…

微服务(Spring Clould)--Nacos的安装、配置

简介:(取自官网) Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的数据结构在对任务进行排序。 // 两个任务队列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像数组中推入一个任务 pop(timerQueue); // 从数组中弹出一个任务 time…

【深入理解MySQL的索引数据结构】

文章目录 &#x1f4d5;索引底层数据结构与算法&#x1f4d9;索引数据结构&#x1f4d8;二叉树&#x1f4d8;红黑树&#x1f4d8;Hash&#x1f4d8;B-Tree&#x1f4d8;BTree &#x1f4d9;表在不同存储引擎的存储结构&#x1f4d8;MyISAM存储引擎索引实现&#x1f4da;文件结构…

C语言如何创建⼀个动态链表?

一、问题 创建动态链表就是指在程序执⾏过程中&#xff0c;从⽆到有&#xff0c;按照需求开辟结点和输⼊各结点数据&#xff0c;并建⽴起前后相连接的关系。那么&#xff0c;如何创建动态链表呢&#xff1f; 二、解答 以建⽴⼀个有任意名学⽣数据的单向动态链表为例&#xff0…

使用mysql主从热备+keepalived服务+ipvsadm工具 实现 mysql高可用主备+负载均衡

目录 1、工作原理 2、环境准备 3、分别在主服务器和备用服务器上安装keepalived和ipvsadm 4、修改keepalived服务的配置文件 4.1 修改主服务器上的keepalive服务的配置文件 4.2 修改备用服务器上的keepalive服务配置文件 5、编写mysql监控脚本放到主服务器上 6、在主服…