ROS2學習筆記之rosbag篇

2021-10-03 00:19:16 字數 3262 閱讀 7652

總結後續

學習目標:記錄發布在話題上的訊息,方便我們後期檢視

ros2 bag是乙個命令列工具用於記錄話題上發布的訊息。他可以儲存任意數量話題上的訊息內容。我們可以通過資料回放實現實驗場景的重現。同時這也是和他人分享資料的好方法。

我們首先安裝ros2 bag

sudo apt install ros-eloquent-ros2bag ros-eloquent-rosbag2*
我們準備記錄海龜教程中鍵盤的輸入,首先我們啟動相應節點。

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
我們新建乙個資料夾用於存放rosbag檔案

mkdir bag_files
ros2 bag只能記錄話題的訊息,我們首先檢視當前的話題列表

ros2 topic list
目前所有的話題列表如下

/parameter_events

/rosout

/turtle1/cmd_vel

/turtle1/color_sensor

/turtle1/pose

在之前的教程當中我們知道/turtle1/cmd_vel話題就是鍵盤控制的指令傳送的話題,我們通過下面命令檢視話題的訊息內容。

ros2 topic echo /turtle1/cmd_vel
當我們在鍵盤控制終端沒有操作的時候話題上是不會有訊息的,我們按一下方向鍵訊息才會傳送到話題上。

我們使用下面的命令可以儲存話題上的訊息。

ros2 bag record 
我們切換到剛剛新建的目錄,應為預設情況下這個命令會將記錄的結果儲存到當前資料夾下面。

cd bag_files
我們通過下面的命令記錄/turtle1/cmd_vel話題上的訊息

ros2 bag record /turtle1/cmd_vel
然後我們可以看到終端輸出下面的訊息,表明開始記錄訊息

[info]

[rosbag2_storage]: opened database 'rosbag2_2020_02_20-11_44_13/rosbag2_2020_02_20-11_44_13_0.db3'

for read_write.

[info]

[rosbag2_transport]: listening for topics...

[info]

[rosbag2_transport]: subscribed to topic '/turtle1/cmd_vel'

[info]

[rosbag2_transport]: all requested topics are subscribed. stopping discovery...

現在我們開始用鍵盤控制海龜運動

隨便讓海龜動一下就行,然後我們用ctrl + c關掉ros2 bag的終端

然後檔案會被儲存在當前目錄下的按照rosbag2_year_month_day-hour_minute_second方式命令的乙個目錄下面。

例如我們可以使用下面的命令同時記錄多個話題,我們還可以加上-o選項設定輸出的名字,這樣儲存檔案的名字就不會像預設那樣是按時間命名了

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose
同樣我們隨便控制幾下海龜過後ctrl + c關掉rosbag,我們可以看到bag_files資料夾下面又多出了乙個資料夾

我們可以使用-a選項記錄所有話題,但是一般不推薦使用這種方式,最好我們還是選擇自己需要的話題

我們可以通過下面的命令檢視rosbag的資訊

ros2 bag info 
例如

ros2 bag info subset
我們得到下面的輸出

files:             subset/subset_0.db3

bag size: 100.6 kib

storage id: sqlite3

duration: 12.57s

start: feb 20 2020 11:53:35.524 (1582170815.524)

end feb 20 2020 11:53:47.581 (1582170827.581)

messages: 801

topic information: topic: /turtle1/pose | type: turtlesim/msg/pose | count: 755 | serialization format: cdr

topic: /turtle1/cmd_vel | type: geometry_msgs/msg/twist | count: 46 | serialization format: cdr

在進行回放之前我們先關掉鍵盤控制節點,然後我們輸入下面的命令進行回放

ros2 bag play subset
終端輸出下面訊息

[info]

[rosbag2_storage]: opened database 'subset/subset_0.db3'

for read_only.

然後海龜會按照我們剛剛記錄的控制軌跡進行運動

海龜停止運動過後並不會回放過程還在繼續,因為我們還同時記錄了/turtle1/pose話題的訊息,rosbag會在回放完所有的話題訊息過後才會退出

rosbag是乙個很有用的東西,ros2對rosbag進行了相應的改進,也帶來了很多好處。

到此ros2基礎教程結束,接下來是開發篇,正式開始講如何寫**。

ROS2學習筆記之了解ros2doctor篇

總結學習目標 學會使用ros2doctor工具分析出現的問題 當ros2沒有安裝我們預期的設定執行的時候,我們可以用ros2doctor工具檢查ros2的設定。ros2doctor對ros2全面的檢查,包括平台 版本 連線情況 環境 執行的系統等等。然後給出可能的錯誤和原因。ros2doctor是乙...

ROS2學習筆記1 安裝

系統 ubuntu 18.04 64位 ros2 eloquent 1.修改為清華軟體源 ubuntu的軟體源配置檔案是 etc apt sources.list,需完全替換為新的軟體源映象。命令 sudo vi etc apt sources.list內容 預設注釋了原始碼映象以提高 apt up...

ROS2學習 建立自己的ROS2功能包

建立資料夾 mkdir p ros2 ws src cd ros2 ws colcon build1 建立功能包 建立乙個pubsub的包 ros2 pkg create build type ament cmake cpp pubsub改xml檔案裡的郵箱 2 寫發布節點 建立ros2 talke...