###### tags: `ROS` # ROS 安裝與教學與Gazebo ## 1. 使用Virtual machine 目前車上所使用的作業系統為Ubuntu 20.04,可使用以下虛擬機建立 1. [VMware](https://www.youtube.com/watch?v=9rUhGWijf9U&ab_channel=ProgrammingKnowledge) 2. [Virtual box](https://www.youtube.com/watch?v=x5MhydijWmc&ab_channel=ProgrammingKnowledge)(for IOS) 3. ~~window subsystem linux, WSL~~ - 如果平常有在用再用,架設起來有點複雜,而且GUI也不一定支援GPU ## 2. ROS安裝 ROS1我們所使用的版本為noetic,ROS2為galactic, 目前有的模擬軟體與車上軟體仍在noetic中所以先熟悉它就好。不過兩者是可兼容在同一系統的,galactic日後有需要再安裝。 以下為安裝教學。 - [noetic](http://wiki.ros.org/noetic/Installation/Ubuntu) - [galactic](https://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html) ## 3. ROS概念 未來會需要升級到galactic,兩者概念相似,只是底層架構以及API有部分變動。所以我覺得只要大概懂就好,反正升級後很多API和指令都會變動。 - [ROS 教學目錄](http://wiki.ros.org/ROS/Tutorials) - [ROS2 教學目錄](https://docs.ros.org/en/galactic/Tutorials.html) ### ROS基礎概念 只需要看beginner level的1~6、8章節就差不多了,第8章的launch file正是目前需要修改的地方,最重要! ### launch file格式 - [教學](http://wiki.ros.org/roslaunch/XML) ### 看code會用到的 - [actionlib summary](http://wiki.ros.org/actionlib) - [actionlib tutorial](http://wiki.ros.org/actionlib/Tutorials) ### 指令 #### rosdep自動安裝workspace中所depend的package - [詳細介紹](http://wiki.ros.org/noetic/Installation/Source) ``` $ rosdep install --from-paths ./src --ignore-packages-from-source --rosdistro noetic -y ``` ## ~~3.5使用gazebo範例~~(old) - 因為廠商當初gazebo部分寫的太亂,所以我砍掉重練了,因此目前[gazebo_noetic_ws](https://github.com/Thuniinae/gazebo_noetic_ws)的東西就不用了。 - 取而代之,開了新的repository [Diff_car_Gazebo_ROS](https://github.com/Thuniinae/Diff_car_Gazebo_ROS) :::spoiler - 環境建置在user:ouros中 - 由於當初廠商給的是noetic當中的版本,所以是在以ros-noetic執行 - 若要移植到galactic中執行,還需要改一些東西,像package中的CMakeLists.txt、 package.xml之類的以符合ROS2 語法? ### 0. 以ourros使用者登入 我想我們需要一個共用的使用者,比較方便一起開發,所以就把範例建在/home/ourros/gazebo_noetic_ws下。 - 目前相同的檔案也在gazebo_galactic_ws中,但顯然版本上的問題使其沒辦法在galactic中執行。 ### 1. 開啟廠商給的gazebo車子模擬 > $ roslaunch gyrobot gyrobot_xacro.launch 此時應該會看到以下畫面,可以用這個來熟悉gazebo的操作  ### 2. 鍵盤控制模擬車子 開啟另一terminal(開新的ssh) > $rosrun gyro_l4_teleope_key gyro_l4_teleope_key.py 會看到以下輸出,但要注意控制時,必須點著控制的terminal。(所以要自己喬好視窗的位子)  ### 3. 在rviz看模擬資料 > $ roslaunch gyrobot display.launch - 包含相機3個、Lidar 2個  ### 備註 - 此模擬為萬象輪的移動,但實際上輪子不太會轉 - 具體來說,使URDF在模擬中動起來的關鍵都在以下檔案/home/ourros/gazebo_noetic_ws/src/gyrobot/gyrobot/urdf/gazebo_essential_plugin.xacro ### 用途 我想當中的gazebo plugin的寫法可以做為範例,當作參考讓我們建置出在galactic的模擬環境。(或直接使用這環境?) ::: ## 4. 使用gazebo範例 - [程式碼github頁面](https://github.com/Thuniinae/Diff_car_Gazebo_ROS) ### 1. 開啟gazebo模擬 > $ roslaunch myrobot_gazebo myrobot_gazebo_full.launch ### 2. 鍵盤控制模擬車子 開啟另一terminal(開新的ssh) > $ rosrun myrobot_gazebo gyro_l4_teleope_key.py ### 3. 在rviz看模擬資料 > $ rviz -d Diff_car_Gazebo_ROS/src/myrobot_description/rviz/mybot.rviz ## 5. gazebo備忘與工具 ### sdf 轉換工具 gazebo在處理model時是以sdf處理,但ROS的rviz使用URDF,可利用以下工具轉換。 $ xacro myrobot.xacro >myrobot.urdf $ gz sdf -p myrobot.urdf > myrobot.sdf - 一起使用 > $ xacro myrobot.xacro >myrobot.urdf | gz sdf -p myrobot.urdf > myrobot.sdf 轉換至sdf可確認所輸入的參數或設定是否被gazebo所接受,因為在xml(此處指xacro,urdf,sdf)中,無法辨識的參數會直接被忽略。因此即使設定的參數名稱錯誤,也不會跳error,導致使用default參數值。 ### 摩擦係數設定 urdf並不支援摩擦力的設定,因此需要利用gazebo tag額外對link進行設定。 ```xml= <gazebo reference="BL_wheel_link"> <material>Gazebo/DarkGrey</material> <mu1>0.001</mu1> <mu2>0.001</mu2> </gazebo> ``` - mu1/2: 主要/次要摩擦力方向的摩擦係數 - urdf雖也可設定顏色(material),但Gazebo有自己的顏色格式,因此同樣需要額外設定 ::: warning 要設定摩擦力,除了新增額外的gazebo tag以外,還需要確認urdf中的collision的名字為<link_name>_collision,否則無法生效。(還需要確認真正的限制是什麼,但起碼這樣能用) ::: ```xml= <link name = "${prefix}_wheel_link"> <collision name="${prefix}_wheel_link_collision"> <origin xyz="0 0 0" rpy="0 1.5707 1.5707"/> <geometry> <cylinder radius="0.1" length="0.05"/> </geometry> </collision> </link> ``` ### Gazebo /joint_states的產生與轉換至/tf  為了讓joint(目前的只有輪子)的旋轉狀態,可與lidar等其他資料整合在rviz中。需要gazebo joint state publisher plugin(並非ROS的joint statepublisher)產生non-fixed joint的旋轉狀態(i.e. topic /joint_states),以及robot_state_publisher(ROS的)將/joint_states轉換為/tf。 - 至於fixed的joint states: 由於gazebo在將urdf轉換為sdf時,會將fixed joint連接的link整合為一link(此觀點由前面sdf轉換工具自行轉換sdf驗證),因此gazebo會自動產生fixed joint間的joint_states,即使gazebo joint state publisher plugin不存在。 具體資料流向如下:  ### 壓縮與解壓縮 tar -zvcf file tar -zvxf file.tar.sc
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.