我現(xiàn)在將介紹一個利用myCobot的實驗。這一次,實驗將使用模擬器而不是物理機器進行。當(dāng)嘗試使用機器人進行深度強化學(xué)習(xí)時,在物理機器上準備大量訓(xùn)練數(shù)據(jù)可能具有挑戰(zhàn)性。但是,使用模擬器,很容易收集大量數(shù)據(jù)集。然而,對于那些不熟悉它們的人來說,模擬器可能看起來令人生畏。因此,我們嘗試使用由 Nvidia 開發(fā)的 Isaac Gym,它使我們能夠?qū)崿F(xiàn)從創(chuàng)建實驗環(huán)境到僅使用 Python 代碼進行強化學(xué)習(xí)的所有目標(biāo)。在這篇文章中,我將介紹我們使用的方法。
1. 簡介
1.1 什么是Isaac Gym?
Isaac Gym是Nvidia為強化學(xué)習(xí)開發(fā)的物理模擬環(huán)境。基于 OpenAI Gym 庫,物理計算在 GPU 上進行,結(jié)果可以作為 Pytorch GPU 張量接收,從而實現(xiàn)快速模擬和學(xué)習(xí)。物理模擬是使用 PhysX 進行的,它還支持使用 FleX 的軟體模擬(盡管使用 FleX 時某些功能受到限制)。
截至 2023 年 4 月的最新版本是預(yù)覽版 3。雖然早期版本有明顯的錯誤,但版本 6000 及更高版本已經(jīng)看到了改進和添加功能,使其成為一個非常有吸引力的模擬環(huán)境。計劃與Isaac Sim集成的Omniverse Isaac Gym的未來版本。但是,Isaac Gym本身是獨立的,可用于Python中的實驗。在之前的博客文章(“GPU 服務(wù)器擴展和 A<> 基準測試”)中,提到使用 Omniverse Isaac 模擬器的研究和開發(fā)已經(jīng)開始,但 Isaac Gym 被優(yōu)先用于強化學(xué)習(xí)模擬。將Isaac Gym與Omniverse集成的最大好處可能是能夠使用逼真的視覺效果進行圖像識別和高精度連續(xù)身體模擬,例如光線追蹤。看到未來如何發(fā)展將是令人興奮的。
PhysX 是由 Nvidia 開發(fā)的物理引擎,可在模擬器的 GPU 上進行實時物理計算。雖然 Isaac Gym 使用的版本尚未在公開的 arXiv 或文檔中指定,但考慮到它的發(fā)布時間和與 FleX 的分離,它很可能基于 PhysX 4。在 Omniverse 中,使用 PhysX 5 并集成了 FleX。
FleX 也是 Nvidia 開發(fā)的物理引擎,但與 PhysX 的剛體模擬相比,它能夠使用基于粒子的模擬來表示軟體和流體。
1.2 本文的目的
我將告訴您我如何使用Isaac Gym輕松創(chuàng)建和學(xué)習(xí)強化學(xué)習(xí)任務(wù)。作為實際的測試用例
1.3 環(huán)境
PC1: Ubuntu 20.04, Python 3.8.10, Nvidia RTX A6000
PC2: Ubuntu 18.04, Python 3.8.0, Nvidia RTX 3060Ti
請注意,需要 Nvidia Driver 470 或更高版本。
2.安裝
在本章中,我們將安裝 Isaac Gym 和 IsaacGymEnvs。推薦環(huán)境為 Ubuntu 18.04、20.04、Python 3.6~3.8、Nvidia Driver==470。請注意,由于 python_requires<3.9 在 Isaac Gym 的 setup.py 中有描述,因此不能按 3.9 及更高版本的原樣使用。尚未在 Ubuntu 22.04 上進行測試,但可能沒問題。
2.1 Isaac Gym
您可以從 Nvidia的開發(fā)人員頁面免費下載Isaac Gym主軟件包。文檔以HTML格式保存在軟件包的“docs”目錄中(請注意,網(wǎng)站上沒有)。下載后,您可以使用以下命令安裝它:
$ cd isaacgym/python$ pip install -e .
但是,由于 PyTorch 被指定為“torch ==1.8.0”和“torchvision ==0.9.0”,因此在使用 GPU 時,您應(yīng)該首先從與您的環(huán)境匹配的官方頁面安裝它。Docker 和 Conda 虛擬環(huán)境設(shè)置文件也可用。由于我使用 venv 來管理我的 Python 虛擬環(huán)境,所以我將繼續(xù)使用 pip。請注意,由于代碼塊問題,我用全角字符寫了“>”
2.2IsaacGymEnvs
IsaacGymEnvs是一個Python軟件包,用于在Isaac Gym中測試強化學(xué)習(xí)環(huán)境。通過參考實現(xiàn)的任務(wù),可以使用 rl-games 中實現(xiàn)的強化學(xué)習(xí)算法輕松構(gòu)建強化學(xué)習(xí)環(huán)境。即使對于那些計劃編寫自己的強化學(xué)習(xí)算法的人,也建議嘗試使用此軟件包與 Isaac Gym 一起學(xué)習(xí)。它最初包含在 Isaac Gym 中,在 Preview3 中分離出來,現(xiàn)在在 GitHub 上公開可用。
$ git clone https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.git$ cd IsaacGymEnvs$ pip install –e .
這樣,必要的安裝現(xiàn)在就完成了。
3. 演示
當(dāng)您安裝 Isaac Gym 并查看軟件包內(nèi)部時,您會發(fā)現(xiàn)有許多示例環(huán)境可用。這些也出現(xiàn)在文檔中,但在本文中,我們將在第 4 章中重點介紹一些與創(chuàng)建自定義強化學(xué)習(xí)環(huán)境相關(guān)的示例。如果已設(shè)置環(huán)境,最好嘗試運行其中一些示例,看看它們可以執(zhí)行哪些操作。您甚至可能會發(fā)現(xiàn)它們提供了有關(guān)如何使用 API 完成您有興趣嘗試的事情的一些指導(dǎo)(如果您仍然不確定,請隨時通讀文檔)。
3.1.Isaac Gym
截至預(yù)覽版 4,有 27 個示例環(huán)境可用。
● “1080_balls_of_solitude.py”
“1080_balls_of_solitude.py”腳本生成一組金字塔形的球,這些球會掉下來。在沒有選項的情況下運行腳本只允許同一環(huán)境(即在同一金字塔內(nèi))內(nèi)球之間的碰撞。“--all_collisions”選項允許與其他環(huán)境中的球發(fā)生碰撞,而“--no_collisions”選項可禁用同一環(huán)境中物體之間的碰撞。此腳本還演示如何配置“create_actor”函數(shù)的參數(shù)以將對象添加到環(huán)境中。
● “dof_controls.py”
該腳本具有一個以3D方式移動的Actor,這是OpenAI Gym中眾所周知的Cartpole問題的變體。它演示了如何為機器人的每個自由度 (DOF) 設(shè)置控制方法,可以是位置、速度或力。一旦設(shè)置,這些控制方法在模擬過程中無法更改,并且只能通過所選方法控制Actor。忘記設(shè)置這些控制方法可能會導(dǎo)致執(zhí)行組件無法移動。
● “franka_nut_bolt_ik_osc.py”
這個腳本展示了Franka Robotics的多關(guān)節(jié)機器人手臂Panda拿起一個螺母并將其擰到螺栓上。手臂使用反向運動學(xué)(IK)進行控制。文件名包括“OSC”,但此腳本中未實現(xiàn) OSC 控制。但是,腳本“franka_cube_ik_osc.py”包括 OSC 控制。
通過在預(yù)覽版 4 中添加 SDF 碰撞,可以加載高分辨率碰撞文件,從而可以在螺母和螺栓槽之間精確計算碰撞(圖 1)。雖然初始 SDF 加載可能需要一些時間,但后續(xù)加載會緩存并快速啟動。
圖 1:熊貓臂將螺母驅(qū)動到螺栓上的模擬
● interop_torch.py
此腳本演示如何使用函數(shù)get_camera_image_gpu_tensor直接從 GPU 上的相機獲取傳感器數(shù)據(jù)。獲得的數(shù)據(jù)可以使用OpenCV輸出為圖像文件,就像常規(guī)物理相機一樣。執(zhí)行時,該腳本會創(chuàng)建一個名為 interop_images 的目錄,并將相機圖像保存在該目錄。由于仿真數(shù)據(jù)不在GPU和CPU之間交換,因此可以快速處理圖像。但是,如果使用多 GPU 環(huán)境,則可能會發(fā)生錯誤。論壇上建議的一種解決方案 是將 GPU 使用率限制為 CUDA_VISIBLE_DEVICES=0,但這在用于此腳本的環(huán)境中不起作用。
3.2.Isaac Gym環(huán)境
實現(xiàn)了 14 個強化學(xué)習(xí)任務(wù),可以使用任務(wù)目錄中的腳本執(zhí)行基準測試。
● 關(guān)于配置文件
為每個任務(wù)準備一個用 YAML 編寫的配置文件。常用設(shè)置位于 cfg 目錄的 config.yaml 中,可以使用 Hydra 使用命令行選項更改設(shè)置,而無需更改 YAML 文件。每個任務(wù)環(huán)境和 PhysX 的詳細設(shè)置都存儲在 cfg/task/ 目錄中,算法選擇和結(jié)構(gòu)存儲在 cfg/train/ 目錄中。
● 關(guān)于算法實現(xiàn)
強化學(xué)習(xí)算法在Rl游戲中使用PPO實現(xiàn)。盡管 docs/rl_examples.md 提到了選擇 SAC 的選項,但它目前未包含在存儲庫中。
NN 層通常是 MLP,某些模型還包括 LSTM 層作為 RNN 層。盡管也可以添加 CNN 圖層,但沒有包含 CNN 圖層的示例模型。在第 5.2 節(jié)中,我們將討論將 CNN 層添加到模型的經(jīng)驗。
示例代碼可以在 train.py 所在的 isaacgymenvs 目錄中執(zhí)行。
● 卡特桿
python train.py task=Cartpole [options]
這是經(jīng)典的推車任務(wù),目標(biāo)是以桿子不會掉落的方式移動推車。默認情況下,模型訓(xùn)練 100 個 epoch,在 PC2 RTX 2Ti 環(huán)境中大約需要 3060 分鐘,在無外設(shè)模式下(沒有查看器)只需要 15 秒。當(dāng)使用推理測試模型時,它表現(xiàn)良好,桿子保持直立(經(jīng)過 30 個時期的訓(xùn)練后,模型經(jīng)過足夠的訓(xùn)練以保持極點直立)。雖然看起來很簡單,但模型可以學(xué)習(xí)成功完成此任務(wù)的事實令人放心。
● 弗蘭卡立方體堆棧
python train.py task=FrankaCubeStack [options]
這是一項使用熊貓手臂堆疊盒子的任務(wù)。7軸臂的關(guān)節(jié)運動是一步一步學(xué)習(xí)的。默認設(shè)置為 10, 000 個紀元,但手臂運動可以在大約 1, 000 個紀元內(nèi)學(xué)習(xí)。在 PC1 RTX A6000 環(huán)境中,完成 1, 000 個時期的訓(xùn)練大約需要 20-30 分鐘。圖 2 和圖 3 顯示了手臂的前后狀態(tài),從隨機移動到成功抓取和堆疊盒子。
動作空間由手臂關(guān)節(jié)的 7 個維度組成,而觀察空間共有 26 個維度。獎勵函數(shù)旨在針對涉及靠近盒子、抬起盒子、將盒子彼此靠近以及成功完成堆疊任務(wù)的操作進行不同的縮放。
令人驚訝的是,手臂可以如此容易地學(xué)習(xí)這種級別的任務(wù)。但是,請務(wù)必注意,學(xué)習(xí)假定定義的世界坐標(biāo)系以及對象的已知位置和方向。因此,將這種學(xué)習(xí)行為應(yīng)用于物理機器人可能并不那么簡單。
26維觀測細分:
● 7 個尺寸,用于移動盒子的位置和方向
● 從被堆疊的盒子到被移動的盒子的矢量的 3 個維度
● 7 種尺寸,用于夾持器的抓取位置和方向
● 9 種尺寸的手臂關(guān)節(jié)和抓手手指
圖 2:訓(xùn)練前的 FrankaCubeStack
圖 3:訓(xùn)練后的 FrankaCubeStack
train.py 中的一些常見選項包括:
● 無頭(默認值:假):設(shè)置為 True 時,不會啟動查看器。這對于繁重的訓(xùn)練或捕獲相機圖像時非常有用,因為觀看者可能會顯著減慢該過程。
● 測試(默認值:False):設(shè)置為 True 時,學(xué)習(xí)模式將關(guān)閉,允許您無需訓(xùn)練即可運行環(huán)境。這對于生成環(huán)境和檢查學(xué)習(xí)結(jié)果很有用。
● 檢查點(默認:“):指定要加載的 PyTorch 權(quán)重文件。學(xué)習(xí)結(jié)果保存在 runs//nn/.pth 中,此選項用于恢復(fù)訓(xùn)練或測試。
● num_envs(默認:int):指定并行學(xué)習(xí)環(huán)境的數(shù)量。設(shè)置適當(dāng)?shù)臄?shù)字以避免在測試期間出現(xiàn)大量查看器非常重要(此選項也可以在訓(xùn)練期間設(shè)置,但更改它可能會導(dǎo)致由于批量大小和干擾而導(dǎo)致錯誤)。
請注意,train.py 配置horizon_length和minibatch_size,但batch_size = horizon_length * num_actors * num_agents,并且batch_size必須能被minibatch_size整除。此外,num_actors 和num_agents與num_envs成正比,因此僅更改num_envs可能會導(dǎo)致錯誤。
其他樣本可以在環(huán)境中輕松嘗試,因此請嘗試一些有趣的測試。
3.3 查看器提示
● 繪制碰撞網(wǎng)格
模擬器通常會渲染對象的視覺網(wǎng)格,但在 Isaac Gym 的查看器中,您可以更改它以渲染碰撞網(wǎng)格體。為此,請轉(zhuǎn)到菜單窗口中的查看器選項卡,然后選中“渲染碰撞網(wǎng)格”。如果對象行為異常,最好檢查碰撞網(wǎng)格是否正確加載(有時視覺網(wǎng)格和碰撞網(wǎng)格具有不同的方向,或者網(wǎng)格可能未正確加載或在模擬器中沒有足夠的細節(jié))。
圖 4:繪制碰撞網(wǎng)格
● 減少繪圖環(huán)境
您可以將渲染環(huán)境減少到只有一個,而無需更改任何設(shè)置。通過在 Actor 菜單中選中“僅顯示選定的環(huán)境”(如圖 5 所示),將僅顯示選定的環(huán)境。如果有任何奇怪的行為,可以通過輸出環(huán)境編號并僅呈現(xiàn)該環(huán)境來進行調(diào)試。這也減輕了渲染負載,并可以提高 FPS。
圖 5:對繪圖環(huán)境進行編號
● 更改初始相機位置
初始相機位置和方向可以使用 gymapi 的viewer_camera_look_at(查看器、middle_env、cam_pos、cam_target)進行設(shè)置。在用于訓(xùn)練的任務(wù)腳本中,需要重寫 set_viewer 函數(shù)才能進行更改。
4. 原始環(huán)境和任務(wù)創(chuàng)建
終于到了為主要主題創(chuàng)建原始任務(wù)的時候了。
4.1. 準備
準備腳本和配置文件。目標(biāo)是學(xué)習(xí)一個簡單的任務(wù),使用Mycobot進行物體拾取。因此,我們將繼續(xù)創(chuàng)建一個名為“MycobotPicking”的任務(wù)。我們需要三個文件:
● 任務(wù):主 Python 腳本
● cfg/task:環(huán)境和模擬參數(shù)的 YAML 配置文件
● cfg/train:用于學(xué)習(xí)算法、神經(jīng)網(wǎng)絡(luò)層和參數(shù)的 YAML 配置文件。
我們可以參考前面提到的“FrankaCubeStack”任務(wù)并相應(yīng)地創(chuàng)建這些文件。配置文件特別重要,我們可以根據(jù)自己的要求復(fù)制和修改它們。
如演示所示,我們可以使用命令行選項從 train.py 文件加載任務(wù)腳本。因此,我們需要在 tasks 目錄的 init.py 文件中為 task 類添加一個 import 語句,并在傳遞參數(shù)時添加任務(wù)名稱。
4.2. 環(huán)境創(chuàng)建
任務(wù)類是通過繼承任務(wù)/基目錄中的 VecTask 類創(chuàng)建的,任務(wù)具有以下結(jié)構(gòu),如圖 6 所示。
圖 6:任務(wù)配置。帶有橙色框的那些不需要編輯,并且為每個任務(wù)創(chuàng)建帶有綠色框的那些。
4.2.1. __init__處理
1. 創(chuàng)建模擬器和環(huán)境
● create_sim:此函數(shù)生成模擬器的實例。過程本身在父類中定義,屬性在配置文件中設(shè)置,例如重力和步長時間。與FrankaCubeStack類似,該函數(shù)使用以下兩個函數(shù)來生成接地平面和執(zhí)行組件。
● create_ground_plane:此功能通過輸入平面的法線方向生成接地平面。如果要創(chuàng)建不平坦的地形,可以參考terrain_creation示例。
● create_envs:此函數(shù)加載并設(shè)置角色文件的屬性,生成執(zhí)行組件并并行化環(huán)境。在這個任務(wù)中,我們從URDF生成了myCobot,從create_box API生成了目標(biāo)對象。myCobot 的 URDF 基于之前使用 MoveIt 實驗中使用的 URDF,我們添加了一個用于揀選的抓手(有關(guān)抓手的詳細信息在第 5.1 節(jié)中解釋)。
2. 數(shù)據(jù)初始化
● init_data:此函數(shù)從配置文件定義環(huán)境變量,并為 Isaac Gym (PhysX) 處理的數(shù)據(jù)張量準備緩沖區(qū)。計算狀態(tài)和獎勵的必要數(shù)據(jù)定義為類變量。API 將張量數(shù)據(jù)加載到緩沖區(qū)中,緩沖區(qū)通過調(diào)用相應(yīng)的刷新函數(shù)每一步更新一次。
4.2.2. 處理步驟
1. 分步處理:
主步驟函數(shù)在父類中定義,不需要修改。但是,以下兩個步驟作為抽象方法是必需的:
● pre_physics_step:使用動作操縱演員。操作的大小在配置中定義為 [“env”][“numActions”]。對于myCobot的6軸臂和夾持器,我們將其設(shè)置為7維。
● post_physics_step:計算觀察結(jié)果和獎勵。還要檢查是否重置環(huán)境。我們將其設(shè)置為在達到最大 500 步或成功提升后重置。
固定步序,應(yīng)用物理模擬→→觀察獎勵計算的動作,傳遞數(shù)據(jù)進行學(xué)習(xí)。即使您在這里只寫“pass”,也可以在啟動查看器時檢查環(huán)境。
● reset_idx:將環(huán)境返回到其初始狀態(tài)。當(dāng)然,初始狀態(tài)的隨機性與學(xué)習(xí)的泛化密切相關(guān)。我們將myCobot設(shè)置為初始姿勢,并隨機重置目標(biāo)對象在myCobot可到達范圍內(nèi)的位置。
2. 狀態(tài)和獎勵計算:
● compute_observation:使用刷新功能更新每個緩沖區(qū),并將所需的狀態(tài)放入obs_buf。obs_buf的大小在配置中定義為 [“env”][“numObservation”]。
● compute_reward:計算獎勵。當(dāng)抓手接近目標(biāo)物體的抓握位置(手指之間)時,獲得獎勵,并且隨著目標(biāo)物體高度的增加而獲得更大的獎勵。
4.3. 培訓(xùn)的執(zhí)行
現(xiàn)在任務(wù)框架已創(chuàng)建,讓我們訓(xùn)練模型。我們可以使用以下命令開始訓(xùn)練模型:
python train.py task=MycobotPicking --headless
200 個 epoch 后,將保存初始權(quán)重,如果獎勵提高,將保存新的權(quán)重。但是,我們創(chuàng)建的任務(wù)可能無法完美運行,訓(xùn)練過程可能會停止快速進行。在下一節(jié)中,我將討論我對任務(wù)所做的調(diào)整,以提高其性能。
4.4. 任務(wù)協(xié)調(diào)
通過使用學(xué)習(xí)的權(quán)重進行測試,您可以調(diào)試訓(xùn)練效果不佳的原因。您運行了命令
python train.py task=MycobotPicking test=True checkpoint=runs/MycobotPicking/nn/[checkpoint].pth
以測試模型。但是,您遇到了夾持器移動不佳的問題。盡管您努力解決問題,但您得出的結(jié)論是 URDF 不支持閉環(huán)結(jié)構(gòu),因此難以準確模擬夾持器的運動。因此,您決定使用基于規(guī)則的方法來控制夾持器的關(guān)閉和提升動作。您將夾持器的手指固定在固定鏈接上,并將操作空間從 7 個維度減少到 6 個維度。您還注意到,在使用模擬器控制機器人手臂時,最好使用沒有閉環(huán)的抓手,例如熊貓手臂。
您面臨的另一個問題是,代理在一定距離處停止接近物體并猶豫是否觸摸它,從而導(dǎo)致獎勵降低。您修改了獎勵系統(tǒng),方法是使用閾值距離作為階躍函數(shù)增加獎勵函數(shù)的值,從而在代理到達目標(biāo)點時最大化獎勵。您還刪除了任務(wù)完成后的環(huán)境重置,因為它會導(dǎo)致代理在達到實際目標(biāo)之前停止學(xué)習(xí)。相反,您將最大步驟數(shù)調(diào)整為任務(wù)完成所需的數(shù)量,從而提高了學(xué)習(xí)速度。
你還發(fā)現(xiàn),過于嚴厲地懲罰困難的任務(wù)會使強化學(xué)習(xí)代理過于保守。這給了智能體更像人類的個性,使學(xué)習(xí)過程更加有趣。最后,您在 FrankaCabinet 基準測試任務(wù)中遇到了類似的現(xiàn)象,即代理在將抽屜拉到一定距離后會停止學(xué)習(xí),即使完全拉出抽屜可以獲得更高的獎勵。您沒有解決此問題,而是刪除了任務(wù)完成后的環(huán)境重置,并調(diào)整了最大步驟數(shù)以順利完成任務(wù)。
圖 7:myCobot 遠離物體
手臂的自相撞被忽略了。雖然我能夠到達所需的位置,但手臂現(xiàn)在處于完全忽略自碰撞的位置,就像八字形一樣。我試圖研究是否可以在文檔中設(shè)置自碰撞計算,但它效果不佳。首先,將提供的URDF中的所有關(guān)節(jié)角度限制都設(shè)置為-3.14~3.14是不現(xiàn)實的,因此我決定調(diào)整每個關(guān)節(jié)角度的上限和下限以避免自碰撞。關(guān)節(jié)角度移動到最大可能值的原因仍然未知。
圖8:忽略事故碰撞的myCobot
手臂并沒有完全停在它應(yīng)該停的地方,而是在它周圍搖擺。我們希望動作在到達目標(biāo)位置時接近 0,但很難實現(xiàn),并且手臂在目標(biāo)位置周圍不斷振動。我們嘗試通過精確設(shè)置目標(biāo)位置來懲罰動作并調(diào)整獎勵,但這并沒有改善結(jié)果。我們決定不擔(dān)心這個問題,因為它可以在實際操作中由基于規(guī)則的控制來處理。
雖然這不是必備品,但我們希望抓手朝下以獲得更好的外觀。因此,我們在獎勵函數(shù)中添加了一個懲罰項,用于懲罰抓手角度。圖 9 顯示了微調(diào)之前的學(xué)習(xí)結(jié)果。
圖 9:在微調(diào)之前學(xué)習(xí)后的 MyCobot
上述調(diào)整的結(jié)果如圖 10 所示。如果可以在實際機器人上達到這種精度水平,它應(yīng)該能夠充分提升物體。
圖 10:微調(diào)后訓(xùn)練后的 MyCobot
5. 其他
我將介紹不好的故事和我想嘗試的故事。
5.1. 自制 URDF 抓手不起作用的故事
myCobot的URDF基于之前嘗試移動實際機器人時使用的URDF,但它不包括夾持器。盡管在官方 GitHub 頁面上有一個抓手模型,但它只提供了一個帶有可視化表示的 DAE 文件,如圖 11(a) 所示。要創(chuàng)建可在模擬器中使用的 URDF,需要為每個關(guān)節(jié)部件提供單獨的 3D 模型。因此,使用Blender,我們按關(guān)節(jié)劃分零件(圖11(c)),并創(chuàng)建了簡化的箱形碰撞零件,因為很難重現(xiàn)復(fù)雜的形狀(圖11(b))。然后,我們在 URDF 文件中描述了鏈接和關(guān)節(jié)的結(jié)構(gòu)以完成模型。但是,由于URDF不支持具有開放式鏈接結(jié)構(gòu)的模型,因此我們從底座上的一個鏈接中移除了碰撞,并用指尖側(cè)完成了連接。雖然這種方法很粗糙,但我們能夠通過以相同角度移動六個關(guān)節(jié)來重現(xiàn)模擬器中實際機器人的運動。圖11(d)顯示了完成的模型和實際機器人之間的比較(使用提供的模型,但細節(jié)完全不同)。但是,當(dāng)我們實際嘗試移動它時,如第 4.4 節(jié)所述,它的效果不佳。原因是在施加外力時無法協(xié)調(diào)地移動接頭(如果正確實施扭矩控制,則可能已經(jīng)解決)。
圖 11:為 myCobot 創(chuàng)建夾持器 (a) 已發(fā)布的夾持器模型 (b) 根據(jù)模型創(chuàng)建的碰撞模型零件 (c) 從夾持器模型拆卸的視覺模型部件 (d) 艾薩克健身房 圖紙和實際夾持器的比較
5.2. 使用圖像識別
在基準測試和MycobotPicking任務(wù)中,我們在觀察中使用對象位置和方向信息,但在實際任務(wù)中獲取這些信息并不容易。因此,僅使用2D相機信息和易于獲取的伺服關(guān)節(jié)角度信息進行強化學(xué)習(xí)將更有價值。
我們試圖用圖像替換觀察結(jié)果,并在FrankaCubeStack任務(wù)中使用CNN層進行學(xué)習(xí)。但是,我們只修改了算法以接受圖像輸入,并且正如預(yù)期的那樣,學(xué)習(xí)效果不佳。沒有框架將伺服關(guān)節(jié)角度信息作為一維數(shù)據(jù)添加到CNN層,直接在CNN層中使用圖像信息增加了計算復(fù)雜度,限制了環(huán)境的并行化。此外,我們需要調(diào)整超參數(shù),如學(xué)習(xí)率和剪輯值,但我們沒有追求這一點,因為效果不夠有希望。
在這個測試中,我們只確認了添加CNN層進行學(xué)習(xí)的方法。但是,使用遷移學(xué)習(xí)對來自易于使用的對象識別模型(如 YOLO 或 ResNet)的抓手和對象識別的特征進行編碼,然后使用編碼的特征和關(guān)節(jié)角度進行強化學(xué)習(xí),而不是直接將 CNN 層與相機圖像一起使用,可能更有效。
5.3. 在實際機器人上使用訓(xùn)練模型
如上一篇文章所述,我嘗試使用經(jīng)過訓(xùn)練的模型以及myCobot和RealSense進行空間識別的Sim2Real實驗。但是,它的效果并不好。雖然伸展運動在一定程度上起作用,但運動在接近物體時變得不穩(wěn)定,并且無法準確地移動到抓住物體的位置。可能的問題包括myCobot沒有足夠的能力來準確移動到目標(biāo)姿勢,以及由于模擬器在到達當(dāng)前目標(biāo)姿勢之前預(yù)測下一個目標(biāo)姿勢而實際機器人沒有,因此積累了微小的差異。關(guān)于前者,本實驗中使用的myCobot是一種廉價的教育手臂,便攜式重量為250g,因此,如果您想更準確地移動,則應(yīng)使用更高端的機器人手臂,例如用于強化學(xué)習(xí)的機器人手臂進行拾取。制造myCobot的公司Elephantrobotics也銷售具有更強伺服電機的型號,可以承載高達1公斤的重量,所以我也想嘗試一下。
6. 總結(jié)
這一次,我使用 Isaac Gym 創(chuàng)建了一個強化學(xué)習(xí)任務(wù),并實際訓(xùn)練了模型。我在 3D 物理模擬器中體驗了機器人強化學(xué)習(xí)問題的設(shè)計以及運行訓(xùn)練模型時出現(xiàn)的問題。能夠測試學(xué)習(xí)環(huán)境而不必從頭開始編寫強化學(xué)習(xí)算法很有吸引力。基準環(huán)境的可用性使得比較和驗證新的學(xué)習(xí)算法變得容易,這對于具有各種專業(yè)背景的研究人員和分析師來說是一個很大的優(yōu)勢。
ALBERT擁有具有各種專業(yè)背景的研究人員和分析師,他們隨時準備協(xié)助任何技術(shù)或業(yè)務(wù)相關(guān)的查詢。請隨時與我們聯(lián)系。
審核編輯黃宇
-
機器人
+關(guān)注
關(guān)注
212文章
29226瀏覽量
210754 -
NVIDIA
+關(guān)注
關(guān)注
14文章
5182瀏覽量
105365
發(fā)布評論請先 登錄
相關(guān)推薦
什么是深度強化學(xué)習(xí)?深度強化學(xué)習(xí)算法應(yīng)用分析

深度強化學(xué)習(xí)實戰(zhàn)
深度學(xué)習(xí)技術(shù)的開發(fā)與應(yīng)用
強化學(xué)習(xí)在RoboCup帶球任務(wù)中的應(yīng)用劉飛
將深度學(xué)習(xí)和強化學(xué)習(xí)相結(jié)合的深度強化學(xué)習(xí)DRL
人工智能機器學(xué)習(xí)之強化學(xué)習(xí)
什么是強化學(xué)習(xí)?純強化學(xué)習(xí)有意義嗎?強化學(xué)習(xí)有什么的致命缺陷?

如何構(gòu)建強化學(xué)習(xí)模型來訓(xùn)練無人車算法
如何使用深度強化學(xué)習(xí)進行機械臂視覺抓取控制的優(yōu)化方法概述

對NAS任務(wù)中強化學(xué)習(xí)的效率進行深入思考
強化學(xué)習(xí)在智能對話上的應(yīng)用介紹
基于深度強化學(xué)習(xí)的視覺反饋機械臂抓取系統(tǒng)

NeurIPS 2023 | 擴散模型解決多任務(wù)強化學(xué)習(xí)問題

評論