###### 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up