write
Description
Examples
Write Log Using ros2bagwriter
Object by Reading Messages from ROS 2 Bag File
Extract the ZIP file that contains the ROS 2 bag log file and specify the full path to the log folder.
unzip("ros2_netwrk_bag.zip"); folderPath = fullfile(pwd,"ros2_netwrk_bag");
Get all the information from the ROS 2 bag log file.
bag2info = ros2("bag","info",folderPath);
Create a ros2bagreader
object that contains all messages in the log file.
bag = ros2bagreader(folderPath); bag.AvailableTopics
ans=4×3 table
NumMessages MessageType MessageDefinition
___________ _____________________ _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
/clock 1.607e+05 rosgraph_msgs/Clock {'%↵% For more information, see https://design.ros2.org/articles/clock_and_time.html.↵builtin_interfaces/Time clock' }
/cmd_vel 3 geometry_msgs/Twist {'↵Vector3 linear↵Vector3 angular' }
/odom 5275 nav_msgs/Odometry {'% The pose in this message should be specified in the coordinate frame given by header.frame_id↵% The twist in this message should be specified in the coordinate frame given by the child_frame_id↵↵% Includes the frame id of the pose parent.↵std_msgs/Header header↵↵% Frame id the pose points to. The twist is in this coordinate frame.↵char child_frame_id↵↵% Estimated pose that is typically relative to a fixed world frame.↵geometry_msgs/PoseWithCovariance pose↵↵% Estimated linear and angular velocity relative to child_frame_id.↵geometry_msgs/TwistWithCovariance twist' }
/scan 892 sensor_msgs/LaserScan {'%↵% If you have another ranging device with different behavior (e.g. a sonar↵% array), please find or create a different message, since applications↵% will make fairly laser-specific assumptions about this data↵↵std_msgs/Header header % timestamp in the header is the acquisition Time of↵ % the first ray in the scan.↵ %↵ % in frame frame_id, angles are measured around↵ % the positive Z axis (counterclockwise, if Z is up)↵ % with zero angle being forward along the x axis↵↵single angle_min % start angle of the scan [rad]↵single angle_max % end angle of the scan [rad]↵single angle_increment % angular distance between measurements [rad]↵↵single time_increment % Time between measurements [seconds] - if your scanner↵ % is moving, this will be used in interpolating position↵ % of 3d points↵single scan_time % Time between scans [seconds]↵↵single range_min % minimum range value [m]↵single range_max % maximum range value [m]↵↵single[] ranges % range data [m]↵ % (Note: values < range_min or > range_max should be discarded)↵single[] intensities % intensity data [device-specific units]. If your↵ % device does not provide intensities, please leave↵ % the array empty.'}
Select a subset of the messages by applying filters to the topic and timestamp.
start = bag.StartTime; odomBagSel = select(bag,"Time",[start start+30],"Topic","/odom")
odomBagSel = ros2bagreader with properties: FilePath: 'C:\Users\echakrab\OneDrive - MathWorks\Documents\MATLAB\ExampleManager\echakrab.Bdoc23a.ROS2transform\ros-ex95368813\ros2_netwrk_bag\ros2_netwrk_bag.db3' StartTime: 1.6020e+09 EndTime: 1.6020e+09 AvailableTopics: [1×3 table] MessageList: [801×3 table] NumMessages: 801
Get the messages in the selection.
odomMsgs = readMessages(odomBagSel);
Retrieve the list of timestamps from the topic.
timestamps = odomBagSel.MessageList.Time;
Create a ros2bagwriter
object and a ROS 2 bag file in the specified folder.
bagWriter = ros2bagwriter("myRos2bag");
Write the messages related to the "/odom"
topic to the ROS 2 bag file.
write(bagWriter,"/odom",timestamps,odomMsgs)
Close the bag file, remove the ros2bagwriter
object from memory, and clear the associated object.
delete(bagWriter)
clear bagWriter
Load the new ROS 2 bag log file.
bagOdom = ros2bagreader("myRos2bag");
Retrieve messages from the ROS 2 bag log file.
msgs = readMessages(bagOdom);
Plot the coordinates for the messages in the ROS 2 bag log file.
To run the example again, remove the myRos2bag
file and the ros2_netwrk_bag
file from memory.
plot(cellfun(@(msg) msg.pose.pose.position.x,msgs),cellfun(@(msg) msg.twist.twist.angular.z,msgs))
Create Single Log and Write to ROS 2 Bag File
Create a ros2bagwriter
object and a ROS 2 bag file in the specified folder.
bagWriter = ros2bagwriter("myRos2bag");
Write a single log to the ROS 2 bag file.
topic = "/odom"; message = ros2message("nav_msgs/Odometry"); timestamp = ros2time(1.6170e+09); write(bagWriter,topic,timestamp,message)
Close the bag file, remove the ros2bagwriter
object from memory, and clear the associated object.
delete(bagWriter)
clear bagWriter
Create Multiple Logs and Write to ROS 2 Bag File
Create a ros2bagwriter
object and a ROS 2 bag file in the specified folder. Specify the cache size for each message.
bagWriter = ros2bagwriter("bag_files/my_bag_file",CacheSize=1500);
Write multiple logs to the ROS 2 bag file.
message1 = ros2message("nav_msgs/Odometry"); message2 = ros2message("geometry_msgs/Twist"); message3 = ros2message("sensor_msgs/Image"); write(bagWriter, ... ["/odom","cmd_vel","/camera/rgb/image_raw"], ... {ros2time(1.6160e+09),ros2time(1.6170e+09),ros2time(1.6180e+09)}, ... {message1,message2,message3})
Close the bag file, remove the ros2bagwriter
object from memory, and clear the associated object.
delete(bagWriter)
clear bagWriter
Create Multiple Logs for Same Topic and Write to ROS 2 Bag File
Create a ros2bagwriter
object and a ROS 2 bag file in the specified folder.
bagWriter = ros2bagwriter("myBag");
Write multiple logs for the same topic to the ROS 2 bag file.
pointMsg1 = ros2message("geometry_msgs/Point"); pointMsg2 = pointMsg1; pointMsg3 = pointMsg1; pointMsg1.x = 1; pointMsg2.x = 2; pointMsg3.x = 3; write(bagWriter, ... "/point", ... {1.6190e+09,1.6200e+09,1.6210e+09}, ... {pointMsg1,pointMsg2,pointMsg3})
Close the bag file, remove the ros2bagwriter
object from memory, and clear the associated object.
delete(bagWriter)
clear bagWriter
Input Arguments
bagwriter
— ROS 2 log file writer
ros2bagwriter
object
ROS 2 log file writer, specified as a ros2bagwriter
object.
topic
— ROS 2 topic names
string scalar | character vector | cell array of string scalars | cell array of character vectors
ROS 2 topic names, specified as a string scalar, character vector, cell array of string scalars, or cell array of character vectors. Specify multiple topic names by using a cell array.
Example: "/odom"
Example: {"/odom","cmd_vel"}
timestamp
— Timestamps of ROS 2 messages
Time
object | numeric scalar | structure | cell array of Time
objects | cell array of nonnegative numeric scalars | cell array of structures
Timestamps of the ROS 2 messages, specified as Time
objects,
numeric scalar, structure, cell array of Time
objects, cell array of
nonnegative numeric scalars, or cell array of structures. Specify multiple timestamps by
using a cell array. Create a Time
object using ros2time
.
Example: 1625559291
Example: ros2time(node, "now")
Example: {1625559291,1625559292}
message
— ROS 2 messages
Message
object | structure | cell array of Message
objects | cell array of structures
ROS 2 messages, specified as a Message
object, structure, cell
array of Message
objects, or cell array of structures. Specify
multiple messages by using a cell array. Create a Message
object
using ros2message
.
Example: ros2message("nav_msgs/Odometry")
Example: ros2message("nav_msgs/Odometry",DataFormat="struct")
Example: {ros2message("nav_msgs/Odometry"),ros2message("geometry_msgs/Twist")}
Version History
Introduced in R2022b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)