# 01. ROS tools tags: DIT 12th 教學 -- ROS 1 <!-- # title: HackMD Dark Theme description: Use `{%hackmd BkVfcTxlQ %}` syntax to include this theme. --> --- {%hackmd BJrTq20hE %} <style> html, body, .ui-content { background-color: #333; color: #ddd; } body > .ui-infobar { display: none; } .ui-view-area > .ui-infobar { display: block; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style> [toc] ## ROSbag ### introduction rosbag可以儲存Topics當前的訊息,之後再回放出來,可以重複觀看數據進行debug #### record ```linux= $ rosbag record [TOPIC_NAME] ``` - 紀錄所有的訊息 ```linux= $ rosbag record -a ``` - 設定紀錄時長 ```linux= $ rosbag record --duration 10 [TOPIC_NAME] ``` - 紀錄某個node中接受的訊息 ```linux= $ rosbag record --node=/[NODE_NAME] ``` - 指定bag file名稱 ```linux= $ rosbag record -O [FILE_NAME] ``` #### play - 回放儲存的bag file ```linux= $ rosbag play [BAG_FILE_NAME.bag] ``` ### example 1. 寫一個簡單的publisher(basiclearn中的talker.cpp) ```c #include "ros/ros.h" #include "std_msgs/Int64.h" int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<std_msgs::Int64>("counter", 10); ros::Rate loop_rate(2); int number = 0; std_msgs::Int64 msg; while(ros::ok()) { msg.data = number; // ROS_INFO("%ld", msg.data); pub.publish(msg); number++; loop_rate.sleep(); } return 0; } ``` 2. 執行這個publisher,並利用rostopic echo來查看"counter"的即時訊息 ```linux= $ rosrun basiclearn talker ``` ```linux= $ rostopic echo /counter ``` 3. 在 package 底下創建 bag folder ( 統一環境而已,也可以用自己的方式儲存要用的 bag file ) ```linux= $ roscd basiclearn $ mkdir bag ``` 4. rosrun 剛剛的 publisher 並使用開另一個terminal紀錄訊息 rosbag record,記得要先進去bag這一層資料夾 ```linux= $ rosbag record --duration 10 /counter ``` 5. 使用 rosbag play 回放剛剛存好的 bag file ,用另一個terminal 進行rostopic echo ```linux= $ rosbag play [BAG_FILE_NAME] $ rostopic echo /counter ``` ## rqt ROS內建的GUI界面 * 先打開rqt ```linux= $ rqt ``` 打開來應該會是一個空白的頁面,點一下plugin後才開始有東西 ![image](https://hackmd.io/_uploads/ryy99K0tT.png) ### some plugins #### rqt_graph 可視化node和topic間的關係 * rqt->Plugin->intorspection->Node Graph * 直接開啟rqt_graph ```linux= $ rqt_graph # or $ rqt -s rqt_graph # or $ rosrun rqt_graph rqt_graph ``` 1. 選擇想查看的類型 ![nJhe2Qj](https://hackmd.io/_uploads/r1io2YRtp.png) 2. 濾出想看的topic或是Node ![bEnGGQ9](https://hackmd.io/_uploads/rkiphK0Fp.png) 3. example 例如底下的圖,/navMec_node 為 publisher 並傳送資料到 topic /push_vel 上,接著 /encoder_node 為 subscriber 接收這些資訊 ![3Lm1yxi](https://hackmd.io/_uploads/HyLe6t0tT.png) #### rqt_bag 將 topic 中的 message 錄製下來,並以圖形化界面加上時間條顯示,尤其是在比賽前實際到比賽場地測試時,將所有資訊錄下來,即便測試時間有限,回去仍舊可以 debug 1. 開啟 - rqt -> Plugin -> Logging -> Bag - 僅開啟 rqt_bag ```linux= $ rqt_bag # or $ rqt -s rqt_bag # or $ rosrun rqt_bag rqt_bag ``` 2. 選擇要紀錄的 topic - 按紅色按鈕 -![2vdV4dC](https://hackmd.io/_uploads/HyEGy9Rtp.png) - 選擇topic並紀錄 ![r9OrD4u](https://hackmd.io/_uploads/B1BNk9RKa.png) - 再按一次紅色按鈕停止紀錄 3. 播放 ```linux= $ rqt_bag [BAG_FILE] ``` #### rqt_plot rqt_plot 將 topic 中的資料圖形化,方便查看 message 的變化 1. 開啟 - rqt -> Plugin -> Visualization -> Plot - 僅開啟 rqt_plot ``` linux $ rqt_plot # or $ rqt -s rqt_plot # or $ rosrun rqt_plot rqt_plot ``` ![wczUAbP](https://hackmd.io/_uploads/rksS-qCK6.png) 2. 輸入要監控的 topic 3. 點擊加號將其加入到底下的圖表 4. 點擊減號的小三角形取消監聽某一 topic 5. 點放大鏡右邊的圖示可以設置圖表邊框距離![G9LRQwm](https://hackmd.io/_uploads/HJe6b9CFp.png) 6. 設置圖表的 x-y 軸範圍以及圖表顯示的各種數據![pDoQg2E](https://hackmd.io/_uploads/S1npb9AY6.png) #### rqt_topic 監控 topic 的資料以及 頻寬 和 頻率,可以想像成 rostopic 圖形界面 1. 開啟 - rqt -> Plugin -> Topics -> Topic Monitor - 僅開啟 rqt_topic ```linux $ rqt_topic # or $ rqt -s rqt_topic # or $ rosrun rqt_topic rqt_topic ``` 2. 勾選欲監控的 topic![DxR66yW](https://hackmd.io/_uploads/Hkl6GqCta.png) 3. 點擊查看更詳細的資訊![chFZigU](https://hackmd.io/_uploads/SyL6z50Fp.png) <!-- #### rqt_console 取得當前 Node 或 Topic 印出於 console 的東西 相較於使用終端機看,rqt_console 能濾出一些不必要的訊息,加速 debug 1. 開啟 - rqt -> Plugin -> Logging -> Console - 僅開啟 rqt_console ``` $ rqt_console # or $ rqt -s rqt_console # or $ rosrun rqt_console rqt_console ``` 2. 選擇欲加入的方式![Hzz82WT](https://hackmd.io/_uploads/B1aaz5Rtp.png) 3. 查看 messages ![db8ZFG8](https://hackmd.io/_uploads/SyUgXqRYT.png) 4. 用 ...containing 濾掉不要的訊息 - EX : 濾掉所有含有 4 的訊息![fz0AS3c](https://hackmd.io/_uploads/r1Rz7cCKT.png) --> <!-- #### rqt_launch 圖形化的 launch 界面 1. 開啟 - rqt -> Plugin -> Configuration -> Launch - 僅開啟 rqt_launch ```linux $ rqt -s rqt_launch ``` 2. 選擇 launch file ![X8LW4Ey](https://hackmd.io/_uploads/SyiLXcAFa.png) 3. 加入該 launch 檔需要的參數 ![gUiN9rE](https://hackmd.io/_uploads/H1mDmqAKT.png) 4. 增加其他 node 需要的 args ![c6yD15A](https://hackmd.io/_uploads/HypPXcRKT.png) 5. 執行全部 / 停止全部 ![xZnvw28](https://hackmd.io/_uploads/r19dXqRYp.png) --> ## Gazebo Gazebo 是一個三維物理模擬平台,它可以模擬現實世界中的各種物理行為,因此當我們手上沒有實驗環境,我們便可以透過於此來搭建模擬環境。剛開啟gazebo什麼也沒有,不過我們可以透過左邊 insert的選項插入我們下載的不同的地圖物件。 1. 單獨開啟 ```linux= $ gazebo ``` ## Rviz Rviz能將sensor的各種數據可視化,以圖像的方式表達 1. 單獨開啟 ```linux= $ rviz ``` ### examples - 在workspace/src裡執行下列操作 ```linux= git clone https://github.com/6-robot/wpr_simulation.git git clone https://github.com/6-robot/wpb_home.git ``` ```linux= $ cd .. $ sudo apt update $ cd wpr_simulation/scripts/ $ ./install_for_noetic.sh 回到workspace $ cd wpb_home/wpb_home_bringup/scripts/ $ ./install_for_noetic.sh 回到workspace $ catkin_make 接下來source一下 ``` - launch以下檔案來開啟gazebo rviz and 控制器 ```linux= $ roslaunch wpr_simulation wpb_gmapping.launch(用於開啟rviz gazebo) $ rosrun wpr_simulation keyboard_vel_ctrl(open controller) ``` - 以下是gazebo和rviz ![gazebo](https://hackmd.io/_uploads/S1OdTxUDkl.png) ![rviz](https://hackmd.io/_uploads/rJ-F6gIDJx.png) - 在terminal通過鍵盤控制機器人行走 - rviz左方可調整想可視化的topic