Создайте и запишите журналы в 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...'}
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.