
HIL-SERL 從零跑通HIL-SERL 安裝、入口腳本與配置一篇講清【免費(fèi)下載鏈接】hil-serl項(xiàng)目地址: https://gitcode.com/gh_mirrors/hi/hil-serlHIL-SERL基于人機(jī)協(xié)作強(qiáng)化學(xué)習(xí)的精確與靈巧機(jī)器人操縱項(xiàng)目提供了一套完整工具鏈讓你把人類演示 人在環(huán)糾正與強(qiáng)化學(xué)習(xí)訓(xùn)練結(jié)合在 Franka 機(jī)械臂上訓(xùn)練成功率接近 100% 的操縱策略。本文帶你走完定位 → 裝環(huán)境 → 找入口 → 拆模塊 → 落配置的完整上手路徑。 HIL-SERL 定位與能力邊界它解決什么問題先說清楚它是什么、不是什么。純 SERL 類方法完全依賴獎(jiǎng)勵(lì)信號和自主探索遇到精確對插這類任務(wù)時(shí)機(jī)械臂要在巨大動(dòng)作空間里盲目摸索很久成功率爬升非常慢。HIL-SERL 的關(guān)鍵差異在于允許操作者在訓(xùn)練過程中直接接管訓(xùn)練初期你用手柄空間鼠標(biāo)把機(jī)械臂拉到正確位置附近再放開讓策略接管同時(shí)用少量人類演示數(shù)據(jù)做預(yù)訓(xùn)練。論文中的 RAM 插入、USB 拾取插入任務(wù)配合間歇性人工干預(yù)分別約 1.5 小時(shí)、2.5 小時(shí)收斂到 100% 成功率。它的能力邊界大致是需要 Franka 機(jī)械臂 RealSense 相機(jī)的真機(jī)環(huán)境任務(wù)覆蓋單臂對插、多階段抓取插入、雙臂交接object handover和動(dòng)力學(xué)任務(wù)egg flip用一套專門的力控控制器實(shí)現(xiàn)。沒有 Franka 硬件可以閱讀代碼和示例配置來學(xué)習(xí)設(shè)計(jì)但訓(xùn)練閉環(huán)跑不起來。? 環(huán)境搭建與依賴安裝conda 環(huán)境與硬件側(cè)準(zhǔn)備倉庫沒有一鍵的setup_conda.shREADME 把安裝拆成了四步按順序執(zhí)行即可創(chuàng)建環(huán)境conda create -n hilserl python3.10安裝 JAX這是項(xiàng)目底層的數(shù)組計(jì)算庫訓(xùn)練速度幾乎完全取決于 GPU 版 JAX。有 NVIDIA 顯卡裝jax[cuda12_pip]0.4.35并附加官方 CUDA 源參數(shù)純 CPU 可用jax[cpu]但訓(xùn)練會慢到不可用安裝算法側(cè)主包進(jìn)入serl_launcher目錄執(zhí)行pip install -e .再裝pip install -r requirements.txt安裝機(jī)器人側(cè)基礎(chǔ)包進(jìn)入serl_robot_infra目錄執(zhí)行pip install -e .硬件側(cè)還有兩件事容易漏libfranka/franka_ros官方驅(qū)動(dòng)以及基于阻抗控制的serl_franka_controllers控制器包按 serl_robot_infra/ 的 README 安裝并編入 catkin 工作空間。上電后務(wù)必在 Franka Desk 網(wǎng)頁界面里錄入腕部相機(jī)質(zhì)量做末端載荷標(biāo)定否則阻抗控制精度會明顯下降。常見報(bào)錯(cuò)集中在 JAX 與 GPU 驅(qū)動(dòng)版本不匹配表現(xiàn)為jax.devices()只能看到 CPU按 JAX 官方要求對齊 CUDA 版本即可裝完可用python -c import jax; print(jax.devices())驗(yàn)證。 三個(gè)入口腳本與調(diào)用鏈先獎(jiǎng)勵(lì)分類器再演示最后訓(xùn)練真正的入口在 examples/ 目錄圍繞實(shí)驗(yàn)文件夾組織每個(gè)任務(wù)如 ram_insertion有自己的配置和啟動(dòng)腳本。執(zhí)行順序有嚴(yán)格依賴1. 訓(xùn)練獎(jiǎng)勵(lì)分類器python record_success_fail.py --exp_name ram_insertion --successes_needed 200機(jī)器人任務(wù)的獎(jiǎng)勵(lì)往往無法從傳感器直接讀出RAM 到底插進(jìn)插槽沒有HIL-SERL 的做法是訓(xùn)練一個(gè)看相機(jī)圖像的成功/失敗圖像分類器來發(fā)獎(jiǎng)勵(lì)。這個(gè)腳本負(fù)責(zé)收集它的訓(xùn)練數(shù)據(jù)默認(rèn)全部記為負(fù)樣本按住空格鍵的那一步記為正樣本直到湊夠指定數(shù)量。建議負(fù)樣本收 2~3 倍于正樣本覆蓋各種看似成功其實(shí)沒成功的失敗形態(tài)能顯著降低誤報(bào)。然后python train_reward_classifier.py --exp_name ram_insertion訓(xùn)練模型存入classifier_ckpt/。2. 錄制人類演示python record_demos.py --exp_name ram_insertion --successes_needed 20用空間鼠標(biāo)手把手教機(jī)械臂完成 20 次成功軌跡。這里獎(jiǎng)勵(lì)分類器已經(jīng)在工作——它判斷你這條演示是否成功失敗的會丟棄重來。數(shù)據(jù)存入demo_data/。3. 策略訓(xùn)練主訓(xùn)練循環(huán)是train_hgdagger.py每個(gè)實(shí)驗(yàn)文件夾里的run_actor.sh/run_learner.sh是對它的封裝。actor 節(jié)點(diǎn)在環(huán)境里跑策略、采數(shù)據(jù)learner 節(jié)點(diǎn)在 GPU 上訓(xùn)練、定期同步參數(shù)兩者異步運(yùn)行另有train_bc.py行為克隆基線和train_rlpd.py在線模仿學(xué)習(xí)基線可作對照。訓(xùn)練時(shí)用空間鼠標(biāo)在策略反復(fù)犯錯(cuò)時(shí)介入糾正。順序腳本輸入輸出1record_success_fail.py→train_reward_classifier.py相機(jī)圖像成功/失敗標(biāo)注classifier_ckpt/2record_demos.py空間鼠標(biāo)演示軌跡demo_data/3run_actor.shrun_learner.sh演示數(shù)據(jù) 獎(jiǎng)勵(lì)分類器checkpoint_path/評估訓(xùn)練好的策略在run_actor.sh中加--eval_checkpoint_step與--eval_n_trajs兩個(gè)參數(shù)只啟動(dòng) actor 即可。 核心模塊速覽四個(gè)子目錄各司其職倉庫頂層就三塊examples/、serl_launcher/算法側(cè)、serl_robot_infra/硬件側(cè)。模塊路徑職責(zé)examples/入口腳本與四個(gè)任務(wù)實(shí)驗(yàn)配置serl_launcher/serl_launcher/agents/SAC、BC 等策略實(shí)現(xiàn)serl_launcher/serl_launcher/wrappers/環(huán)境包裝動(dòng)作歸一化、分塊執(zhí)行serl_launcher/serl_launcher/data/重放緩沖區(qū)與網(wǎng)絡(luò)傳輸數(shù)據(jù)存儲serl_launcher/serl_launcher/vision/ResNet 視覺骨干與數(shù)據(jù)增強(qiáng)serl_robot_infra/robot_servers/Flask 服務(wù)經(jīng) ROS 下發(fā)指令serl_robot_infra/franka_env/Franka 的 gym 環(huán)境整體訓(xùn)練拓?fù)涫?actor-learner 異步結(jié)構(gòu)actor 與 learner 通過 agentlace 走網(wǎng)絡(luò)通信、周期性同步策略好處是推理機(jī)械臂實(shí)時(shí)動(dòng)作和訓(xùn)練GPU 迭代互不阻塞。?? 配置體系與硬件對接三個(gè)必須改的配置維度HIL-SERL 沒有統(tǒng)一的config.yaml而是一個(gè)任務(wù)一個(gè) Python 配置文件全部位于examples/experiments/任務(wù)名/下config.py環(huán)境與訓(xùn)練參數(shù)其中必改的三塊——①EnvConfig里的SERVER_URL機(jī)器人服務(wù)器地址、REALSENSE_CAMERAS與IMAGE_CROP相機(jī)序列號與裁剪區(qū)域序列號在 RealSense Viewer 里查② 關(guān)鍵位姿TARGET_POSE/GRASP_POSE/RESET_POSE用curl -X POST http://服務(wù)器:5000/getpos_euler抓取當(dāng)前末端位姿填入③ 安全動(dòng)作邊界ABS_POSE_LIMIT_HIGH/LOW限定策略探索范圍必須保證邊界內(nèi)沒有碰撞風(fēng)險(xiǎn)wrapper.py該任務(wù)的 gym 環(huán)境封裝相機(jī)初始化、任務(wù)特有邏輯在這里一般只在換任務(wù)時(shí)參考run_actor.sh/run_learner.sh啟動(dòng)封裝訓(xùn)練前要改checkpoint_path和demo_path兩個(gè)路徑硬件鏈路一句話講完gym 環(huán)境發(fā) HTTP POST 請求 → Flask 機(jī)器人服務(wù) → ROS 驅(qū)動(dòng)阻抗控制器 → 機(jī)械臂空間鼠標(biāo)的人工干預(yù)走同一條鏈路。接下來可以做什么通讀 docs/franka_walkthrough.mdRAM 插入任務(wù)的逐步驟說明最完整建議第一個(gè)任務(wù)從它開始對照 examples/experiments/ram_insertion/ 把三個(gè)必改配置項(xiàng)過一遍先跑通獎(jiǎng)勵(lì)分類器數(shù)據(jù)采集確認(rèn)相機(jī)畫面正常訓(xùn)練初期多干預(yù)、后期少干預(yù)是收斂的關(guān)鍵經(jīng)驗(yàn)文檔Additional Tips一節(jié)有詳細(xì)的節(jié)奏建議【免費(fèi)下載鏈接】hil-serl項(xiàng)目地址: https://gitcode.com/gh_mirrors/hi/hil-serl創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考