05/24/2019 at 00:37 •
As a presenter it was great to see the wealth of information provided by Maker Faire Bay Area organizers. It is clearly the compilation of many years of experience and lessons learned. One item caught my eye: anyone using wireless communication should have a contingency plan in case wireless fails.
I've definitely encountered this before with SGVHAK Rover and Sawppy on the standard 2.4GHz WiFi band. So far I've been able to avoid most problems by adding a dual-band router and moving up to the 5 GHz band, but in a large event like the flagship Maker Faire, even that might not be enough.
So as part of my Maker Faire prep work, I designed and built a wired joystick controller with an Arduino as the microprocessor. When active, it replaces the Raspberry Pi and wireless router on board Sawppy. This also serves as a lower-cost alternative to rover builders or those who like the thought of walking their rovers on a leash.
- Arduino sketch is in the 'arduino_sawppy' directory of Sawppy's Github repository.
- 3D-printed enclosure Onshape CAD document.
- Build log entries:
- Getting started with Arduino crash course.
- Examining Arduino sample code by LewanSoul for LX-16A serial bus servos.
- Putting Arduino joystick sample code together with LewanSoul sample code for joystick-based servo control.
- Implementing the Ackermann steering calculation for rover corner wheel steering.
- Switching to a compact Arduino Nano board to fit in handle.
- Designing the 3D-printed enclosure.
- Building Sawppy's onboard input jack.
- Up and running and ready for Maker Faire!
05/10/2019 at 19:43 •
I know I've said I wanted to keep my Hackaday.io project page focused on rover design and evolution and less on rover adventures in the wild... but I'm going to break my own rule for this one. I'm super excited to have been accepted as a maker presenting their project at Maker Faire Bay Area 2019. It's not just A maker faire... it is THE maker faire. Most of my travel logistics have been nailed down, it is happening!
05/07/2019 at 23:03 •
I started my Sawppy project in March 2018. By May 2018 I had my first rolling chassis but it was fragile. Every time my rover broke, I learn a little more about mechanical design, and Sawppy improved over the following months. I also started writing assembly instructions and supporting documentation to help any other interested people build their own Sawppy, not knowing if anyone would take me up on my offer. It was extremely gratifying to see other people have indeed accepted my invitation!
This post recognizes those who have embarked on their own Sawppy adventures, roughly in the order of when I learned about their efforts. Sometimes I learn about their ambitions before they got started, sometimes I learn about it only after their rover had been completed. Given this, it is likely there are other Sawppy builders out there I don't know about at all! But that's fine, I just love the fact there are more Sawppy rovers running around.
I used to list a few Sawppy builders in my main project description page, but the list has grown too long to fit in that space. I'm going to track Sawppy builds on this project log entry, editing it as I go to add more rovers as they come online. I don't know if there'll ever be a day when even this is too unwieldy to track all the Sawppy builds out there... but as far as problems go, that's one I would be very happy to have.
To everyone who decided my project was worth your own time and money and effort to build: Thank you.
Daniel was one of the first to jump in and start exploring the information I had released. Daniel also helped spread the word of Sawppy via comments on various web page comments about JPL's Open Source Rover, and for that I'm grateful.
I designed Sawppy to use Misumi aluminum extrusions because I saw Misumi had distributors worldwide. Unfortunately my hope of easy availability turned out to be wrong in Canada. But makers are problem solvers! Daniel redesigned his Sawppy to use wooden beams instead.
Quinn is a person who thinks big. Quinn has been working to scale up Sawppy's design, making modifications as needed, for a much larger rover. This picture shows one of his big wheels next to a standard sized Sawppy wheel. This rover will be a mobile testbed for his project developing deep ice drilling techniques.
Bob leads a FIRST Robotics team and they have their own version of Sawppy's CAD file filled with their improvements for a better fit with what they want their rover to do. They can't use their rover in an actual FIRST competition because I didn't design Sawppy around competition rules. However, the team members are thinking about using Sawppy's construction technique for their future projects. All of this makes me extremely happy.
Sawppy has a sibling in the UK! During Sawppy's evolution I had to adjust various pieces and occasionally aluminum extrusion lengths. This resulted in some recuts and some unnecessary (in hindsight) waste. When I documented their final dimensions, I thought it was possible someone could cut all the required pieces out of two extrusion beams at the 2 meter standard length sold by Misumi. Thanks to the build log for Chris' Sawppy, I saw this hypothesis has been proven.
Marco has lots of robot building experience and wanted to add a Sawppy to his robot army. I received many helpful pieces of feedback about my posted instructions for Sawppy, pointing out where I could add clarifications and substitutions. Marco has also shared his Sawppy enhancements on Github in a way I could merge into my master repository under "modifications" folder. And like his other robots, Marco's Sawppy is printed in a bright yellow UV-reactive plastic that leads to some great videos of roving in the dark.
For control software, Marco has forked my SGVHAK Rover code and modified it to accept commands from his remote control system.
CJ, or "Curiosity, Jr." is Laura's Sawppy variant and the future direction will include efforts on adding detail to make the rover a more faithful model of Curiosity rover. (Hence the name!) I was more focused in mechanical fidelity and didn't spend much time on appearance fidelity. It's great to see people like Laura pick up my slack.
If someone had asked me if Sawppy should be their first big 3D printing project, I would be a little scared to say yes. But with some persistence and resourcefulness, a Sawppy came together regardless in the hands of WJD. And now that Sawppy is up and running, WJD may tackle more electromechanical projects. It makes me happy to know Sawppy can inspire others to turn their ideas into reality.
I didn't know Philip had been building a Sawppy until it was all done: the first notification I received was a pull request on Github with Philip's suggested changes to improve documentation. These changes were obviously backed by experience of building a Sawppy, and I gratefully accepted the suggestions.
Phillip's Sawppy was printed in plastic of bright red and black, making it one of the more visually distinctive rovers on this page. My favorite image from the project image gallery was one where gigantic googly eyes were mounted to the front. I loved it so much I put googly eyes on my own Sawppy.
Sawppy has a sibling in Germany! I loved seeing Sawppy running around on surfaces like grass and sand. According to the description attached to this YouTube video, the GoPro camera visible here has already been replaced with a Raspberry Pi camera in support of object detection via TensorFlow. I always intended for Sawppy to be a platform for experiments in autonomous robotics, and it's great to see Martin getting started on that front.
I hope there are more Sawppy rovers to come!
04/09/2019 at 21:56 •
One of the problems I didn’t foresee in designing Sawppy was that some children might see a fun challenge in doing running jumps over my rover. I first saw this unwelcome behavior when I brought Sawppy to Long Beach, and I knew it’d only be a matter of time before a child would misjudge their jump and smash Sawppy into a pile of broken rover pieces.
Clearly I need to find some way to discourage this behavior, but I also can’t do anything that physically harms misbehaving children. This eliminates straightforward solutions such as a Samurai blade pointing straight up. I would also like this countermeasure to be stealthy and not call attention to its anti-jump purpose otherwise some would see it as a challenge.
The answer came while preparing for this year’s Southern California Linux Expo (SCaLE 17x). I was scheduled to host the Hackaday x Tindie Birds of a Feather meetup, and I was also slated to co-present a talk with Lan Dang. For publicity purposes I decided Sawppy can be a rolling billboard, as SCaLE is exactly the right audience of people who would pay attention to a 3D-printed rover running about. I pulled out a yardstick I had on hand and started planning how to use it as a flag pole, and I immediately knew I had my anti-jumpover countermeasure as well. Two birds, one stone.
As previously mentioned, I didn’t want this flag pole to be too rigidly attached. If someone bumps my sign, or if someone decides to try jumping over my rover anyway, the flag pole must break away cleanly without damaging the person or the rover. For SCaLE I used a zip tie that was arranged so there is tension holding the yardstick flag pole in place, but pops free when stressed.
This mostly worked, but as it was built on a balance of opposing forces, it was finicky to reinstall. At Caltech Science for March, a curious toddler yanked off the flag pole and the toddler’s supervising elderly adult tried to reinstall the pole. But grandpa had no idea what he was doing, blindly stabbing inside Sawppy’s equipment bay with the yardstick applying more force as he grew more agitated. After two attempts at saying “Don’t worry, I’ll put it back myself” while I watched in horror at Sawppy electronics getting pummeled, I forcibly grabbed the yardstick from his hands in order to save Sawppy from being stabbed to death.
Clearly, a better solution must be found.
In preparation for Sawppy’s appearance at Yuri’s Night, I decided to try a magnetic mounting system. Originally rejected because I thought it wouldn’t be strong enough, I thought it was worth a second look. I had a stack of these powerful little magnets and a single pair wasn’t able to hold the pole. But four pairs of them might be strong enough for the task.
For this test, four magnets were held on to chassis beam via packing tape. Two on upper beam, two lower.
Matching sets were held to yard stick flag pole with more tape.
With updated camera mast and flag pole mount, Sawppy was ready for its next public appearance at Yuri’s Night Los Angeles! That event got crowded at times and there were a few accidental bumps that triggered a clean separation followed by quick re-installation. And while this adult-focused event had few children about, there were plenty of drunken misbehaving adults. The flagpole did not discourage all misguided behavior, but it has worked well enough to become a permanent fixture of my future Sawppy public appearances.
(Cross-posted to NewScrewdriver.com)
04/08/2019 at 19:12 •
When Sawppy first started running around, I wanted something to sit atop a camera mast where the real rover has a camera and sensor array. It is the anthropomorphic head of the rover and it looks slightly wrong without one. (Like a chicken running around without its head.) The first iteration of camera mast sensor array enlisted a standard USB webcam sitting alongside a Google AIY Vision kit. It was mostly for appearance because there wasn’t much software behind it.
The webcam was fun for entertaining children and occasional longer distance driving, but not immediately useful for autonomy. The AIY Vision box is optimized for classification tasks. I thought there might exist code useful for robotic visual localization but if it’s out there I have yet to find it.
The most promising tool at hand for rover localization is my Kinect sensor bar running RTAB-Map or some similar software. So Sawppy will inch towards autonomy by getting a camera mast upgrade to my Kinect V1 sensor bar and see if we can integrate that into rover systems in a useful way.
I went looking for a good way to mount a Kinect bar to Sawppy. I disassembled its base looking for a good mounting mechanism, but there weren’t convenient existing fasteners for me to use and there weren’t good places for me to drill and tap new ones. It was surprisingly crowded in there! I knew there was a motor for up/down tilt but I underestimated size of the motor gearbox inside.
I then reassembled the base and went with plan B: a simple flat platform for attaching my Kinect sensor bar with double-sided foam tape.
Kinect sits slightly offset camera mast center for two reasons.
- The Kinect sensor bar is very wide and if mounted centrally it overhangs to the right. I worry about it hitting obstacles so I wanted to bring it closer to the middle.
- By offsetting sideways, I could expose the top of the pipe used as camera mast and run Kinect’s wire down the middle for cleaner wire management.
At the moment this Kinect is no more functional for autonomy than the previous configuration… in fact, for its first public appearance at Yuri’s Night 2019 it is not even electrically connected to anything. It’s just a matter of taking one step at a time.
(Cross-posted to NewScrewdriver.com)
04/08/2019 at 00:35 •
I'm happy to see interest in Sawppy continue to grow and my little rover now has something of a publicity appearance schedule. Summaries of the past few appearances have been cross-posted on my personal blog as well as this project page, but going forward I think I should keep this project page focused on technical evolution and skip the non-technical stuff.
As the first implementation of this new policy, here's the summary for Sawppy's attendance at Yuri's Night Los Angeles 2019. Anyone who's interested can follow the link to read more, others can skip this log entry without having to do a lot of scrolling.
03/31/2019 at 19:48 •
I had always intended for Sawppy to be an adventure in building autonomous robots, but the Sawppy hardware I built and declared version 1.0 needed software of some sort in order to get up and running. Since I had code for SGVHAK Rover handy, I adapted it to control Sawppy as well. Both rover models had six wheel drive and four wheel steering resulting in large overlaps of functionality. I only had to write adapter code for it to communicate with Sawppy’s LewanSoul serial bus servos instead of SGVHAK Rover’s RoboClaw motor controllers.
At the time I was overly optimistic about how quickly I could get new software up and running on Sawppy. I didn’t climb the learning curve for ROS nearly as fast as I had hoped, requiring detours along the way to build learning robots like Phoebe. In the meantime Sawppy continued running on this “interim” software that threatens to become the permanent software with each passing day.
A symptom of optimism was my decision to not write very much documentation helping other Sawppy builders adapt SGVHAK rover software to run on their own rover. I thought I would have new software soon so why bother? At first this was not a problem – first three Sawppy builds I’m aware of were built by people who made modifications and used their own methods of rover control. (Two are writing their own software, the third was modified for standard remote control.)
But now I’m starting to receive queries from people who want to run SGVHAK rover code on their Sawppy rovers as well. While a talented few have been able to find their own way just by examining my Github repositories, it’s not very friendly to tell people “Go look at the code and figure it out.” I need to put in the time to write instructions for putting SGVHAK Rover software on Sawppy.
I’m happy to announce that this work is now complete and posted up on Sawppy’s build documentation repository. It walks through assigning unique IDs to LewanSoul serial bus servos, to which configuration files to edit, and which configuration files to just completely overwrite. I hope this will help more Sawppy builders get their rover up and running!
(Cross-posted to NewScrewdriver.com)
03/25/2019 at 23:17 •
It's been a few months since I declared Sawppy version 1.0 complete and documented. A project like this is never done and there's always more to do, but I had reached a good milestone in mechanical design supported by "good enough" electronics driven by software borrowed from another rover project. I released it open source to the world, curious what would happen next.
I was very happy to see people go beyond just talking about building their own Sawppy, and have gone ahead and actually done so. In the course of their builds, people have reached out to me with questions about the information I've published, which I welcome. It's always good to have extra sets of eyes to look over what I've written. Sawppy documentation is my best effort, but it's very easy for me to overlook gaps in information because it's all in my head and my brain doesn't necessarily notice when something crucial is missing. Having other people try it out and letting me know of their experience is the best real world test, and I add clarifications in response.
And this past week the Sawppy project documentation crossed another threshold: its first external contribution pull request! I really appreciate the work of [TechMav75]. Not just point out gaps in my documentation, but actually rolling up sleeves and helping to patch those gaps based on their experience building a Sawppy. Thank you!
As for software, SGVHAK Rover's adapted software was always intended as a placeholder, not the long term software solution for Sawppy. Indeed the first three Sawppy builds I'm aware of didn't use that software, either. Two builders have written their own rover software, and a third has wired up their rover for standard remote control. Nevertheless, some Sawppy builders want to use what works today so I should put in the time to write more detailed instructions on how to adapt that code to drive Sawppy. In the immediate present, user feedback has alerted me to an embarrassing bug that I've since fixed. It's not my first public embarrassment, it won't be the last.
Thank you everyone who has shown interest in my project. Constructive feedback and questions are always welcome, use whichever venue you are most comfortable with:
- I encourage asking questions in public so my public answer will be useful to others as well. From the top of this project page, click on "Discussion", and add your comment.
- If you rather not comment in public, you can send me a private message. Click on my name to reach my Hackaday.io profile, and click "Send a private message".
- File an issue on Sawppy's Github repository.
- And finally, my favorite: not just file an issue, but also send me your proposed solution via a pull request! Let's work together to make Sawppy better.
(Cross-posted to NewScrewdriver.com)
03/23/2019 at 20:25 •
Every time I encounter problems at a public Sawppy appearance, it is a lesson. It might be a lesson in how I might be able to improve Sawppy’s design, or it might be a lesson in how to better prepare a kit for field repairs a.k.a. Sawppy First Aid Kit. When a fuse burnt out at Caltech Science for March 2019, that was easy to address: add replacement fuses to the kit.
The broken servo coupler encountered at SCaLE 17x was a little tougher. It wasn’t enough to keep an extra 3D-printed coupler handy, because a little block of plastic isn’t very useful by itself. It requires a heat set insert to accommodate a set screw holding against an 8mm shaft, and it requires four more screws to fasten against the servo horn. Fiddling with a lot of tiny screws would not be very practical when trying to make field repairs away from my workbench. This is especially true when I have a literal ‘field’ to deal with: on grassy grounds where a lost screw is very difficult to recover.
The answer to minimizing chance of lost screw is to prepare a replacement assembly consisting of:
- 3D-printed coupler
- Heat-set insert already installed.
- Set screw already installed inside the heat-set insert.
- Servo horn that comes with a serial bus servo.
- 4 small screws already fastening the coupler to the servo horn.
With such an assembly ready to go, the only fastener I risk losing during replacement is the screw holding the servo horn to the servo output spline.
The first downside of this approach is that I only have as many servo horns as serial bus servos. Keeping a replacement unit ready in Sawppy’s field repair kit means I have an extra serial bus servo with no horn to use it. Perhaps I could purchase extra servo horns, or maybe this is just a hint I should also have an extra replacement servo in the bag.
The second downside of this approach is that, in case of steering couplers, a replacement would not be an identical. Steering trim would be slightly different with a replacement coupler due to natural variation from unit to unit. When I perform this replacement, I would also have to adjust Sawppy’s steering trim for proper operation. But in an emergency? It’ll probably be close enough.
(Cross-posted to NewScrewdriver.com)
03/17/2019 at 05:19 •
Today Sawppy joined the fun at Science for March 2019, organized by the Caltech Postdoc Association. Since Sawppy didn’t exist yet during 2018’s event, this was Sawppy’s first visit. When Sawppy arrived at South Campus Gate, a quick check of campus directory oriented us to Beckman Mall where the event will be held.
Part of the journey included crossing picturesque Millikan Pond.
As with last year’s event, the rover started the day sitting on a table for display. Of course, last year we had only a single rover. This year we have three, two of which were in running condition and could be driven for demonstration today.
Sawppy attracted a crowd as it usually does, and were driven around by enthusiastic children. Some of them weren’t as gentle with the control as they should be, and about halfway through the day, operator roughness by one of the kids burned out the fuse. I kept telling myself I should have spare fuses in Sawppy’s first aid kit that I keep in my backpack, but I never did put one in. I had to hack a workaround today but by the end of the night I definitely remembered to put extra fuses in the bag.
Group rover outings are always fun. Today’s special activity is a group climb on a grassy slope at the north end of Beckmann Hall. SGVHAK rover gave Sawppy a head start, but with faster and more power motors, combined with better traction tires, it was no contest. SGVHAK easily outclimbed Sawppy, but the important part was that we pleased the crowd with this little demonstration of rover climbing capabilities.
(Cross-posted to NewScrewdriver.com)