如何修复 rosbag2_py No RMW implementation found supporting serialization format

问题

你有如下代码

rosbag_write_example.py
import rosbag2_py
# [...]

storage_options = rosbag2_py.StorageOptions(uri=bag_directory, storage_id="sqlite3")
converter_options = rosbag2_py.ConverterOptions(output_serialization_format="cdr")
writer = rosbag2_py.SequentialWriter()
writer.open(storage_options, converter_options)

但运行时,你看到如下错误日志

rosbag_error_output.txt
[INFO] [1736530048.500477128] [rosbag2_cpp]: No plugin found providing serialization format ''. Falling back to checking RMW implementations.
[ERROR] [1736530048.500722869] [rosbag2_cpp]: Could not initialize RMWImplementedConverter: No RMW implementation found supporting serialization format
[INFO] [1736530048.500779197] [rosbag2_cpp]: No plugin found providing serialization format 'cdr'. Falling back to checking RMW implementations.
Traceback (most recent call last):
  File "/dev/shm/test.py", line 52, in <module>
    write_ros2_bag()
  File "/dev/shm/test.py", line 35, in write_ros2_bag
    writer.open(storage_options, converter_options)
RuntimeError: Could not find converter for format

解决方案

即使你只是在写入(而不是读取 ROSBag),你也需要为转换器指定 input_serialization_format 序列化格式:

rosbag_converter_options.py
converter_options = rosbag2_py.ConverterOptions(
  input_serialization_format="cdr",
  output_serialization_format="cdr"
)
# [...]

完整修复代码

rosbag_write_fixed.py
import rosbag2_py
# [...]

storage_options = rosbag2_py.StorageOptions(uri=bag_directory, storage_id="sqlite3")
converter_options = rosbag2_py.ConverterOptions(
  input_serialization_format="cdr",
  output_serialization_format="cdr"
)
writer = rosbag2_py.SequentialWriter()
writer.open(storage_options, converter_options)

Check out similar posts by category: ROS, Python