christianrauch/apriltag_ros

[Feature Request]: Tag Pose as Topic

Closed this issue · 3 comments

Hello, it's me again.

I miss getting the pose of the tags as a message. In ROS1 the Pose is included in the AprilTagDetection message. Here is only a TF available. What do you think about adding this here as well?

For me it is easier to create a callback to a Topic than to look for the TFs (in the subscriber node in matlab).

We could still discuss which message type is useful. Originally a geometry_msgs/PoseWithCovarianceStamped is used. But there is no coraiance and the stamp is already in the general msg header. Apart from compatibility reasons I think a geometry_msgs/Transform would make sense.

Thanks,
Andreas

What do you think about adding this here as well?

I only published the transformation on the tf topic as you will need it to connect different transformation trees. I think it is redundant to publish the same pose on multiple topics. I originally intended that the custom AprilTag messages (AprilTagDetection.msg) are used for debugging/visualisation or for some low-level usage when you are only interested in the homography.

We could still discuss which message type is useful. Originally a geometry_msgs/PoseWithCovarianceStamped is used. But there is no coraiance and the stamp is already in the general msg header. Apart from compatibility reasons I think a geometry_msgs/Transform would make sense.

Adding a WithCovarianceStamped type of message does not make sense to me if we do not set or use the covariance. A geometry_msgs/Transform or geometry_msgs/Pose make more sense. I am already creating a geometry_msgs/TransformStamped for the tf topic. We could reuse this message, as it also contains the child_frame_id, but then the header would be redundant again.

For me it is easier to create a callback to a Topic than to look for the TFs (in the subscriber node in matlab).

Does Matlab not offer a similar TF buffer system like the C/C++ and Python API? You can always subscribe directly to the tf topic and filter based on the "parent frame" via the frame_id in the header and the child_frame_id that contains the name of the tag.

Yes, you are right it would be redundant. But depending on the application, different formats may come in handy.

I think Matlab has the same API. But I am still not sure how to solve this properly.
If I use lookupTransform I have to poll the whole time to get a new tf immediately. If I use a subscriber callback for the tf topic, I have a lot of overhead callbacks with tfs i do not need.
I'm not sure, maybe I'm missing something but both variants don't convince me.

Instead of adding the transformation to the AprilTagDetection.msg, we could also create a new topic (E.g. tag_pose as geometry_msgs/TransformStamped. This has the advantage that we can select it via parameter and don't have to change the AprilTagDetection.msg.

If you are interested I could write a PR.

If I use a subscriber callback for the tf topic, I have a lot of overhead callbacks with tfs i do not need.

If you do not need the tag poses on the tf topic, you can simply remap the tf topic for the apriltag_node to something else and subscribe to this, to just get the published tag poses. Otherwise, you can still remap the topic to get the filtered topics and then relay the remapped topic back to the tf topic using the "topic tools": https://github.com/ros-tooling/topic_tools/blob/main/README.md#relay