Создайте и запишите журналы в rosbag файл журнала
Используйте rosbagwriter
объект создать rosbag файл журнала и запись регистрирует к файлу сумки. Каждый журнал содержит тему, ее соответствующую метку времени и сообщение ROS.
создает rosbag файл журнала в месте, заданном bagwriter
= rosbagwriter(filepath
)path
и возвращает соответствующий rosbagwriter
объект.
Если вы не задаете имя файла сумки в filepath
, объект присваивает текущую метку времени как имя файла. Если папки вы задаете в filepath
не присутствуют в директории, объект создает их и помещает файл сумки соответственно. filepath
входной параметр устанавливает свойство FilePath.
устанавливает свойства Compression и ChunkSize с помощью аргументов name-value. Используйте этот синтаксис с входным параметром в предыдущем синтаксисе.bagwriter
= rosbagwriter(___,Name,Value
)
FilePath
— Путь к rosbag файлуЭто свойство доступно только для чтения.
Путь к rosbag файлу в виде вектора символов.
Типы данных: char
StartTime
— Метка времени первого сообщения записана в файл сумкиЭто свойство доступно только для чтения.
Метка времени первого сообщения, записанного в файл сумки в виде скаляра в секундах.
Типы данных: double
EndTime
— Метка времени последнего сообщения записана в файл сумкиЭто свойство доступно только для чтения.
Метка времени последнего сообщения, записанного в файл сумки в виде скаляра в секундах.
Типы данных: double
NumMessages
— Количество сообщений записано в файл сумкиЭто свойство доступно только для чтения.
Количество сообщений, записанных в файл сумки в виде скаляра.
Типы данных: double
Compression
— Формат сжатия фрагментов сообщения"uncompressed"
(значение по умолчанию) | "bz2"
| "lz4"
Формат сжатия сообщения разделяет на блоки в виде "bz2"
, "lz4"
, или "uncompressed"
.
Пример: "Compression","lz4"
Типы данных: char |
string
ChunkSize
— Размер каждого фрагмента сообщения
(значение по умолчанию) | ненулевое положительное целое числоРазмер каждого сообщения разделяет на блоки в виде ненулевого положительного целого числа в байтах. Значение задает буфер в объекте файла сумки. Сокращение этого значения приводит к большему количеству записей к диску.
Пример: "ChunkSize",819200
Типы данных: double
FileSize
— Текущий размер файла сумкиЭто свойство доступно только для чтения.
Текущий размер файла сумки в виде неотрицательного целого числа в байтах.
Типы данных: double
rosbagwriter
ОбъектПолучите всю информацию из rosbag файла журнала.
rosbag('info','path_record.bag')
Path: /tmp/BR2021bd_1751886_255755/mlx_to_docbook7/tp95a72b0e/ros-ex73035957/path_record.bag Version: 2.0 Duration: 10.5s Start: Jul 05 2021 08:09:52.86 (1625486992.86) End: Jul 05 2021 08:10:03.40 (1625487003.40) Size: 13.3 KB Messages: 102 Types: geometry_msgs/Point [4a842b65f413084dc2b10fb484ea7f17] Topics: /circle 51 msgs : geometry_msgs/Point /line 51 msgs : geometry_msgs/Point
Создайте rosbagreader
объект всех сообщений в rosbag файле журнала.
reader = rosbagreader('path_record.bag');
Выберите все сообщения, связанные с темой '/circle'
.
bagSelCircle = select(reader,'Topic','/circle');
Получите список меток времени от темы.
timeStamps = bagSelCircle.MessageList.Time;
Получите сообщения в выборе как массив ячеек.
messages = readMessages(bagSelCircle);
Создайте rosbagwriter
возразите, чтобы записать сообщения в новый rosbag файл.
circleWriter = rosbagwriter('circular_path_record.bag');
Запишите все сообщения, связанные с темой '/circle'
к новому rosbag файлу.
write(circleWriter,'/circle',timeStamps,messages);
Удалите rosbagwriter
объект из памяти и ясный связанный объект.
delete(circleWriter)
clear circleWriter
Получите всю информацию из нового rosbag файла журнала.
rosbag('info','circular_path_record.bag')
Path: /tmp/BR2021bd_1751886_255755/mlx_to_docbook7/tp95a72b0e/ros-ex73035957/circular_path_record.bag Version: 2.0 Duration: 10.4s Start: Jul 05 2021 08:09:52.86 (1625486992.86) End: Jul 05 2021 08:10:03.29 (1625487003.29) Size: 8.8 KB Messages: 51 Types: geometry_msgs/Point [4a842b65f413084dc2b10fb484ea7f17] Topics: /circle 51 msgs : geometry_msgs/Point
Загрузите новый rosbag файл журнала.
readerCircle = rosbagreader('circular_path_record.bag');
Создайте временные ряды для координат.
tsCircle = timeseries(readerCircle,'X','Y');
Постройте координаты.
plot(tsCircle.Data(:,1),tsCircle.Data(:,2))
axis equal
rosbagwriter
ОбъектСоздайте rosbagwriter
возразите и rosbag файл в текущей рабочей директории. Задайте формат сжатия фрагментов сообщения и размер каждого фрагмента сообщения.
bagwriter = rosbagwriter("bagfile.bag", ... "Compression","lz4",... "ChunkSize",1500)
bagwriter = rosbagwriter with properties: FilePath: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook2/tpddfbd76c/ros-ex26181333/bagfile.bag' StartTime: 0 EndTime: 0 NumMessages: 0 Compression: 'lz4' ChunkSize: 1500 Bytes FileSize: 4117 Bytes
Запустите узел и подключение к ведущему устройству ROS.
rosinit
Launching ROS Core... Done in 0.65801 seconds. Initializing ROS master on http://192.168.0.10:60864. Initializing global node /matlab_global_node_84052 with NodeURI http://bat6312glnxa64:32879/
Запишите один журнал в rosbag файл.
timeStamp = rostime("now"); rosMessage = rosmessage("nav_msgs/Odometry"); write(bagwriter,"/odom",timeStamp,rosMessage); bagwriter
bagwriter = rosbagwriter with properties: FilePath: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook2/tpddfbd76c/ros-ex26181333/bagfile.bag' StartTime: 1.6299e+09 EndTime: 1.6299e+09 NumMessages: 1 Compression: 'lz4' ChunkSize: 1500 Bytes FileSize: 4172 Bytes
Закройте сеть ROS.
rosshutdown
Shutting down global node /matlab_global_node_84052 with NodeURI http://bat6312glnxa64:32879/ Shutting down ROS master on http://192.168.0.10:60864.
Удалите rosbag объект средства записи из памяти и очистите связанный объект.
delete(bagwriter)
clear bagwriter
Создайте rosbagreader
возразите и загрузите все сообщения в rosbag файле журнала. Проверьте недавно записанный журнал.
bagreader = rosbagreader('bagfile.bag')
bagreader = rosbagreader with properties: FilePath: '/tmp/BR2021bd_1751886_255755/mlx_to_docbook2/tpddfbd76c/ros-ex26181333/bagfile.bag' StartTime: 1.6299e+09 EndTime: 1.6299e+09 NumMessages: 1 AvailableTopics: [1x3 table] AvailableFrames: {0x1 cell} MessageList: [1x4 table]
bagreader.AvailableTopics
ans=1×3 table
NumMessages MessageType MessageDefinition
___________ _________________ ___________________
/odom 1 nav_msgs/Odometry {' uint32 Seq...'}
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.