Tf transform failure
Hello, I'm writing rosrun tf tf_echo fiducial_0 tb3_1/camera_rgb_optical_frame
in the command line, and then I get this out:
Failure at 4640.886000000
Exception thrown:"fiducial_0" passed to lookupTransform argument target_frame does not exist.
The current list of frames is:
Frame tb3_0/base_link exists with parent tb3_0/base_footprint.
Frame tb3_0/camera_link exists with parent tb3_0/base_link.
Frame tb3_0/camera_rgb_frame exists with parent tb3_0/camera_link.
Frame tb3_0/camera_rgb_optical_frame exists with parent tb3_0/camera_rgb_frame.
Frame tb3_0/caster_back_left_link exists with parent tb3_0/base_link.
Frame tb3_0/caster_back_right_link exists with parent tb3_0/base_link.
Frame tb3_0/imu_link exists with parent tb3_0/base_link.
Frame tb3_0/base_scan exists with parent tb3_0/base_link.
Frame tb3_1/base_link exists with parent tb3_1/base_footprint.
Frame tb3_1/base_footprint exists with parent tb3_1/odom.
Frame tb3_1/camera_link exists with parent tb3_1/base_link.
Frame tb3_1/camera_rgb_frame exists with parent tb3_1/camera_link.
Frame tb3_1/camera_rgb_optical_frame exists with parent tb3_1/camera_rgb_frame.
Frame tb3_1/caster_back_left_link exists with parent tb3_1/base_link.
Frame tb3_1/caster_back_right_link exists with parent tb3_1/base_link.
Frame tb3_1/imu_link exists with parent tb3_1/base_link.
Frame tb3_1/base_scan exists with parent tb3_1/base_link.
Frame tb3_1/wheel_left_link exists with parent tb3_1/base_link.
Frame tb3_1/wheel_right_link exists with parent tb3_1/base_link.
Failure at 4640.886000000
Exception thrown:"fiducial_0" passed to lookupTransform argument target_frame does not exist.
The current list of frames is:
Frame tb3_0/base_link exists with parent tb3_0/base_footprint.
Frame tb3_0/camera_link exists with parent tb3_0/base_link.
Frame tb3_0/camera_rgb_frame exists with parent tb3_0/camera_link.
Frame tb3_0/camera_rgb_optical_frame exists with parent tb3_0/camera_rgb_frame.
Frame tb3_0/caster_back_left_link exists with parent tb3_0/base_link.
Frame tb3_0/caster_back_right_link exists with parent tb3_0/base_link.
Frame tb3_0/imu_link exists with parent tb3_0/base_link.
Frame tb3_0/base_scan exists with parent tb3_0/base_link.
Frame tb3_1/base_link exists with parent tb3_1/base_footprint.
Frame tb3_1/base_footprint exists with parent tb3_1/odom.
Frame tb3_1/camera_link exists with parent tb3_1/base_link.
Frame tb3_1/camera_rgb_frame exists with parent tb3_1/camera_link.
Frame tb3_1/camera_rgb_optical_frame exists with parent tb3_1/camera_rgb_frame.
Frame tb3_1/caster_back_left_link exists with parent tb3_1/base_link.
Frame tb3_1/caster_back_right_link exists with parent tb3_1/base_link.
Frame tb3_1/imu_link exists with parent tb3_1/base_link.
Frame tb3_1/base_scan exists with parent tb3_1/base_link.
Frame tb3_1/wheel_left_link exists with parent tb3_1/base_link.
Frame tb3_1/wheel_right_link exists with parent tb3_1/base_link.
At time 4641.670
- Translation: [-0.133, -0.153, 0.715]
- Rotation: in Quaternion [0.994, -0.005, 0.082, -0.066]
in RPY (radian) [-3.007, -0.163, -0.020]
in RPY (degree) [-172.305, -9.325, -1.153]
At time 4642.704
- Translation: [-0.133, -0.153, 0.715]
- Rotation: in Quaternion [0.994, -0.005, 0.082, -0.066]
in RPY (radian) [-3.007, -0.163, -0.020]
in RPY (degree) [-172.305, -9.325, -1.153]
At time 4643.656
- Translation: [-0.133, -0.153, 0.715]
- Rotation: in Quaternion [0.994, -0.005, 0.082, -0.066]
in RPY (radian) [-3.007, -0.163, -0.020]
in RPY (degree) [-172.304, -9.328, -1.154]
At time 4644.586
- Translation: [-0.021, 0.142, 0.721]
- Rotation: in Quaternion ...
The other transforms are static and published on startup, but perhaps it takes some time for
aruco_detect
to find and publish the transform. Does that not fit with your experience/expectation?I don't have much experience with this, so I can't really tell. But that does make sense, so thank you. That might be why it doesn't show up when I
rostopic echo /tf_static
tooHappy to help. And yes, I would only expect to see fixed transforms (e.g.,
base_link -> imu_link
) on/tf_static
. I will post an answer. If you're satisfied that the problem is resolved, please, mark it as accepted, but feel free to ask for further clarification.It seems pretty clear now, so static transforms are the transforms that are there from the start, but because the transforms to fiducial isn't static is because it is only there if a marker is detected. One other question I have is about the sudden changes in the translation of the transform, that seems a little weird especially since the robots are standing still
I can't speak to the accuracy of the algorithm (maybe +/- 15 cm is expected?), but I suspect it depends on several details, e.g., marker arrangement/number/size, camera calibration/resolution, simulation vs. real robot, etc. I would ask the package maintainers, but you could also try posting a separate question concerning accuracy. You may get an answer here, but if you find a forum more specific to ArUco markers, you may have better luck. Sorry, I can't help more with that one.