人形機器人場景應用全解析,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.pswp.cn/diannao/13462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13462.shtml
英文地址,請注明出處:http://en.pswp.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;因為它改變了常規的、自上而下的、從調用者到被調用者的順序工作流。 在響應性范…