---
# System prepended metadata

title: ROS指令
tags: [ROS]

---

ROS指令
===
###### tags: `ROS`
python初始化
---
- 檔案關聯
` #!/usr/bin/env python `
code首行加入上行
Linux系統需要從env找到python直譯器
此舉就像Win副檔名關聯

- 執行權限
`> chmod +x file.py`
打完程式碼在terminal輸入上行
加上execute的權限
不加視同一般文件，無法執行

rospy
---
- init_node(name, parm)
    - 無論創建發布者或訂閱者都須先創建節點
    - parm可設定anonymous=True
        - 如有相同名稱的節點是自動編號
- Publisher(name, format, 佇列大小)
    - 同時**創建topic** (名為name) 其發布者本身的名字由node定義
    - 格式String 需先 `from std_msgs.msg import String`
    - 設定佇列大小 避免塞車
    - publish(data) 子函數正式發布訊息
- Rate(hz)
    - 10hz則是1秒10次
    - sleep() 啟用時間間隔，hz越大間隔越短
- Subscriber(name,format,callback)
    - callback可自定義函數，當接收到同樣名稱的topic則呼叫函數
    - callback(parm)參數其子成員parm.data為資料
- spin
    - 配合subscriber，避免程式終止，持續監聽topic

roscore
---
rosrun之前要先啟動ros master
先開一個terminal執行`> roscore`掛著

catkin_create_pkg
---
創建一個名為name的pkg
如使用python可依賴rospy
例如 `> catkin_create_pkg [pkg_name] rospy`

rosrun
---
執行package底下的程式
例如 `rosrun [pkg_name] code.py`


rostopic
---
- list
    - 列出所有topic(publisher node創建出來的)
- info /topic_name
    - 查看 創建topic的node名稱
    - 查看 監聽topic的node名稱
- echo /topic_name
    - 印出 `data: [msg]`
    - 當呼叫pulish(msg) 就會印出來

rqt_graph
---
GUI工具
顯示node 和 topic關係圖
箭頭由發布者指向訂閱者


rosbag
---
- record `[topic_name topic_name ...]`
    - 可先rostopic list查看需要錄製的topic
    - `record -a` 錄製所有topics
    - `record -O xxx.bag` 設定輸出檔名，預設檔名為`日期時間.bag`
- info `[xxx].bag`
    - 可顯示錄製時間、包含的topics
- play `[xxx].bag`
    - 模擬publish()，將錄製的msg重新發布
    - `play -l` 重複執行loop