ARDUPILOT VOXL CAM ORIENTATION ISSUE ?



  • Last 4.2 arducopter permit to test voxl cam
    So i ordered fresh voxl cam (indoor setup) and tryed to make it work with arducopter:
    connexion is well established but i get issue:
    Issue is that voxl tell that its imu is upside down….
    alt text
    All is standard and viso orientation is set to forward.
    alt text
    So i dont understand how to resolve this…
    Randy Mackay (ardupilot dev leader) tell me that issue came from voxlcam.
    Mavlink communication between VOXL CAM and CUBE ORANGE is well established:
    alt text
    As you can see on photos (ardupilot discuss link below) , I oriented voxl cam standard in forward position.
    So if the issue come from the voxlcam imu how to fix?
    Also ordering it, as marked on your web normaly is ready to use without tune…
    Can you help?
    I made an issue on ardupilot discuss below:
    https://github.com/ArduPilot/ardupilot/issues/20481#issue-1196148461
    Thank you so much for your help.


  • Dev Team

    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.


  • Dev Team

    @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:
    voxltest6.jpg
    voxltest7.jpg
    voxltest2.jpg
    voxltest4.jpg

    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:
    voxlori.jpg
    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]
    }]
    newtracking.jpg

    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 server

    T_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)
    qvio qual.jpg

    We hope to have support from your team.

    Rgds,


  • Dev Team

    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.


  • Dev Team

    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,

    How to setup extrinsics for upside down ?

    Can you help?



  • @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=mBVFhS

    You 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?

    c7ba084c-33fb-4db7-af48-5aefa5c70a15-image.png

    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=mBVFhS

    You 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?

    c7ba084c-33fb-4db7-af48-5aefa5c70a15-image.png

    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=mBVFhS

    You 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?

    c7ba084c-33fb-4db7-af48-5aefa5c70a15-image.png

    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.


  • Dev Team

    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?


  • Dev Team

    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.


Log in to reply