AprilTags do not work in voxl-vision-px4
-
Hi,
I tried the inbuild AprilTag feature today but I can't get it to work and I have no idea what is going wrong. I strictly followed the instructions from the walkthrough video / text.The related config is very basic:
"en_apriltag_fixed_frame": true, "fixed_apriltags": [ { "tag_id": 1, "R_tag_to_fixed": [ [0, -1, 0], [1, 0, 0], [0, 0, 1] ], "T_tag_wrt_fixed": [0, 0, 0] } ], "en_transform_mavlink_pos_setpoints_from_fixed_frame": true, "en_fixed_frame_pipe": false,I set the
tag-sizeto0.16, as each square of the 8x8 tag grid is 2cm. A change of this parameter never had an effect to the detected tag position fromvoxl-vision-px4, which I find very strange.When I run
voxl-vision-px4 -pfor debug odometry in fixed frame I get lots of out of bounds warnings. A "first-detection" with a followed position "reset" of fixed frame does not happen.T_body_wrt_fixed: -0.00 0.00 -0.20 RPY: 0.00 0.00 -0.00 T_body_wrt_fixed: -0.00 0.00 -0.20 RPY: 0.00 0.00 0.00 WARNING, apriltag roll/pitch out of boundsSometimes, the tag is detected and the position is set to the fixed frame which is way off. This causes voxl-vision-px4 to diverge within a few seconds, even if the drone does not move at all. It crashes in the end of that process and resets the frame.
When I run
voxl-test-vision-lib -ait printsID: 1 hamming: 0 margin:89.98 XYZ: 0.67 0.06 1.85 RPY: -0.51 0.25 0.25 hz: 13.6which seams reasonable, even if there is a rotation offset (btw. This is in the frame of the camera right? The z-axis point 45 deg downwards away from the drone)
I recalibrated the tracking camera and reset the config multiple times. Any idea what else could be wrong here? Here is a picture of the setup, it is very similar to your walkthrough video, the voxl is about 1 meter away in y and z directions.

Any suggestions would be greatly appreciated!
-
Thank you for the very detailed report, that is extremely helpful. You were right to notice the translation did not update when you change the tag size. I found the documentation incorrectly listed the config file in which this parameter exists, it should be set in '/etc/modalai/vio_apriltag_app.xml' instead.
Sorry for the confusion, I've updated the documentation.
https://docs.modalai.com/voxl-vision-px4-apriltag-relocalization/
As a heads up, we will soon have a standalone apriltag detection service which will consolidate the tag-size parameter along with the ids, translations, and rotations into its own config file. This should make the setup process less confusing.
-
Thank you, with the correct config file for the tag size, the detected tag positions and rotations in
voxl-test-vision-lib -alook quite accurate now!Unfortunately, this had no impact on the vio, it is still not detecting any April tag correct and I get lots of:
... WARNING, apriltag roll/pitch out of bounds WARNING, apriltag roll/pitch out of boundsBut maybe this is not AprilTag related, as vio is reporting very high velocities, sometimes without any AprilTag visible:
... T_body_wrt_local: 1738.20 882.29 453.10 RPY: 0.11 -0.09 -0.38 velocity: 39.93 42.38 3.43 VIO in failed state, restartingMost of the time, all values are increasing without any movement until it is in failed state.
One more thing that comes to my mind, when I stream from the tracking camera (e.g. via the
voxl_cam_rosnode) it always streams an overexposed image:

I have to set the exposure parameter down to 0.05 to get a "normal" image. Maybe your vio uses the overexposed images as well leading to strange results.
-
Never mind, I updated all packages and reset all configs and it appears to work great. Maybe a misconfiguration somewhere else.
Thank you!
-
Glad you got it working, let me know if you have any more questions. Apriltag relocalization is still a fairly new feature with only me and a few other customers really using it extensively so any feedback is appreciated. Thank you!