Skip to content

Autonomy: VIO, Mapping and Navigation

113 Topics 474 Posts

GPS-denied navigation with VIO, AprilTag relocalization, mapping and path planning, and obstacle avoidance.

  • 0 Votes
    1 Posts
    47 Views
    No one has replied
  • 0 Votes
    8 Posts
    459 Views
    김진혁김
    Zach, as promised, here is the follow-up on the 15 Hz state. It showed up again on 8 Oct and 13 Oct. Two corrections to what we reported in September come first, because both of them change the picture. Correction 1 — "it only recovers via restart" was wrong. In September we reported that stopping voxl-mapper never restored 30 Hz and that only systemctl restart voxl-open-vins-server brought it back (3 reproductions). That conclusion was an artifact of our own method: all three times we restarted the service, so we never observed what happens if we just wait. On 8 Oct the unit went from a fully stuck state (dt 66.7 ms x 100 %, zero 33.3 samples) back to 33.3 ms on its own in about 5 minutes, with systemctl show voxl-open-vins-server reporting NRestarts=0 and an unchanged ActiveEnterTimestamp. The service was never restarted. Correction 2 — the "mapper produces zero rows" symptom was our own sequencing error. We reported in September that voxl_mapper_aligned_ptcloud output nothing while VIO ran at 15 Hz. The real cause: restarting voxl-open-vins-server leaves voxl-mapper reporting active while its mapping function is dead. systemctl is-active still says active; only the empty point-cloud pipe reveals it. A single systemctl restart voxl-mapper restores it. On 8 Oct we measured the two states side by side — fully stuck VIO with a healthy map (1,473-1,675 points, ~10 Hz), and healthy 33.3 ms VIO with zero map rows right after a VIO restart. So dt and map output are independent, and our September report conflated them. Sorry for the noise that caused. New observation — the stuck state clears the moment the drone takes off. This is the part we think is most useful to you. On 13 Oct the unit sat fully stuck on the ground for 5 minutes (66.7 ms x 100 %, NRestarts=0, no self-recovery this time). It returned to 33.3 ms within one sample of takeoff and stayed there for the entire flight (44 samples, all 33.3). Feature count also rose from 19 on the ground to 30 in the air. 14:07:59 dt 66.7 features 17 quality 57% on ground 14:08:07 dt 33.3 features 30 quality 75% takeoff 14:08:16+ dt 33.3 features 15-30 entire flight Related: on the ground at rest, VIO publishes blank packets that look healthy. Before takeoff we saw 480 consecutive samples with features 0 and T_imu_wrt_vio frozen to two decimals, while dt read 33.3, quality read 96 % and error_codes was empty. The journal explains it: [HEALTH] Publishing blank VIO packet due to missing sensors. Moving the airframe by hand for ~10 seconds started tracking immediately (features 11-30). So on a stationary unit, dt and quality are not evidence that VIO is estimating anything. Our working hypothesis, which matches yours. Across 8 Oct and 13 Oct, all three stuck states began immediately after we picked the drone up and walked with it. Periods where the unit sat still ran at 33.3 ms. That is consistent with the static-jerk-throttle mechanism you described: the throttle is a releasable state, hand motion during initialization keeps re-creating the condition, and sustained flight motion clears it. Questions, if you have a moment: Does "clears on takeoff, never clears while stationary on the ground" fit the static jerk throttle as you understand it? Is the blank-packet behaviour on a stationary unit expected — i.e. is features 0 with a healthy-looking dt/quality the normal pre-initialization output? Environment unchanged: voxl-suite 1.6.4~beta5, system-image 1.8.08-M0054-14.1a-perf, SKU MRB-D0012-4-V4-C29-T8-M36, voxl-mapper 0.2.4. We are still holding the unit at factory SDK as the baseline for these comparisons. Journals from both boots are available if useful.
  • 0 Votes
    1 Posts
    105 Views
    No one has replied
  • Camera Calibration – Starling 2 Max

    Solved Development Drones
    5
    0 Votes
    5 Posts
    267 Views
    V
    @tom thank you
  • 0 Votes
    2 Posts
    120 Views
    ModeratorM
    The source code you're referencing is a good starting point as an example for what you want to develop. We do not have a ready made tracker for use today and do not have plans to implement one. We just have those references as a development starting point
  • This topic is deleted!

    Unsolved
    1
    0 Votes
    1 Posts
    33 Views
    No one has replied
  • OpenVINS

    Unsolved vio
    2
    1
    0 Votes
    2 Posts
    325 Views
    zauberflote1Z
    Please update your VINS to our master branch here: https://gitlab.com/voxl-public/voxl-sdk/services/voxl-open-vins-server For epoch-synced cams, tracking AR0144, please use: https://gitlab.com/voxl-public/voxl-sdk/services/voxl-open-vins-server/-/tree/synced-timestamp?ref_type=heads
  • Visual position estimate and offboard control

    Unsolved vio
    6
    0 Votes
    6 Posts
    3k Views
    Eric KatzfeyE
    @bschulzhf PX4 will only correct incoming messages. Something external will have to also run TIMESYNC with PX4 to estimate the offset and correct and incoming PX4 message timestamps that it wants to align. voxl-mavlink-server does this for a few messages.
  • Avoidance

    Unsolved vio
    3
    0 Votes
    3 Posts
    3k Views
    Eric KatzfeyE
    @Ward-Javoronok How is the parameter COM_OBS_AVOID set? If you set it to 0 that disables obstacle avoidance and should get rid of that error.
  • Adding more cameras to VIO

    Unsolved vio
    2
    1 Votes
    2 Posts
    2k Views
    K
    Adding more cameras can definitely improve robustness, but synchronization and calibration become super important once you go beyond the default setup. Even small timestamp offsets between sensors can throw VIO off pretty badly. I’d also keep an eye on bandwidth and CPU usage because extra camera streams add up fast on embedded systems.
  • Running QVIO on a hires camera

    Unsolved vio
    16
    1 Votes
    16 Posts
    9k Views
    Alex KushleyevA
    @Rowan-Dempster , Thanks for the update! On my end, I did not get a chance to enable MISP pipeline (normalization in particular) to run offline. Let me double check something with you - would you want to load a log with raw10 and resize + generate the normalized image (of a different size) or just keep the same size as input? Since you have the basic rolling shutter QVIO working, it would be interesting to see how that compares to the AR0144 QVIO from the same data set. Any details you would like to share? (only if you want to) Regarding playback results from QVIO output not being exactly repeatable -- " no deterministic mechanism to ensure that voxl-qvio-server initializes using the same camera frame" -- what do you mean by that? if you start QVIO and start feeding the frames + imu data from voxl-replay, the data should arrive into QVIO repeatably and QVIO should initialize on the same frame - after the initialization conditions have been satisfied. If I remember correctly the way QVIO app works is that it may hold the frame until all the IMU data for that frame has arrived and then pushes the frame into the QVIO algorithm. If you push the frame before pushing all the IMU data, then the algorithm will still process the frame but it wont have the IMU data for the whole duration of the frame capture. The frame capture duration for global shutter cameras is simple : start = start of exposure end = end of exposure = start of exposure + exposure time (i believe it is common to assign a timestamp which is equal to the center of exposure, which is between the start and end timestamps). center of exposure = start of exposure + (exposure time)/2 In order to find the center of exposure for rolling shutter camera, you need to use the following formula, as used in our EIS implementation in MISP: int64_t center_of_exposure_ns = start_of_exposure_ns + (exposure_time_ns + readout_time_ns)/2; In any case, this would be something to double check.. also i don't know how far your trajectories are from run to run. Another tip: since you don't have ground truth in your data, it helps to start and end your data collection in exactly the same spot and orientation, so you can use the end position drift as a good metric (ground truth). Alex
  • Two-camera VIO non-functional in voxl-open-vins-server 0.6.0 (SDK 1.6.3)

    Unsolved vio
    5
    0 Votes
    5 Posts
    3k Views
    Alex KushleyevA
    I have uploaded the latest ar0144 drivers with fsin versions for all camera slots here : https://storage.googleapis.com/modalai_public/temp/ar0144/ar0144_drivers_20260402.zip There are two additional files (inside the zip), which you should copy to /usr/lib/camera to make sure you have the latest updates: com.qti.sensor.ar0144.so -- contains functions for exposure / gain control (we recently made some improvements to make gain control smoother) com.qti.tuned.default.bin -- fixed gain scaling so that min gain (1.0x analog gain) is equal to 100 in the HAL3 gain units, not 54 (and the max gain will be 29.6 = 29600 for AR0144) -- you can also double check this using voxl-camera-server -l and update the min/max gain settings in your voxl-camera-server.conf to make sure you are using the full range. My colleague will follow up with a diagram for locations of the DNI resistors that need to be installed to enable sync signal for camera slots 1 and 3 (0402 0-ohm resistor) Alex
  • Switching between Mag+GPS and VIO indoors

    Unsolved vio
    8
    0 Votes
    8 Posts
    5k Views
    Eric KatzfeyE
    @Sarika-Sharma You can get v1.0.10 here: http://voxl-packages.modalai.com/dists/qrb5165/dev/binary-arm64/libfc-sensor_1.0.10-202602041609_arm64.deb
  • This topic is deleted!

    2
    2
    0 Votes
    2 Posts
    27 Views
  • Apriltag relocalization not relocalizing?

    Unsolved apriltag
    13
    0 Votes
    13 Posts
    8k Views
    Zachary Lowell 0Z
    @Nitin-Varma-Vegesna said in Apriltag relocalization not relocalizing?: @Nitin-Varma-Vegesna Is there any release that is known to work for April Tag Detection? https://gitlab.com/voxl-public/voxl-sdk/services/voxl-tag-detector The dev branch is the most recent - I have to check with the engineering team on this as I am unsure the priority of april tag detection and positioning based off it. Will relay back
  • 0 Votes
    4 Posts
    3k Views
    Nitin Varma VegesnaN
    @Eric-Katzfey ──────────────────────────────────────────────────────────────────────────────── system-image: 1.8.02-M0054-14.1a-perf kernel: #1 SMP PREEMPT Mon Nov 11 22:47:44 UTC 2024 4.19.125 ──────────────────────────────────────────────────────────────────────────────── hw platform: M0054 mach.var: 1.0.1 SKU: MRB-D0014-4-V1-C27-T9-M22-X0 ──────────────────────────────────────────────────────────────────────────────── voxl-suite: 1.4.5 ──────────────────────────────────────────────────────────────────────────────── Packages: I am getting this issue as well, where I constantly get WARNING, apriltag roll/pitch out of bounds issue with the front or down tracking camera.
  • OpenVINS issue

    Unsolved vio
    8
    0 Votes
    8 Posts
    4k Views
    Nitin Varma VegesnaN
    @zauberflote1 I am no longer having this issue. I have been flying with OpenVins for some time, and I was sometimes seeing drift in the vio estimate, and I was wondering what are the best configs to use. for vio_cams.conf and voxl-open-vins-server.conf?
  • No ov_overlay in portal

    Unsolved vio
    7
    0 Votes
    7 Posts
    4k Views
    D
    @zauberflote1 alright, thanks for your help!
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    11 Views
    No one has replied
  • Open-VINS Mask File Location

    Unsolved vio
    3
    1 Votes
    3 Posts
    2k Views
    J
    @zauberflote1 ok, thank you! I will try to implement the mask as in VoxlCam. Regards, Jacob