problem during converting grid_map_msgs message from ros1 to ros2
ArghyaChatterjee opened this issue · 2 comments
Bug report
Required Info:
- Operating System:
- Ubuntu 20.04
- ROS Versions
- ROS1 noetic, ROS2 Foxy
- Installation type:
- Source
Steps to reproduce issue
I have converted a grid_map_msgs type message from ros1 to ros2. I have a ros1 version for noetic and ros2 version for foxy. I have installed ros-noetic-grid-map-msgs from binaries in ros1 and built grid-map-msgs foxy devel in ros2 from the source. Now I can convert the message to 90% using ros1_bridge and I can see the message is able to publish the grid_map_msgs in ros2 but for some reason, the header and frame id seems to be publishing null value in ros2 side. Other data are correct.
ROS2 repo: https://github.com/ANYbotics/grid_map/tree/foxy-devel/grid_map_msgs/msg
ROS1 repo: https://github.com/ANYbotics/grid_map/tree/master/grid_map_msgs/msg
For ros1 side,
grid_map_msgs looks following:
# Grid map header
GridMapInfo info
# Grid map layer names.
string[] layers
# Grid map basic layer names (optional). The basic layers
# determine which layers from `layers` need to be valid
# in order for a cell of the grid map to be valid.
string[] basic_layers
# Grid map data.
std_msgs/Float32MultiArray[] data
# Row start index (default 0).
uint16 outer_start_index
# Column start index (default 0).
uint16 inner_start_index
grid_map_info looks following:
# Header (time and frame)
Header header
# Resolution of the grid [m/cell].
float64 resolution
# Length in x-direction [m].
float64 length_x
# Length in y-direction [m].
float64 length_y
# Pose of the grid map center in the frame defined in `header` [m].
geometry_msgs/Pose pose
For ros2 side,
grid_map_msgs looks following:
# Header (time and frame)
std_msgs/Header header
# Grid map header
GridMapInfo info
# Grid map layer names.
string[] layers
# Grid map basic layer names (optional). The basic layers
# determine which layers from `layers` need to be valid
# in order for a cell of the grid map to be valid.
string[] basic_layers
# Grid map data.
std_msgs/Float32MultiArray[] data
# Row start index (default 0).
uint16 outer_start_index
# Column start index (default 0).
uint16 inner_start_index
grid_map_info_msgs looks the following:
# Resolution of the grid [m/cell].
float64 resolution
# Length in x-direction [m].
float64 length_x
# Length in y-direction [m].
float64 length_y
# Pose of the grid map center in the frame defined in `header` [m].
geometry_msgs/Pose pose
As you can clearly see, in ros2 side the header and frame id has been swapped from grid_map_info to grid_map_msgs. In ros1 side, the header and frame id was inside grid_map_info and grid_map_info was called inside grid_map_msgs.
Expected behavior
The grid_map_msgs ros2 package should map the frame id and header from the grid_map_info_msgs in ros1 package.
During mapping, the way it should map:
grid_map_msgs.msgs.GridMap.header (ros2) = grid_map_msgs.GridMapInfo.header (ros1)
grid_map_msgs.msgs.GridMap.frame_id (ros2) = grid_map_msgs.GridMapInfo.frame_id (ros1)
Actual behavior
The grid_map_msgs ros2 package is mapping the frame id and header from the grid_map_msgs in ros1 package right now.
grid_map_msgs.msgs.GridMap.header (ros2) = grid_map_msgs.GridMap.header (ros1, which is null)
grid_map_msgs.msgs.GridMap.frame_id (ros2) = grid_map_msgs.GridMap.frame_id (ros1, which is null)
The Problem showing right now
[INFO] [1670545266.987060675] [rviz]: Message Filter dropping message: frame '' at time 0.000 for reason 'EmptyFrameID'
My question is, how can I manually edit the conversion file (inside build/install of bridge workspace) so that I can map that specific element (header and frameid) inside grid_map_msgs manually before or after the build?
Can anyone respond to this issue ? I need it urgent.
This issue is still ongoing, I am having the same exact trouble too