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