WebODM Support for incremental image feed

Hey there People,

I stumbled upon open drone map a few days ago. Looks like a great project! I am currently working on a live mapping framework and I wonder if WebODM might be used as visualizer (currently using ROS/RVIZ). Is the design flexible enough to handle incremental images / updates in a dynamic way, or is everything designed to be loaded at the beginning and then that’s it? Any thoughts on this are very welcomed!

Best regards,
Alex

1 Like

Hey @Lachsn, I’ve actually started exploring the same idea a few weeks ago.

Currently the leaflet map within WebODM only handles TMS tiles (so you can only display final results), but it could be feasible to add a Live Map (using websockets perhaps) that pulls in incremental results. This would require adding a new component (maybe as a plugin).

What are you using for live mapping?

1 Like

@pierotofy thanks for your reply! The setting is search and rescue, however it can be applied to surveying in general. I utilize visual slam for pose estimation and reconstruct 2.5D elevation maps from some densification approaches in real-time/inflight. The outputs are the same as in standard photogrammetry, except that accuracy and outlier is way worse :smiley:
It is the topic of my master thesis to develop the backend, however in the long term of the project i don‘t see RVIZ viable for consumer applications…which lead me here :slight_smile:

Edit: ah, maybe one more word about the output: as I said it is the same as in photogrammetry. Therefore I produce 2D ortho photos, elevation maps but also 3D surface Data ( e.g. pcl pointclouds, meshes, …).

Edit2: Impression of how it looks like currently, hope you can stream it:
https://drive.google.com/open?id=1Q_Wk_q6vVZZvYi5RAO_GeHvZh-X1frS4

Wow, very cool! :clap:

Are you currently publishing your work under an open license somewhere?

I’ve started experimenting by using the GPS lat/lon/elev data + gimbal and aircraft angles to extract the camera poses and then feed them into Map2DFusion (Brighton Dataset Map2DFusion - YouTube), but GPS tends to be fairly off, so often times the results tend to obliterate details in the final image when the image plane is miscalculated due to inaccurate GPS. Obliterating details is really, really bad and potentially life-threatening for search and rescue, so improvements are needed.

Compare to:

This repository has the exif extraction code I wrote (work in progress) GitHub - pierotofy/node-map2dfusion

I think current state of the art methods use using a hybrid approach (GPS + SLAM) to estimate the poses. A good overview (half in Chinese) is presented here: http://www.adv-ci.com/download/201705_Visual_SLAM_and_RTMapper.pdf

Totally agree on RVIZ being not viable, while ROS is great for robotics development, it’s not aimed at end-users.

Haha nice, jeah map2dfusion is the paper that got me rolling orb slam for that. Interesting you found it too, it was only a miracle I stumbled upon this while searching for datasets.
My code is currently under development, but will be released as Open Source Project in May I guess. Will be a first, very raw version but hopefully usable. ROS dependencies are limited to transportation only, all hard work is separated in simple worker threads. So it might be viable for cross platform (however not planned or checked at the moment).
Exiv2 support is already implemented to get DJI data in. We also experimented with GPS/baro/heading only for mapping. Same results as yours (probably even worse :D). But quite effective if you consider that it works everywhere and with every kind of image data (e.g. thermal, …). So your results are not too bad! In my opinion the enhancement with visual SLAM is the way to go. Bad misalignments however will occure there too sometimes. The 3D approach looks even worse sometimes, because you have this whole experimental reconstruction pipeline to handle.
A lot of research is still open to get the perfectly aligned, distortion free ortho photos in real-time :smiley:

Edit: you might also enjoy this one: IMAV 2017 DEBRIEF – AKAMAV
I used a gps/heading only approach for a competition in France last year, it is not really explained there but results can be observed. However we didn’t use any blending, which is why they are awful at best :smiley:

1 Like

I agree, SLAM is the way to go.

Back to the original question, eventually the goal would be to provide a web interface to upload a video (or connect a live stream) and display the results in real time.

Starting from version 0.5.0 WebODM has a plugin system (which we’re still building and defining) that allows developers to extend its functionality to include just about anything. We’re adding various server side and client side hooks which allow people to add new functionalities to existing views (for example, the measurement tool is a plugin for the map display view) or to create new views entirely (for example, the posm-gcp interface).

I can imagine an implementation for displaying an incremental image feed would work something as follows:

  • Create a websocket API around the processing code (similar to what we have done to node-OpenDroneMap for exposing the functionality of OpenDroneMap, but targeted for live display). This could be an extension of the node-odm API (NodeODM/index.adoc at master · OpenDroneMap/NodeODM · GitHub) or a different API altogether. Video files / stream in → Image / point cloud feed out (incremental)
  • Images and full point cloud is reconstructed on WebODM by a worker task (we have a pretty solid infrastructure for running background tasks at scale using Celery workers already in place), map tiles are generated and point clouds can be indexed (for point clouds this sounds like a perfect use case for greyhound GitHub - hobuinc/greyhound: Greyhound is a point cloud streaming server. It should be considered deprecated for now. Use Entwine and Entwine Point Tile directly if you just want to serve point cloud web services.). A LIFO queue could be used to process the last image / point cloud update and discard all older updates.
  • For displaying the 2D map, every time a new map tile is fully processed, an interval update can quickly swap the previous map tile layer (TMS) with the new one. This would be fairly quick to implement with Leaflet and plug into the existing map display.
  • For displaying the real time point cloud, we currently use potree (based on THREE.js) and I think there’s a way to read from a Greyhound datasource.

I’m mostly writing down thoughts, so I apologize if a few things don’t make sense. The bottom line is that I think this is very doable, will require quite a bit of work, but you have my full backing and I’d be happy to contribute to bring this feature to life.

The starting point is the websockets API, which is dependent on the processing code. I look forward to test your code and figure out possible ways to expose an API on top of it.

p.s. loved to read the blog post, very detailed! Now I want to go buy that Arkbird VTOL kit (or get one of these park fliers: E-flite X-VERT™ VTOL RTF and BNF Basic - YouTube)

2 Likes

Sounds like a solid roadmap! I am no web developer myself, so I don’t see it doing myself. At least until I finished my Master to dive into the new topic. However I will talk about it with my colleagues. Maybe we find someone who can do it.

Thanks for your comprehensive answers anyway, WebODM seems like a really neat tool, one that the survey community will really enjoy!

PS: Oh jeah, drones are the best :smiley:

1 Like

BTW, this was a really interesting presentation at FOSS4G Boston: http://foss4g.guide/#9M4SVbV9EHnkBbgCPm

1 Like

Hey guys,
it has been a while haha. I finished my thesis two years ago resulting in an open source project called OpenREALM:

I was gone traveling after that for a while and I am now picking up my work again. Future developments are unclear at the moment, but I still like the idea of using existing infrastructure like WebODM to make an easy to use real-time mapping software.
Has anything changes in the meantime about incremental map updates in WebODM? Anything easier than before?

Best regards,
Alex

2 Likes

Hey Alex :hand: welcome back!

WebODM work of late has been focused on dynamic tiling and plant health algorithms, better plugins and native Windows support, which probably don’t help much an incremental type workflow. However, it’s something that would be super-cool to add…

2 Likes

Hi Alex -

What is the status of the OpenREALM project? Is it still active? I attempted to reach you at the tu-braunschweig.de address but got a bounce back.

Thank you,

  • Steve
1 Like