ROS2_custom_interfaces/Header_Error.md

2.6 KiB

Header Message Errors

When wanting to introduce headers do the following steps.

You should have a CMake package created already (as only Cmake packages can implement custom msgs as of now).

Custom Message File

  • Create a *.mgs file inside the msg/ directory and start the file name with a capital letter
  • Add the line std_msgs/Header header in order to use the header message, this msg type is from standard messages (std_msgs)
  • Only introduce absolutely necessary comments in *.msg file (eg. #Header) in order to minimize possible errors.

Configure package.xml

  • Add buildtool_depend:
<buildtool_depend>ament_cmake</buildtool_depend>
<buildtool_depend>rosidl_default_generators</buildtool_depend>
  • Add build_depend:
<build_depend>builtin_interfaces</build_depend>
<build_depend>std_msgs</build_depend>
  • Add exec_depend:
<exec_depend>rosidl_default_runtime</exec_depend>
<exec_depend>builtin_interfaces</exec_depend>
<exec_depend>std_msgs</exec_depend>

Configure CMakeLists.txt

  • Add required packages:
find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(std_msgs REQUIRED)
  • Create msg files set (exchange with your own msg/*.msg files):
set(msg_files
  "msg/IMUInfo.msg"
  "msg/Extrinsics.msg"
)
  • Load set into rosidl_generate_interfaces and add the dependency for std_msgs:
rosidl_generate_interfaces(${PROJECT_NAME}
  ${msg_files}
  DEPENDENCIES builtin_interfaces std_msgs
)

Build Colcon Workspace

  • Move to root of workspace: cd ~/<path_to_ws>
  • Run build: colcon build

Test and Verify

  • Run publisher: ros2 topic pub /chatter <pkg_name>/msg/<custom_msg_file>
  • Run subscriber: ros2 topic echo /chatter

You should see your custom msg being published and received, including the header.

Source

Link to the problem's solution at ros.org forum
Example Files: