ModalAI Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login
    1. Home
    2. Rowan Dempster
    • Profile
    • Following 0
    • Followers 0
    • Topics 32
    • Posts 105
    • Best 0
    • Controversial 0
    • Groups 0

    Rowan Dempster

    @Rowan Dempster

    0
    Reputation
    16
    Profile views
    105
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Rowan Dempster Unfollow Follow

    Latest posts made by Rowan Dempster

    • RE: Running QVIO on a hires camera

      Hi @Alex-Kushleyev,

      Resurrecting this old thread, we now have the IMX412 on a drone and we are now ready to give to VIO on the IMX412 our full attention and lots of testing effort. Where I'm at now is I have a prototype working and QVIO does run on the IMX412 camera and outputs estimates that seem reasonable, but I'm 100% sure it's not configured as good as it could be cause I made so many assumptions that I would like your input on:

      Which camera data / pipe to use
      Ideally, we would like the IMX412 VIO to perform close to (or of course better than!) a ar0144 tracking camera, in terms of the quality of the image for feature tracking, low CPU usage, low latency frames, etc etc etc. In this spirit, I've been looking into how to get the MISP normalized pipes coming from the IMX412 and also how to get the camera server producing ION data to get the same CPU usage gains we saw in https://forum.modalai.com/topic/4893/minimizing-voxl-camera-server-cpu-usage-in-sdk1-6.
      I saw that in the pipe setup, the normalized code for IMX412 was commented out
      4f2e7cff-3212-46c7-9929-988f0ce413e1-image.png
      After commenting it back in I was able to see in the portal a decent looking normalized stream. I also see the ION pipe pop up for that norm stream but I haven't tried that ION pipe on the QVIO server yet (I'm confident it would work though, just waiting for https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe/-/commit/d18521776e3e88f396d85aa657769c47f29e9c9f to get tagged!).
      Do you see any issue with using the MISP norm pipe for IMX412 VIO, or is that actually what you would recommend?

      Which resolution to use
      I know you talked about some resolution advice above, but I'm a little bit confused on the specifics on where to put those numbers. You had suggested 1996x1520 for a 5.5ms readout time. Do these numbers go into the Preview Width config fields? Here is the entire diff of the config settings I have been using for my testing:
      b75275d6-9c35-48ac-a95c-a59b439e7f54-image.png
      The other values I have a question about in that diff is The MISP width / height fields, I chose 998x760 which is half of the Preview Width resolution you suggested. I did this because I wasn't sure of any compute bottle necks that would pop up if I fed a 1996x1520 image into QVIO. Do you think 998x760 is good or maybe I should pick a like 0.75 downsample so something like 1497x1140 for the MISP width/height.

      Camera Driver files to use and how to version control and deploy those
      Could you confirm that the binary files in https://storage.googleapis.com/modalai_public/temp/imx412_test_bins/20250919/imx412_fpv_eis_20250919_drivers.zip are still the latest and the recommended binaries to use? Could you also advise on how to version control these files and deploy them to the voxl2 when the camera server .deb is deployed? I want to keep all files related to bringing up the camera in the voxl-camera-server debian if possible. I see some binaries files being stored in this path:
      03191a03-455e-4e18-bd50-dd19b9d5c028-image.png

      So if I understand the process correctly, those files will end up in /usr/share/modalai/chi-cdk/imx412-fps-misp. Is that where the voxl-configure-cameras C looks for them? Also, do I have to do anything with the com.qti.sensor.imx412_fpv.so file in the zip link that you sent, or do I just ignore that file?

      My end desired behavior is that when I install the voxl camera server .deb, I don't have to worry about also copying binary files over to the voxl, or moving any files around on the voxl, or having to remember to run voxl-configure-cameras C. So maybe the path forward there is to have all files deployed into the right places by the .deb install and then in the postinst script auto run voxl-configure-cameras C? What do you think?

      Aspect ratio concerns and their affect on field of view and camera calibration
      Is the aspect ratio you suggested (1996x1520) the actual aspect ratio of the sensor? Or does the sensor support multiple aspect ratios, or is there something more complex going on I don't understand here? I just want to make sure that we're using as much FoV as the sensor supports. That should be the goal for VIO feature detection and for streaming right, maximize field of view?

      Also, how does changing the aspect ratio / resolution affect the camera calibration? We're using kalibr which asks for a focal length bootstrap, which we've been giving it 470 for the ar0144 camera, do you know of a way that we can figure out an accurate focal length bootstrap for the images that we end up using for the IMX412?

      How to not lose other IMX412 features like 4k recording and EIS streaming etc
      This is kinda my biggest concern about the feasibility of this whole thing: Will we still be able to get the other awesome IMX412 features like high quality streaming to the GCS with EIS, as well as high quality 4K recordings even in difficult low light environments, AND at the same time optimize the IMX412 for VIO which demands stuff like fast readout for less skew?

      Any advice you can give here on mapping out the tradeoffs? Are there any non-starters like not being able to get 4K recording if we opt to use the MISP norm pipe for VIO? Or are you confident that we can get the best of all 3 worlds 🙂

      Exposure time concerns
      I agree with your initial point that needing low exposure for low motion blur is important. As I mentioned in the intro to this message, I have a prototype working and I am now at a place where I can indeed tune the gain vs exposure / auto exposure params. Could you help me with that? I assume that this tradeoff also applies to the ar0144 camera, any lessons I can take from there?

      QVIO readoutTime param
      Great find and thanks for pointing that out!! To confirm the specific numbers here, if I use the 1996x1520 preview width/height which has a documented read out time of 5.5ms (I should confirm this using the -d mode), then I should put 0.0055 for that parameter?

      As always, thank you for your help in camera related matters, we would be no where close to where we are now with robotic perception without your guidance!

      posted in GPS-denied Navigation (VIO)
      Rowan DempsterR
      Rowan Dempster
    • RE: Minimizing voxl-camera-server CPU usage in SDK1.6

      Hi @Alex-Kushleyev ,

      Has there been a tag created in https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe that contains these changes? Please let me know when that happens, would would like to get these CPU gains moved into production ASAP!

      All the best,
      Rowan

      posted in Video and Image Sensors
      Rowan DempsterR
      Rowan Dempster
    • RE: Minimizing voxl-camera-server CPU usage in SDK1.6

      Hi @Alex-Kushleyev,

      I confirmed that the https://gitlab.com/voxl-public/voxl-sdk/core-libs/libmodal-pipe/-/tree/ion-32bit-test branch does indeed allow voxl-qvio-server to use ION pipes (using DEN_ION_BUF and DEN_32BIT_ION_BUF). I have not detected any other breakages of the Cleo SDK or performance degradations, but that's something we will monitor as we test more.

      In CPU perf mode, average core util dropped from 31% to 22%, this is a huge help, thank you very much for your work.

      We will be eagerly awaiting the release of a libmodal-pipe gitlab tag with these changes in it!

      Cheers,
      Rowan

      posted in Video and Image Sensors
      Rowan DempsterR
      Rowan Dempster
    • RE: Minimizing voxl-camera-server CPU usage in SDK1.6

      Hi @Alex-Kushleyev,

      I did a quick test. Can you please test to make sure the updated libmodal pipe works with your 32 bit application and also does not break the main 64-bit functionality? Then i think we can merge it to dev.

      Yes absolutely, I can get that done today.

      Thanks for your patience!

      Thank you for taking this on!

      Rowan

      posted in Video and Image Sensors
      Rowan DempsterR
      Rowan Dempster
    • RE: Minimizing voxl-camera-server CPU usage in SDK1.6

      @Alex-Kushleyev Hi Alex, Happy New Years 🙂

      Is there an ETA on when the 32-bit ION buffer support in libmodal-pipe will be main-lined? For our internal time planning here at Cleo.

      Thank you,
      Rowan

      posted in Video and Image Sensors
      Rowan DempsterR
      Rowan Dempster
    • RE: Toolchain for m0054-data-fs.ext4

      @Moderator Hi Modal,

      Does this mean you can create a custom data file partition that you can flash using fastboot?

      Yes that is correct.

      We have not explored this before but it has been asked a few times. This could be very helpful for other developers.

      I'm certainly hopeful that it will be helpful here at Cleo Robotics! So far with my prototyping it works as expected and cuts flashing time of some large docker images we have here at Cleo down by a noticeable fraction (no file overhead via fastboot like with ADB).

      I think the snippet I posted covers the baseline functionality of getting a custom "payload" into the data partition. However if there is more I can elaborate on in terms of the toolchain / what's in the payload, and if that elaboration will be helpful to other VOXL2 developers, I would be happy to elaborate 🙂 Just let me know!

      Other similar discussion points I tackled recently that I'm happy to talk about lessons of:

      • Flashing the system image and VOXL/CLEO SDK through a Windows Machine (journeys in USB device drivers)
      • Building Flutter applications for uniform flashing process across all operating systems
      • Building release bundles (i.e. a collection of partition binaries) in CI
      posted in VOXL SDK
      Rowan DempsterR
      Rowan Dempster
    • RE: Toolchain for m0054-data-fs.ext4

      For anyone reading this in the future this works:

      docker run --rm --privileged \
          -v "$SYSTEM_IMAGE_DIR":/system-image:ro \
          -v "$CLEO_IMAGE_DIR":/cleo-image \
          -v "$CLEO_PROVISION_DIR":/cleo-provision:ro \
          ubuntu:18.04 bash -c "
          set -e
          
          # Install tools
          apt-get update -qq
          apt-get install -y -qq android-tools-fsutils e2fsprogs >/dev/null
          
          # Extract stock data partition contents
          echo 'Extracting stock m0054-data-fs.ext4...'
          mkdir -p /tmp/data_root
          
          # Convert sparse to raw and mount
          simg2img /system-image/m0054-data-fs.ext4 /tmp/stock_raw.ext4
          mkdir -p /mnt/stock
          mount -o loop,ro /tmp/stock_raw.ext4 /mnt/stock
          
          # Copy all stock files
          cp -a /mnt/stock/* /tmp/data_root/
          umount /mnt/stock
          rm /tmp/stock_raw.ext4
          
          echo 'Stock contents copied.'
          
          # Add cleo-provision directory
          cp -a /cleo-provision /tmp/data_root/cleo-provision
          
          echo 'Added cleo-provision directory'
          
          # Create the ext4 image using same parameters as BitBake recipe:
          #   -s            : sparse output
          #   -l SIZE       : filesystem size in bytes
          #   -a /data      : android mount point
          #   -b 4096       : block size
          make_ext4fs -s -l $USERDATA_SIZE_EXT4 -a /data -b 4096 /cleo-image/m0054-data-fs.ext4 /tmp/data_root
          
          echo ''
          echo 'Created sparse ext4 image successfully'
      "
      

      You'll need to be on an arm64 architecture.

      posted in VOXL SDK
      Rowan DempsterR
      Rowan Dempster
    • RE: Toolchain for m0054-data-fs.ext4

      I found https://gitlab.com/voxl-public/system-image-build/meta-voxl2/-/blob/qrb5165-ubun1.0-14.1a/recipes-products/image/qti-ubuntu-robotics-image.bbappend#L148, which is in bitbake language (not familiar)?

      Is

      do_makeuserdata() {
          make_ext4fs -s -l ${USERDATA_SIZE_EXT4} ${IMAGE_EXT4_SELINUX_OPTIONS} \
              -a /data -b 4096 ${DEPLOY_DIR_IMAGE}/${OVERLAYIMAGE_TARGET} ${IMAGE_ROOTFS}/data
      }
      

      something I could do just on normal ubuntu in CI? I'm thinking to build a cleo-specific userdata in CI with all of our custom software.

      What are ${IMAGE_EXT4_SELINUX_OPTIONS}, is there some secret sauce there?

      posted in VOXL SDK
      Rowan DempsterR
      Rowan Dempster
    • Toolchain for m0054-data-fs.ext4

      Hi Modal,

      I'm looking into adding some data in the m0054-data-fs.ext file system. I'm having some trouble getting the voxl2 to work correctly when I try to add the data and then create a new Android sparse image that I flash instead of m0054-data-fs.ext. Would it be possible to provide me with the tools used to create that m0054-data-fs.ext file system at ModalAI so that I can use the exact same tools to create the sparse android image after adding my files to it?

      Thank you,
      Rowan

      posted in VOXL SDK
      Rowan DempsterR
      Rowan Dempster
    • RE: Minimizing voxl-camera-server CPU usage in SDK1.6

      @Alex-Kushleyev Sounds good! I did not make any changes since the revisions you shared 5 days ago.

      posted in Video and Image Sensors
      Rowan DempsterR
      Rowan Dempster