msg文件自定义消息话题

  • 以LVI-SAM为例,cloud_info.msg就是LVI-SAM自定义的消息类型;
  • 通常,都是利用msg文件,生成.h文件,然后cpp文件添加.h就可以正常使用自定义消息了;

自定义msg消息步骤

  • Step1:创建并编写msg文件;
  • Step2:在Cmakelist.txt文件中,进行相应的修改:
(1)find_package中添加“message_generation”

(2)添加find_package(Boost REQUIRED COMPONENTS filesystem program_options system timer)

(3)重点!
### Message generation
######################
add_message_files(
  DIRECTORY msg
  FILES
  cloud_info.msg
)

generate_messages(
  DEPENDENCIES
  geometry_msgs
  std_msgs
  nav_msgs
  sensor_msgs
)

######################

(4)在对应的可执行文件(cpp)中添加:
add_dependencies

example:
add_executable(lidar_camera src/lidar_camera.cpp)
add_dependencies(lidar_camera ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp)
target_link_libraries(lidar_camera
    ${catkin_LIBRARIES}
    ${OpenCV_LIBRARIES}
    ${PCL_LIBRARIES}
    ${CERES_LIBRARIES}
    Boost::timer
)

  • Step3:catkin_make

  • Step4:然后在工作空间/home/lanzy/ouster_ws/devel/include/sensors下,就生成了对应的.h文件:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QEkuip60-1674551701147)(https://secure2.wostatic.cn/static/sEHr1VNPPxEnnQ1Bj6vxUu/image.png?auth_key=1674551681-cJEm6j3naBBPKvbG5qkGgc-0-a4113e9bcc7dfe65cd9e770516ec8e92)]

    注意!sensors是“功能包的名字”,即在cmakelist.txt中project(sensors)

  • Step5:在cpp文件中,引入对应的头文件;

  • Step6:重点来了!

    • 因为要使用自定义的消息,所以在定义“接收器”和消息话题的时候,跟一般的话题肯定是不一样的!
    • 以激光点云为例:
    // * 接受点云     sensors::cloud_info就是自定义的点云类型
    ros::Subscriber subPointCloud = nh.subscribe<sensors::cloud_info>("/pointcloud", 10, laserCloudCalllback);

    对应的回调函数,也要修改:
// * 点云的回调函数
void laserCloudCalllback(const sensors::cloud_infoConstPtr& cornerPointsSharp2) {
    // * 新建一个点云
    cloudInfo = *cornerPointsSharp2;
    // * 点云时间戳
    cloudHeader = cornerPointsSharp2->header;
    // * ROS->PCL
    pcl::fromROSMsg(cornerPointsSharp2->cloud_deskewed, *curr_PointCloud);

}
  • Step7:完成;

猜你喜欢

转载自blog.csdn.net/m0_46905397/article/details/128757210