--- tags: ROS 學習紀錄, Shared, ROS1, Anaconda --- GitHub Repo. DRL-robot-navigation 試做 == <br> --- **<font color=orange>※</font> $\text{ }$ Source Document & Code** + [Goal-Driven Autonomous Exploration Through Deep Reinforcement Learning (2022)](https://ieeexplore.ieee.org/document/9645287?source=authoralert) + [GitHub | DRL-robot-navigation](https://github.com/reiniscimurs/DRL-robot-navigation) **<font color=orange>※</font> $\text{ }$ 使用環境** + 官方提供 + Ubuntu 18.04 + ROS Melodic + Pytorch(in Anaconda, python 3.6) + Ubuntu 20.04 + ROS Noetic + Pytorch(in Anaconda, python 3.8) + 我測試用的 + Ubuntu 20.04 + ROS Noetic + Pytorch(in Anaconda, python 3.6) **<font color=orange>※</font> $\text{ }$ 關於此程式** + 完全使用 TD3 進行導航,整體架構只有 local planner + 事前沒有全域的地圖資訊 + 部份障礙物隨機的靜態環境,隨機起點與終點的訓練 **<font color=orange>※</font> $\text{ }$ 同一個 Repository 的其他筆記** + GitHub Repo. DRL-robot-navigation 試做 <font color=blue>**$\quad \leftarrow$ 現在在這裡**</font> + [velodyne_env.py 程式閱讀](/s/FQ1H3byKTImOFRdG5M9U3g) --- <br> ## **01 | 下載 repository** 因為有路徑問題,所以建議就裝在 /home 目錄下: ```bash $ cd ~ $ git clone https://github.com/reiniscimurs/DRL-robot-navigation -b Noetic $ cd ~/DRL-robot-navigation/catkin_ws $ catkin_make_isolated ``` <br> ## **02 | 準備環境** + 假設已經建立好 anaconda 環境:python 3.6,並且已經建置好 pytorch-gpu (版本不拘) ```bash $ conda activate torch-gpu (torch-gpu)$ export ROS_HOSTNAME=localhost (torch-gpu)$ export ROS_MASTER_URI=http://localhost:11311 (torch-gpu)$ export ROS_PORT_SIM=11311 (torch-gpu)$ export GAZEBO_RESOURCE_PATH=/usr/share/gazebo-11/:~/DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch $ cd ~/DRL-robot-navigation/catkin_ws $ source devel_isolated/setup.bash $ source /usr/share/gazebo/setup.bash ``` + 除此之外還需要 `gazebo_model` 的 database > [Souce Code](https://github.com/osrf/gazebo_models) ```bash $ git clone https://github.com/osrf/gazebo_models.git ``` 接著把 *gazebo_model* 中所有的資料夾與檔案都複製到 `~/.gazebo/models` 裡,切記是「裡面」所有的資料夾,而不是 *gazebo_model* 資料夾本身。 <!-- 好像不是開這個檔案 --> <!-- + 原本的檔案存在 bug,要修掉: > ~/DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch/multi_robot_scenario.launch 把「empty_worldsdf.launch」改成「empty_world.launch」 --> + 如果想顯示 gazebo 界面: > ~/DRL-robot-navigation/catkin_ws/src/multi_robot_scenario/launch/empty_world.launch arg 的 gui 改為 true <br> ## **03 | 執行檔案** ```bash $ cd ~/DRL-robot-navigation/TD3 $ python3 velodyne_td3.py ``` <br> + 執行過程中,由於 ROS 的緣故,可能會有 `No module named '...'` 的錯誤訊息出現,基本上就是缺什麼裝什麼: > [參考資料](https://zhuanlan.zhihu.com/p/439193045) ```bash #No module named 'yaml' $ conda install -c conda-forge pyyaml # No module named 'rospkg' $ pip install rospkg # No module named 'squaternion' $ pip install squaternion # No module named 'attr' $ pip install attrs # No module named 'defusedxml' $ pip install defusedxml # No module named 'netifaces' $ pip install netifaces ``` <br> ## **04 | 附註** ### **4-1 Trouble Shooting** 因為一度卡在無法顯示 Gazebo 的問題上,因此執行以下命令查看: ```bash gazebo --verbose empty_world.launch ``` 出現以下訊息: + **Case 1** ``` [Err] [RTShaderSystem.cc:480] Unable to find shader lib. Shader generating will fail. Your GAZEBO_RESOURCE_PATH is probably improperly set. Have you sourced <prefix>/share/gazebo/setup.bash? ``` $\to$ 解法:`source /usr/share/gazebo/setup.bash` + **Case 2** ``` [Err] [RTShaderSystem.cc:480] Unable to find shader lib. Shader generating will fail. Your GAZEBO_RESOURCE_PATH is probably improperly set. Have you sourced <prefix>/share/gazebo/setup.bash? ``` $\to$ 解法:下載並配置好 `gazebo_model` database <br> ### **4-2 訓練參數** + **random_near_obstacle** 是設計來增加 action 隨機因素的參數,若為 True 則會每兩個 episode 就使用一次隨機生成的 action,碰撞機率相對較低,但可能移動過度謹慎而始終沒有抵達終點;若設為 False 雖然會降低探索的隨機性,碰撞機率也較高,但相對而言移動策略會比較大膽,進步也比較明顯 <br> ### **4-3 其他值得注意的事** + **程式架構** 這份程式是一般的 python 檔 (velodyne_td3.py) 在最外層,裡面會去呼叫 catkin_ws 裡的 ROS 資源 (velodyne_env.py) ,包括開啟 Gazebo、RViz 和 ROS 控制程式 - **Gazebo Initialization** 有一個叫做 `~/.gazebo/gui.ini` 的東西好像是初始化 gazebo 用的,PATH 那些環境變數可以設定在這裡[\[1\]](https://python.iitter.com/other/145761.html) 實測剛開 terminal 時那些 PATH 都是空的 + **Gazebo GUI** 有一個叫[Gazebo GUI Overlay](https://gazebosim.org/tutorials?tut=gui_overlay&cat=user_input)的東西可以在 Gazebo UI 界面上直接加 Qt 元件,有沒有必要就見仁見智吧