ARDUPILOT VOXL CAM ORIENTATION ISSUE ?
-
Hi Serge,
The file /etc/modalai/extrinsics.conf contains the location and orientation of IMUs, cameras, body, etc. Likely this was never configured and both voxl-qvio-server and voxl-vision-px4 think the IMUs are in their default orientation which is different than VOXLCAM.
You should be able to run voxl-configure-extrinsics and select the option for Seeker/VOXLCAM. Then reboot and both voxl-vision-px4 and voxl-qvio-server will load in the new extrinsic parameters.
Best,
James -
Thank you for your feedback,
The best will be you send us the complete setup with all the steps from scratch to made the voxl cam indoor work perfectly with our PX4 autopilot
Can you help us?
We try to make it work, we have 10 units voxl cam order pending.....
Kind regards.
-
@serge did you try running voxl-configure-extrinsics and select the option for Seeker/VOXLCAM ?
-
Hello, today, I've been able to make tests, running voxl-configure-extrinsics and select the option for Seeker/VOXLCAM.
So now I been able to make it work, but I have an issue....
I'm working on rover, and when it move from 3m voxl cam see 3,70m....
I also test the rove by directly mooving it with my arm at 1m above the ground, indor and outdoor, EKF go failsafe very quicly.
EKF is set to lissen only voxlcam.
So what can be the issue, what can I check to correct the issue ?
please check the image below with test and params:
I hope you can give us check to do to understand from where come the issue.
Rgds
-
Hello, I found from where come the issue:
tracking camera is badly oriented for this rover application.So I moove the tracking camera to front left position at the right of the left stereo camera.
I will try to setup the extrinsics.
-
Hello,
I moded params in voxl:~$ vi /etc/modalai/extrinsics.conf
for match the new tracking camera position (image below).Can you confirm that new intrinsec params are good for it?
"name": "seeker_v1_voxlcam",
"extrinsics": [{
"parent": "imu0",
"child": "tracking",
"T_child_wrt_parent": [0.041, -0.005, 0.005],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "tracking",
"T_child_wrt_parent": [-0.0614, -0.08, 0.005],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "imu0",
"T_child_wrt_parent": [0.0496, -0.0152, 0.0161],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "imu1",
"T_child_wrt_parent": [0.0465, 0.0332, -0.013],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "stereo_l",
"T_child_wrt_parent": [0.055, -0.04, 0],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "ground",
"T_child_wrt_parent": [0, 0, 0.045],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "imu0",
"T_child_wrt_parent": [-0.0484, 0.037, 0.002],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "tof",
"T_child_wrt_parent": [0.055, 0, 0],
"RPY_parent_to_child": [0, 90, -90]
}]
After I make tests with this new setup, but it not changer anythink....
As soon as I go forward qvio quality drop directly:
voxl:~$ voxl-inspect-qvio -q
waiting for serverT_imu_wrt_vio (m) |Roll Pitch Yaw (deg)| quality | state| error_code
from this:
6.85 0.19 -0.63| 0.7 55.2 -7.5| 0.08832| OKAY |
to 0.00005 and make error.So question is doeas I changed the good extrinsics file???
How to make that the quality no drop when rover move.
(there is no vibrations)
We hope to have support from your team.
Rgds,
-
Hi,
Looking at the difference between the default imu1 to tracking :
{ "parent": "imu1", "child": "tracking", "T_child_wrt_parent": [-0.0344, 0.03, 0.005], "RPY_parent_to_child": [-45, 0, 0] }
and yours:
{ "parent": "imu1", "child": "tracking", "T_child_wrt_parent": [-0.0614, -0.08, 0.005], "RPY_parent_to_child": [0, 0, 0] }
You seem to have indicated that the camera has moved 3cm in x direction and 11cm in y, which doesn't seem correct based on how far you've moved the camera, so it's probably an extrinsics issue causing this.
-
can you give me the right numbers?
I dont understand the orientation...
tracking is now 9mm above old position and 27mm to the right respecting the old position.
for me is the only change.
so based on old extrinsics:
iimu1/tracking -0.0344 -0,027mm , 0.03, 0.005 - 0,009mm this is right?or the good change is: -0.0344, 0.03 -0,027mm, 0.005 - 0,009mm
Please help us.
So the error is also in the imu0 I think....
-
Hello, So I corrected this point now I achive to make ride indoor with 0,1 mean quality and even I go to 0,6 quality spikes, so now we can tell that this extrinsics are correct for qvio.
Now the issue is that there is clearly issus beetwin voxl coordinates and px4.
I always have ekf faisafe as soon as I go forward.
So As I use normal px4 ap, there is extrinsics to enter in extrinsics conf fil or px4?
Can you help me please?
-
After many test we get singular issue.
All seem to be related to bad reference between autopilot and voxlcam.
We initialising, we we go straight to the north, there is no errors, as soon as we make turn EK3 failsafe.
Maybe we need proffessionnal support from you, can you please contact us ?
Kind regards.
-
A good document on how to modify the extrinsics can be found here
That being said, for an indoor rover the easiest path is to flip VOXL CAM upside down and keep everything as default
-
-
@Chad-Sweet Hello,
Ok for test the upside down, can you share here the extrinsics to put it upside down?
As you can show on the photos on posts above, I set the extrinsics file to this values below to match the tracking camera positionning, and I achieve better positionning and qvio quality.
Please check my extrinsics below:
{
"name": "seeker_v1_voxlcam",
"extrinsics": [{
"parent": "imu0",
"child": "tracking",
"T_child_wrt_parent": [0.041, 0.014, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "tracking",
"T_child_wrt_parent": [-0.0074, 0.021, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "imu0",
"T_child_wrt_parent": [0.0496, -0.0152, 0.0161],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "imu1",
"T_child_wrt_parent": [0.0465, 0.0332, -0.013],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "stereo_l",
"T_child_wrt_parent": [0.055, -0.04, 0],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "ground",
"T_child_wrt_parent": [0, 0, 0.045],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "imu0",
"T_child_wrt_parent": [-0.0484, 0.037, 0.002],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "tof",
"T_child_wrt_parent": [0.055, 0, 0],
"RPY_parent_to_child": [0, 90, -90]
}]
}But the issue, is that I always get bad positionning.
please check the ardurover log via the link below:
https://1drv.ms/u/s!AssmjyIs_YcBqz7NvkZmM4Gv7LZt?e=mBVFhSYou can see that we achieve to make U chape trajectory, but at some point, qvio loses the yaw.......
Please check the log.
Please also tell me how to make qvio logs with voxlcam for you post analys what going on.
Also, please tel me what qvio quality number must be achieved when going forward and making turns?
here you have the best logs we achieved.
at the end qvio lose yaw....I really would like to try the upside down voxlcam with tracking camera mounted as factory deliver it.
Please let me know how to achieve this, I think that extrinsics file is not the only conf file to tune for it, and all the items must be reversed?
It would be gracefull from your part to provide consistant support for it by giving the extrisincs and sharing it at all your customers here.
Kind regards.
-
@serge said in ARDUPILOT VOXL CAM ORIENTATION ISSUE ?:
@Chad-Sweet Hello,
Ok for test the upside down, can you share here the extrinsics to put it upside down?
As you can show on the photos on posts above, I set the extrinsics file to this values below to match the tracking camera positionning, and I achieve better positionning and qvio quality.
Please check my extrinsics below:
{
"name": "seeker_v1_voxlcam",
"extrinsics": [{
"parent": "imu0",
"child": "tracking",
"T_child_wrt_parent": [0.041, 0.014, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "tracking",
"T_child_wrt_parent": [-0.0074, 0.021, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "imu0",
"T_child_wrt_parent": [0.0496, -0.0152, 0.0161],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "imu1",
"T_child_wrt_parent": [0.0465, 0.0332, -0.013],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "stereo_l",
"T_child_wrt_parent": [0.055, -0.04, 0],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "ground",
"T_child_wrt_parent": [0, 0, 0.045],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "imu0",
"T_child_wrt_parent": [-0.0484, 0.037, 0.002],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "tof",
"T_child_wrt_parent": [0.055, 0, 0],
"RPY_parent_to_child": [0, 90, -90]
}]
}But the issue, is that I always get bad positionning.
please check the ardurover log via the link below:
https://1drv.ms/u/s!AssmjyIs_YcBqz7NvkZmM4Gv7LZt?e=mBVFhSYou can see that we achieve to make U chape trajectory, but at some point, qvio loses the yaw.......
Please check the log.
Please also tell me how to make qvio logs with voxlcam for you post analys what going on.
Also, please tel me what qvio quality number must be achieved when going forward and making turns?
here you have the best logs we achieved.
at the end qvio lose yaw....I really would like to try the upside down voxlcam with tracking camera mounted as factory deliver it.
Please let me know how to achieve this, I think that extrinsics file is not the only conf file to tune for it, and all the items must be reversed?
It would be gracefull from your part to provide consistant support for it by giving the extrisincs and sharing it at all your customers here.
Kind regards.
Dear Chad, Please, can you tell me if tracking camera is factory calibrated? Do you advice to calibrate it to enhance the results?
-
@sergio said in ARDUPILOT VOXL CAM ORIENTATION ISSUE ?:
@serge said in ARDUPILOT VOXL CAM ORIENTATION ISSUE ?:
@Chad-Sweet Hello,
Ok for test the upside down, can you share here the extrinsics to put it upside down?
As you can show on the photos on posts above, I set the extrinsics file to this values below to match the tracking camera positionning, and I achieve better positionning and qvio quality.
Please check my extrinsics below:
{
"name": "seeker_v1_voxlcam",
"extrinsics": [{
"parent": "imu0",
"child": "tracking",
"T_child_wrt_parent": [0.041, 0.014, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "tracking",
"T_child_wrt_parent": [-0.0074, 0.021, 0.01],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "imu0",
"T_child_wrt_parent": [0.0496, -0.0152, 0.0161],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "imu1",
"T_child_wrt_parent": [0.0465, 0.0332, -0.013],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "stereo_l",
"T_child_wrt_parent": [0.055, -0.04, 0],
"RPY_parent_to_child": [0, 90, 90]
}, {
"parent": "body",
"child": "ground",
"T_child_wrt_parent": [0, 0, 0.045],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "imu1",
"child": "imu0",
"T_child_wrt_parent": [-0.0484, 0.037, 0.002],
"RPY_parent_to_child": [0, 0, 0]
}, {
"parent": "body",
"child": "tof",
"T_child_wrt_parent": [0.055, 0, 0],
"RPY_parent_to_child": [0, 90, -90]
}]
}But the issue, is that I always get bad positionning.
please check the ardurover log via the link below:
https://1drv.ms/u/s!AssmjyIs_YcBqz7NvkZmM4Gv7LZt?e=mBVFhSYou can see that we achieve to make U chape trajectory, but at some point, qvio loses the yaw.......
Please check the log.
Please also tell me how to make qvio logs with voxlcam for you post analys what going on.
Also, please tel me what qvio quality number must be achieved when going forward and making turns?
here you have the best logs we achieved.
at the end qvio lose yaw....I really would like to try the upside down voxlcam with tracking camera mounted as factory deliver it.
Please let me know how to achieve this, I think that extrinsics file is not the only conf file to tune for it, and all the items must be reversed?
It would be gracefull from your part to provide consistant support for it by giving the extrisincs and sharing it at all your customers here.
Kind regards.
Dear Chad, Please, can you tell me if tracking camera is factory calibrated? Do you advice to calibrate it to enhance the results?
Also Please send me the voxl cam intrinsics for upside down the voxlcam in rover app.
I really need your support to go forward please.
-
All of the cameras are calibrated coming out of the factory. If you need to recalibrate the cameras the instructions to do so can be found here. If you're placing the voxl-cam in a new location on a body you'll just need to change all of the something->body relations in that extrinsics file (the rest will be the same because the other relations are all within the voxl-cam which you're moving as a unit). Do this by picking a location on your platform to serve as the body center and measure the translation and rotation between the voxl-cam and your vehicle.
-
@Alex-Gardner so you confirm that as i just changed the tracking cam position (see upper post):
-
as intrinsic not mention body relation with tracking cam , I dont need to change any other intrinsic than imu1 and imu2 relation to tracking cam, and thats what i do ?
-
you confirm that body intrinsic position on the voxl cam is the center of the voxl cam?
-
-
@sergio said in ARDUPILOT VOXL CAM ORIENTATION ISSUE ?:
@Alex-Gardner so you confirm that as i just changed the tracking cam position (see upper post):
-
as intrinsic not mention body relation with tracking cam , I dont need to change any other intrinsic than imu1 and imu2 relation to tracking cam, and thats what i do ?
-
you confirm that body intrinsic position on the voxl cam is the center of the voxl cam?
If not can you show where is the virtual position of body related to voxlcam?
Also what is ground position in intrinsics?
-
-
If you pointed the VOXL CAM, as originally built, upside down you would not need to change the extrinsics. The extrinsics are between the internal image sensors and IMU.
-
Hi Sergio. I'm handle a number of rover configurations here for the team. Reading thru the posts, let's take a step back to confirm your setup.
a. you are using the cube to output IMU data into voxl-cam.
b. you are using voxl-cam to output odom data [back] to the cube for (e.g. external vision localization)
c. the camera has been moved from the stock position of -45deg from horizon w.r.t. voxl-cam body to 0deg from horizon w.r.t. voxl cam body.
d. the cube is mounted w/IMU in standard orientation (0 deg to horizon/forward, aka imu RPY is 0,0,0)
e. you are not using a modalai flight core (option for voxl-cam purchase)First of make sure your PX4 SENS_BOARD_ROT (or AHRS_ORIENTATION if Ardupilot) is set for a cube setup (I recall should be "No rotation" as well as from your photo). Please reply if that is all correct. If so, then we can move to the next step where I can show you how confirm vio's pose estimation (after that then we'll look at position accuracy).