把ros2录制的bag包转换为ros1格式的bag包(自定义话题及服务消息类型)

自定义话题及服务消息类型与系统内置消息的区别就在于自定义的类型ROS1_bridge必须用源代码重新编译。

1. 创建ros1_bridge工作区。我们在一个单独的工作区中构建ROS1_bridge,因为它需要在其环境中同时使用ROS1和ROS2包。从github上拉下代码时候注意git分支的对应修改,我的ros2是galactic。如果下载为dashing分支,编译时候会很多报错如下图所示

 mkdir -p ~/ros1_bridge_ws/src
 cd ~/ros1_bridge_ws/src
git clone -b galactic https://github.com/ros2/ros1_bridge.git

2. ros1的代码路径在~/catkin_ws/src/custommsg/msg/SetString.msg,SetString.msg如下:

 bool b
 string message

3.ros2的代码路径在~/colcon_ws/src/custommsg/msg/SetString.msg,其对应的CMakeList.txt和package.xml文件如下图所示:

 cmake_minimum_required(VERSION 3.5)
 project(custommsg)

 # Default to C++14
 if(NOT CMAKE_CXX_STANDARD)
   set(CMAKE_CXX_STANDARD 14)
 endif()

 if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   add_compile_options(-Wall -Wextra -Wpedantic)
 endif()

 find_package(ament_cmake REQUIRED)
 find_package(builtin_interfaces REQUIRED)
 find_package(rosidl_default_generators REQUIRED)

 rosidl_generate_interfaces(custommsg
   "msg/SetString.msg"
   DEPENDENCIES builtin_interfaces
 )
 install(
   FILES my_mapping_rules.yaml
   DESTINATION share/${PROJECT_NAME})

 ament_package()
<?xml version="1.0"?>
 <?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
 <package format="3">
   <name>custommsg</name>
   <version>0.0.0</version>
   <description>TODO: Package description</description>
   <license>TODO: License declaration</license>

   <buildtool_depend>ament_cmake</buildtool_depend>
   <buildtool_depend>rosidl_default_generators</buildtool_depend>
   <member_of_group>rosidl_interface_packages</member_of_group>'
   <test_depend>ament_lint_auto</test_depend>
   <test_depend>ament_lint_common</test_depend>
   <export>
     <build_type>ament_cmake</build_type>
     <ros1_bridge mapping_rules="my_mapping_rules.yaml"/>
   </export>
 </package>

my_mapping_rules.yaml如下:

   ros1_package_name: 'custommsg'
   ros1_service_name: 'SetString'
   ros2_package_name: 'custommsg'
   ros2_service_name: 'SetString'

4. 编译bridge

source /opt/ros/noetic/setup.bash
source /opt/ros/galactic/setup.bash
source ~/catkin_ws/devel/setup.bash
source ~/colcon_ws/install/setup.bash
colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure --cmake-args -DBUILD_TESTING=FALSE  

最后的--cmake-args -DBUILD_TESTING=FALSE也可以在对应的CMakeList.txt设置

...
58 set(TEST_ROS1_BRIDGE FALSE)
59 set(BUILD_TESTING FALSE)
if(BUILD_TESTING)
...
endif()

编译成功后,启动ros2到ros1的桥,也可以打印出映射的消息看是否有自定义的消息:

 source install/local_setup.bash
 ros2 run ros1_bridge dynamic_bridge --print-pairs
 ros2 run ros1_bridge dynamic_bridge

5. 使用ros2播放ros2的bag包

source /opt/ros/galactic/setup.bash
source ~/colcon_ws/install/setup.bash
ros2 bag play rosbag2_2022_04_09-14_59_04_0.db3 --topics /gnss_driver/gnssvel /gnss_driver/rawimu 

6. 使用ros1录制包

source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash
rosbag record /gnss_driver/rawimu  /gnss_driver/gnssvel

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,为了能够使用奥比中光Gemini2相机,需要安装其驱动程序和ROS。可以参考官方文档进行安装:https://developer.oculus.com/documentation/unity/latest/concepts/book-unity-gsg/ 安装完成之后,可以通过以下命令启动相机节点: ``` roslaunch optris_drivers optris_node.launch ``` 接下来,可以利用rosbag进行数据录制。在启动相机节点之后,运行以下命令启动rosbag录制: ``` rosbag record -a ``` 这将录制所有的ROS主题,括相机图像和其他传感器数据。录制完成后,可以通过以下命令播放录制的数据: ``` rosbag play <bagfile> ``` 其中,`<bagfile>` 是录制rosbag文件名。播放时,可以通过rviz等工具查看录制的数据。 接下来,可以使用rtabmap_ros录制的数据进行SLAM建图。首先需要安装rtabmap_ros: ``` sudo apt-get install ros-<distro>-rtabmap-ros ``` 其中,`<distro>` 是ROS的发行版名称,比如`melodic`或`noetic`等。 安装完成后,可以运行以下命令启动RTAB-Map节点: ``` roslaunch rtabmap_ros rtabmap.launch ``` 在启动节点之前,需要将rosbag中的传感器数据重新发布到对应的ROS主题上。可以使用以下命令进行数据重放: ``` rosbag play --clock <bagfile> ``` 其中,`--clock`选项可以确保录制的时间戳与实际时间戳一致。然后,可以通过rviz等工具查看实时的建图结果。 以上就是利用奥比中光Gemini2相机为rtabmap_ros录制rosbag及其使用的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值