人形机器人场景应用全解析,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 开始学习一个编程语言,我们肯定是首先得安装好它&…

std::funture和std::promise

#include <iostream> #include <thread> #include <future>void calculateResult(std::promise<int>& promiseObj) {// 模拟耗时计算std::this_thread::sleep_for(std::chrono::seconds(2));// 设置结果到 promise 中promiseObj.set_value(42); }i…

信息系统项目管理师——十大管理过程输入、工具和技术、输出(论文篇)二

六、项目风险管理 规划风险管理 在撰写关于“规划风险管理”的论文时&#xff0c;这个过程是项目风险管理的第一步&#xff0c;旨在建立风险管理的框架&#xff0c;为整个项目周期内的风险识别、分析、应对和监控奠定基础。以下是规划风险管理过程中可能涉及的输入、工具和技…

Python学习(五)异常处理

异常概念 异常的捕获方法 try: f open("D:/abc.txt","r",encoding"UTF-8") except: print("出现异常了&#xff0c;因为文件不存在&#xff0c;我将open的模式&#xff0c;改为w模式去打开") f open("D:/abc.txt&qu…

Python代码:十、字符串连接

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

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

Hugging Face系列1&#xff1a;详细剖析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 的面向对象编程中&#xff0c;super() 函数和 __init__() 方法是两个非常重要的概念。它们在类的继承和初始化过程中扮演着关键的角色。本文将深入探讨这两个概念的工作原理&#xff0c;并通过示例代码来展示它们的使用。 基本原理 __init__() 方法 __init__() 是…

Vue中的全局事件总线:EventBus与$bus的比较详解与实战应用

EventBus实例&#xff1a; var EventBus new Vue() 会创建一个名为EventBus的Vue实例&#xff0c;并将其存储在变量EventBus中。Vue.prototype.$bus new Vue() 则直接在Vue的原型上创建一个新的Vue实例&#xff0c;并将其赋值给$bus属性。 使用方式&#xff1a; var EventBus…

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

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

类对象作为类成员

在C中&#xff0c;类对象可以作为另一个类的成员变量。这种设计方式可以用于创建复杂的对象结构&#xff0c;使得一个类的对象能够包含另一个类的对象。这种嵌套类的组合方式可以增强代码的可重用性和模块化。 类对象作为类成员的示例 让我们通过一个示例来解释这一概念。假设…

武汉信息系统建设和服务能力评估CS认证咨询

很多企业在咨询信息系统建设和服务能力评估的时候喜欢百度搜索&#xff0c;不管是本地咨询机构还是外地咨询机构只要价格便宜就找谁&#xff0c;这个在低等级的CS1是可以这么操作的&#xff0c;一旦上升到CS2级别及以上的&#xff0c;我们一般不推荐找外地咨询机构&#xff0c;…

【文末附gpt升级方案】字节跳动发布豆包大模型:AI领域的革新与引领

随着科技的飞速进步&#xff0c;人工智能&#xff08;AI&#xff09;已逐渐成为推动社会发展的重要力量。在这一背景下&#xff0c;字节跳动公司以其前瞻性的眼光和创新能力&#xff0c;于XXXX年XX月XX日正式发布了豆包大模型&#xff0c;这一举动无疑在AI领域掀起了新一轮的浪…

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对…

军训中的美差

大学时候的军训是在二年级秋季开学前进行的&#xff0c;地点是在河北的某部队。 军训时候的分班是按照学号重新划分的&#xff0c;我的学号在大学宿舍八个人中排最后&#xff0c;恰好就和其他宿舍的人分在了一个班。训练正步走的时候&#xff0c;站在我左边的那个哥们&#xf…

Signal 即将成为JavaScript的一部分

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