Suggested setup for Ubuntu WebODM computer for processing 3D congested structures

I have just finished setting up my computer with Ubuntu Linux and WebODM, and processed my first basic project with 110 20MP photos successfully. I plan to use the system for generating terrain maps, 3D models and point clouds of facilities with overlaping / congested piping and structures that can be imported into Autocad to make piping or equipment changes. My question is how to take advantage of my hardware which is a i7, with 16Gram, 500G SSD with 64G in use as a Linux Swap drive.

Do i need to specify anything in the setup of the WebODM, Docker or Ubuntu to take advantage of the Swap drive?

What default WebODM settings should be changed to allow the most usable 3D point clouds of the piping, such as applying SMRF filters, or other flags / settings to the processing?

Are there any good documents on ‘best practices’ for using WebODM to generate usable 3D models and point clouds?

What are best options for flight planning and capture of photos?

Thanks in advance for your help.

1 Like
  1. Get more RAM if you can. Max it out. Swap is a poor substitute for physical memory, and is orders of magnitude slower. The Linux Kernel (like most, if not all) does exceptionally poor in high memory pressure situations, which you WILL run into. Get all the RAMs. Seriously.

  2. As for filtering, I’m still learning, but I direct you to OpenDroneMap: The Missing Guide, by @pierotofy, which might help you address your concerns about optimal settings.

  3. As for flight planning, @smathermather-cm has made a series of indispensable guides on their blog:

For flight planning software, I use ArduPilot exclusively, so I make use of MissionPlanner, QGroundControl, and Solex. My preference leans quite heavily on MissionPlanner due to just how much fine control you have compared to the other solutions. More work in, better product out, however.

3 Likes

Thank you for the good info! I just purchased the ebook, which should keep me busy for a while. My initial computer I am using is limited to 16G ram, which is why I am running WebODM under Linux to make the most of it from what I read. Hopefuly the large Swap will help while I am learning more of the capabilities of WebODM, before purchasing a dedicated desktop computer.

My drone is a DJI Mavic 2 Pro, so not sure if it is compatible with the Mavlink protocol of MissionPlanner, which looks to be VERY capable. I am just using DroneDeploy for flight planning right now, and plan to manipulate the grid manually to give the 20degree crosshatch of the links you provided, but not sure how to force the 5degree forward facing camera.

Due to the congested nature of the equipment I plan to eventually scan, I believe that some photos will be required at ground level, which will also require being much closer to the structures than the camera calibration taken from above. Should this calibration plan also include a very low elevation portion to ensure the ground level close-ups are calibrated properly also? should a point of interest plan with 45 degree camera elevation be added? How about adding a lower flight elevation grid with a larger camera angle closer to horizontal?

Thank you for your response.

1 Like

Any time! I’m sure the book will come in quite handy! Swap will help, but as the article I linked to states, you will have periods of time when the memory pressure will make the machine unresponsive. You can alleviate this by using some parameter tweaks like reducing the octree depth, perhaps.

No, unfortunately not ArduPilot/MavLink. However, people in the DJI camp tend to absolutely RAVE about the Litchi flight planning app. Please check it out and see if it might not be more suitable for you.

DroneDeploy does seem to have some nice documentation surrounding their “Enhanced 3D Mode”, which should give you some great pointers on multi-tiered collection:

I’ve also really come to appreciate the Pix4D documentation for flight planning:

With the equipment you mentioned, every time you start a project, take a 2 week trip to your favorite destinations, then come home to check on progress, then continue your vacation for another 8 weeks.

1 Like

Thanks for the useful information. Fortunately, my test project of 150 photos w 20MP resolution of a 3 acre manufacturing location took about 45 minutes, so no vacation was necessary. It is a dedicated computer that had been in my closet for years due to lcd hinge being broken, but it’s CPU Mark performance is better than my current i7-7500. I can let it run overnight or for days uninterrupted if needed, as I know i will need to process MANY more photos to have better results on the 3d structural areas.
Not sure if i am taking advantage of the 4 physical cores of this processor, or if i need to add additional processing instances on each core, as that is part of the question I was hoping to eventually get feedback on how to better maximize performance. For now I am able to process some small projects and start learning the ropes. IF I ever get to the place of requiring regular vacations while processing large projects, my wife might insist that I keep using this computer and not let me get the Ryzen 9 I have my eyes on.

1 Like

@johnmbailey I keep the ubuntu Performance Monitor application open on the desktop while I’m running ODM tasks, and it shows all four of my CPU cores engaged at 100% when working.

This also helps me identify when something is stuck or hung, because in those cases the CPU usage profile changes to one CPU at 100% and the rest idle (also the in-use CPU changes every few seconds).

Edit: I’m in a similar boat, using a spare laptop for processing. It’s handy.

Ok, so i do not need to initialize and manage multiple processing nodes, as Ubuntu utilizes whatever resources needed. Just curious if there are any posts or records of processing times for specific hardware setups and types of projects? I know the image capture is a big variable for the quality of results, but this might be beneficial for users to understand future hardware purchases or beneficial upgrades. General project information with types of CPU, graphics processors, memory, and SSDs (for both swap and storage). Might be a running post, or something collected in the software itself to share. Other apps collect data on usage, if allowed by the user.

I have seen this sort of info floating around here and there (including some on this forum) but I am not aware of a go-to index for that sort of thing. I agree it would be useful, and I would be glad to contribute some data and time to the effort. @pierotofy @smathermather-cm am I missing an existing benchmarks source? If not, would this be appropriate to add to ODM docs? (I’ve been meaning to crack the book on contributing to the docs, anyway.)

Benchmarks have been hard to publish, given the rapidly changing software. I think as we stabilize in the nearish future, this would be something that becomes easier to do.

It is also something that could easily be community initiated and maintained which would make it richer and broader than what Piero and I could do.

1 Like

There was another thread that suggested logging the parameters that were used to run a particular process that could be included with the all.zip file.
It would be good if a log of, for example, hardware info, software version, parameters and time to complete each step could be included with this, so it would standardise recording, help people to benchmark, and also let people see what time cost there is for changes in quality.
Knowing the relationship between processing time and an change in resolution could be very valuable!

2 Likes

Good stuff. I will take a crack at a draft benchmarks doc next month once my Part 107 exam is behind me (end of this month) and we can discuss the best location for that info, ongoing.

3 Likes