Really-really nice article! I'm currently working on a single-process, in-memory, multiplayer game written in Golang. (: Happy and relieved to hear that it worked out for you and I might even borrow some ideas (e.g. I'm less worried about bandwidth, but Protobuf might still make sense). Thank you very much for sharing!
Yeah, it's weird on mobile. I had to drag a very narrow column from the very left side to the right to make the point cloud visible. Thanks for the feedback, I'll add some images!
Here's a very rough estimate. This is how long it'd take for someone who's familiar with the steps. E.g. if you've never tried soldering, it could take much longer.
- Days/weeks of waiting for components to arrive. (:
- ~20 hours of 3d printing
- 1 hour of soldering
- 4 hours of cable assembly (worst part) (:
- 4 hours of assembly
- 4 hours of installing software
This is for scanning larger things (rooms, buildings). For smaller objects, there's another open-source project that you might find useful: openscan.eu
Thanks for the feedback! A single scan takes around 40 minutes. The multi-scan example took me an afternoon to take. (: I've tried Meshlab but then ended up using CloudCompare for combining the point clouds. That was done completely manually.
I could justify that with being so standard that it's available everywhere but TBH that's just what my local electronics store had. (: I've also realized that it's probably overkill for the job and added a note in the documentation.
I think that's a good enough justification :) I was more curious if it came as a result of actually needing it. Btw, great job on the website and examples.
Yes, you're right, this is extremely low resolution, compared to commercial scanners. This is mostly the result of using a point-by-point scanner. One thing I have on my plate is exchanging that for a field-of-view scanner (probably a Livox Mid-40).
One interesting feature of the current setup is the ability to "zoom in" on details. With the microstepping mode of the stepper motors, one can take 2/4/8 times as dense measurements of an area if necessary. The limiting factor here is time. A single scan takes around 40 minutes with the current resolution (1800*300).
Taking a break from my software developer job, I've started to work on my first ever hardware project and with too much free time on my hands it quickly turned into something bigger than I've anticipated.
Working with a friend, we wanted to explore the use of 3D scanners on construction sites but quickly got stuck as no cheap hardware was available to fool around with. How hard can it be to build one I thought? I've already programmed Arduinos to blink LEDs before, this isn't that different... Then a few months into the project I've realized that I've spent way too much time on this to let it go to waste and started turning this into a community project.
At this point I've reached the first milestone of having a working 3D scanner with (hopefully) enough documentation to help others get started with building their own. I'm sharing this with you now to spread the word, get feedback and to invite you to contribute if you feel like it! (:
Great project Daniel! Really cool that you're venturing out of software land. Looks like you would have learned a lot about Arduino from this!
I've recently been playing around with 3D scanning, but using photogrammetry. You could record high res video or take high res photographs of a scene, and then use the program Meshroom or colmap to convert those photos (cut video in to 1fps stills) in to a 3D model. If you want to play around with dense scans that may be worth a try.
Doing it with a LIDAR is nice though because it is the correct scale, something photogrammetry inherently fails at without additional sensors.
I'm a very project oriented learner, and I'm always making things and learning stuff and then pivoting with my projects. I've been doing that for 20 years and it's great because I learn whatever the hell I want and after I get good at it I can get a job in that area. So keep up the hardware projects! This one looks great.
Thank you very much for the kind words and the recommendation! Adding a camera is probably the next step I'll take. Adding color information to the point cloud would be a huge plus. I haven't tried photogrammetry before but I assume it works best if things are captured from multiple angles so my current setup of taking measurements from a single point isn't the best fit. But maybe combining scans from different standpoints...
Yes probably best to experiment with photogrammetry separately and then think about how to integrate it. But it can be difficult to ensure you got 100% coverage so programming a full scan with your gimbal could be useful. You would want to do it from multiple locations. But I’ve found just handheld 4k video from a phone is a great place to start. You can extract frames from video easily with this script I wrote:
In my experience, photogrammetry had issues with transparent and reflective surfaces, so wooden floor or brushes metal kitchen appliances wouldn't work well.
As for the scale, you can always just bring a measurement stick and place it on the floor so that you have an object with known sizes to use to calibrate the scale after the 3d recognition.
The gold standard in my opinion is a laser pattern protector in combination with photogrammetry. That way, you can project a pattern onto objects that would otherwise be too uniform in color.
We've been working on using the new iOS devices and integrating their LiDAR data into our photogrammetry pipeline.
We've also developed an app that gets good scale using only photogrammetry and AR functionality
I've been trying to build something similar for tracking birds / panoramas / photogrammetry while avoiding using non-printed parts as much as possible but haven't been very successful so far. Because of that I'm particularly interested in the printed gears you are using. Maybe you could help me with some of my questions and concerns.
It looks like the whole thing is designed to be stiff, which means that the gears are pretty much at a fixed distance from each other. Doesn't that lead to backlash / play if the gears are a little bit too far apart or vibrations if there is too much pressure pushing them against each other? I've been worried about this and experimented with mounting the stepper motors on flexing parts to keep the pressure consistent and allow for more imprecision in the prints but I never really tried whether I can get away without that, so I'd be interested about how well this is working for you.
I would also like to know if there are any signs of wear after using the thing for a few days and what materials were used. I couldn't find anything on the type of filament on your website (did I overlook something?). I've only ever printed PLA so far and found that the gears would turn more smoothly after being used for a while. I imagine that the effect of wear might be different on the design without flexing parts.
Is it correct that the upper part is resting / sliding on "base-2"? Or is the bearing doing most of the work? Does it wobble at all? That was another one of the problems I had.
Yes, this is completely stiff, no flexible parts. I've experimented with a few gears and different distances between them. I've found that this herringbone gear works very well. I don't experience any visible backlash, but the gearing ratio also helps to suppress that.
I've printed everything from Hobbyking Premium PLA. Just as you've described, the rotation gets smoother after some wear. But even after 30-40 hours of use they still don't seem to become loose at all.
Securing everything on the bearing, there's no visible wobbling. I really recommend using a bearing if possible, it makes things so much easier. (:
At 1200 mm equivalent a picture is only about 1.15° high, so accuracy is important :)
> just measure it and then add a correction in your motor controller.
I think your first idea doesn't really work for tilting because there is little friction and the camera isn't going to be perfectly balanced (the center of gravity also changes with the focal length and even the focus). When gravity pulls the camera towards one direction backlash is less of a problem, but when it's near the tipping point it becomes really shaky and sensitive to disturbances. Past the tipping point it is biased towards the other direction.
Preloading might be an easy fix but at the cost of acceleration.
> Another way to do this is to always move back to endstop zero, and only move forward. THis is very limiting.
At least for panning in panoramas this isn't a bad solution at all. I think both your ideas are good for panning with planned paths.
> The biggest problem I had was all my PLA prints melted in the direct sun!
Was it white PLA? So far I've only had stuff bend out of shape in the car.
I've built a similar device to this (originally for a solar tracker that keeps the sun at high magnification in the middle of the frame, but it turns out to be ideal for panos as well).
It's a DSLR with crop sensor, 300mm lens, stepper+gear for azimuth and stepper+belt for altitude (with gearing to get more torque for both). I used this system with Hugin to assemble 180 degree x 180 degree, 5 degree azimuth and altitude steps (so, about 5X your resolution, I don't have the same zoom as you). Results are great- I can give this straight to hugin, update a PTO file with my known angles, and it assembles without any futher optimization. I do pan with a planned path.
If the belts are real tight, backlash is neglible (seems to be a lot smaller than any gear I could print). If you're having that much backlash on tilt (that it's shaky and sensitive) I think you might need to re-engineer the frame to be more stiff (which will cause the shakes to dissipate faster) or tune your motors (tuning velocity and acceleration). You might also be able to use a spring to keep the gear in place. I tried to get a 3D-printed worm gear working, but never made it compact enough to be practical for the altitude.
I had white PLA, in direct sunlight/90F ambient for hours, and it warped. I only noticed because I was inside watching the incoming images and the altitude staged started to "melt" causing massive positional losses.
I see that you've been using EasyEda. I myself are also doing a hardware project to get some more variation than the daily software grind. After trying out Altium and then being shocked by their recent price increase, I'm now using KiCAD.
But KiCAD doesn't have any autorouter. And the one in Altium failed for my FPGA board. I also tried ELECTRA and it failed, too.
Did you route things by hand? If not, what tool did you use? How did that work for you?
I've started with EasyEDA and stuck with it as it worked okay so unfortunately I can't help with a comparison. I've tried the autorouter and it worked (=didn't fail) for earlier prototypes when the board wasn't so packed, but it couldn't do it (was hanging indefinitely) for the current layout so I did it manually. It wasn't that painful... (:
Congrats! Seems like a neat project. I just skimmed through the article and saw "it tries to be cheap". Maybe you can evaluate whether ultra-cheap steppers can give you acceptable results. They cost around 1/10 compared to the kind you're using. They are a lot slower and have less torque, but probably could give similar results.
Sorry forgot to mention I'm thinking specifically of the 28byj-48 motors. I had an (unfinished) project making a motorized water sprinkler for watering lawns in non circular shapes, and these motors were up to the task. If you can achieve your goal with them, you'll probably shave a nice chunk of the cost (not only on the motors but also on the drivers).
Cheers
Nice project! I did almost the same (Garmin v3 Lidar + steppers), but based on an ESP32 instead of raspi + arduino. The problem I have is the scanning speed vs resolution. The sensor is quite slow, so it takes a really long time to scan anything (hundred of hertz seems fast, but when you do the math you realize it's not fast at all).
Cool project! You could also have used a 2 Axis Brushless Gimbal Stabilizer for most of the mechanics stuff, coupled with either your Garmin Lidar Lite module, or a 360 degrees Lidar module.