人工智能(AI)已成為推動科技革命和產業變革的關鍵力量。隨著大模型等AIGC技術的迅猛發展,AI正深刻改變我們的生活并重新定義生產方式。越來越多人期望將AI技術從純粹的思維和計算擴展到與物理世界的互動中,即發展具身智能。
為了推廣并深化具身智能的創新和應用,“睿抗機器人開發者大賽——AI ROBOT創新挑戰賽”應用而生,大賽旨在激發全國高校學生的研究熱情,探索AI與機器人技術的融合,展示尖端技術成果。
這一平臺不僅可以促進技術交流和學習,更可以通過競賽提高中國大學生的科技實踐能力,推動教育與產業的深度融合,為機器人產業注入新活力。
本屆睿抗機器人開發者大賽,特選用大象機器人公司的輪式人形機器人作為官方賽具。
這款機器人以其創新的設計和卓越的性能,在全球范圍內獲得了廣泛關注和認可。其輪式移動底盤結合雙臂協作機械臂,賦予了其卓越的靈活性和運動能力,使其能夠完成各種復雜的動作和任務。
通過本次大賽,參賽者有機會深入了解和應用機器人動作控制、視覺處理、大語言模型以及人機交互等前沿技術,這不僅能夠提升他們的技術能力,也將推動機器人技術的創新發展。
技術亮點
AI ROBOT
智能機器人雙臂協同操作
大模型賦能機器人實現人類語言指令識別和理解
基于GPU的高階渲染引擎,支持高保真傳感器數據輸出的物理仿真,實現機器人快速開發
快速生成合成數據降低數據采集難度
競賽任務
AI ROBOT
任務1:機器人運動控制
選手需要通過發布運動指令或運行控制代碼實現對機器人的簡單運動控制。
Isaac Sim 是由 NVIDIA 開發的一個機器人模擬平臺,主要用于機器人仿真和人工智能的訓練。選手需要使用現場提供的模型文件進行機器人仿真。
選手需要使用平臺提供的待抓取數字資產文件在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 Twist class MapNavigation: def __init__(self): self.goalReached = None rospy.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_base def 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.0 goal.target_pose.pose.orientation.y = 0.0 goal.target_pose.pose.orientation.z = orientation_z goal.target_pose.pose.orientation.w = orientation_w rospy.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 True else: rospy.loginfo("The robot failed to reach the destination") return False map_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 個工作日)
注:各區域賽比賽時間和地點等安排以區域賽通知為準。
隨著科技的不斷進步,我們相信通過此類競賽的平臺,能夠有效促進科技與教育的深度融合,激發更多青年才俊在人工智能和機器人領域的探索熱情。
我們期待看到來自各地的優秀參賽者在本屆大賽中展示出色的技術創新和解決方案,共同推動全球機器人技術向更高水平發展。讓我們攜手前行,共創智能科技的美好未來。
審核編輯 黃宇
-
機器人
+關注
關注
211文章
28379瀏覽量
206912 -
AI
+關注
關注
87文章
30728瀏覽量
268886 -
人工智能
+關注
關注
1791文章
47183瀏覽量
238245 -
python
+關注
關注
56文章
4792瀏覽量
84627 -
機械臂
+關注
關注
12文章
513瀏覽量
24554
發布評論請先 登錄
相關推薦
評論