PiWars 2015 was awesome. The most amazing thing was the number of different solutions to the same set of requirements. The competitors was friendly, the event was well organised and a good time was had (by us anyway!). Tim and Mike should be very proud of what they’ve done here.
Metabot did us proud – coming second in the Obstacle Course and Skittles challenges and second overall in the “A4 and under” category.
Over the week we got the last hardware pieces finished – the ball flinger is complete and the body covers are cut and attached. And team mate Emily did a cracking job on the decorative touches (see below).
The rest of today is going to be a day of tinkering – software tuning and testing. The trick today will be to not regress anything – changes need to be small and self contained.
We’ll be at the meetup this evening – hope to see some of you there. I’ll leave you with a final glamour shot of the robot for those of you who won’t be there to see it in the flesh.
With the rebuild complete, we can finally move on to fine tuning the code for the events. John had a great weekend here, with working code for the proximity alert.
The robot uses optical sensors to spot the wall – we’re using A to D converters on the Arduino to read the amount of reflected IR light. Away from the wall, virtually no light is reflected. As you get closer, the reflection gets brighter. The trick is to decide at what level you should stop. We have multiple sensors on the front so that if the robot doesn’t approach the wall perfectly straight on, one of the side sensors will still spot the wall and stop us before collision.
The next task in the tuning will be to test many times and against different types of wall – that’ll tell us what sort of repeat-ability we have – which will be key to getting a good result on the day.
So what should you never do in the run up to a competition? Throw away your robot and start again. But that’s (almost) what we’ve done…
So the old robot chassis was always intended to be temporary – made of 3mm cardboard and aluminium brackets. We finally got round to replacing it with a chassis made of 5mm PVC foamboard cut on a CNC router. But it means a tedious task of removing all the parts from the old chassis, bolting them on the new and re-routing all the wires.
We’ll see shortly if we’ve managed to do that without error…
John and I had a session last week trying to get the line following sensors to produce the results we expected. To cut a long story short, we ended up putting blinkers on the sensors which seems to have made all the difference.
John then went away and put together some line following software – and it seems to work. There might be a bit of tuning to be done and some alterations to the calibration code, but it does seem to get round a test course:
So after the “serial over USB” problems (see last post), we removed USB completely, switching over to use the built in UART port on the Raspberry Pi and connecting direct to another serial port on the Due (it has lots!). Both devices run at 3.3 volts, so only 3 wires are needed – Tx, Rx and Gnd. A quick search and replace and recompile of the Due code to change the port it is listening to and we fired up the code again – and it worked!
Here’s video of us driving it round the office under joystick control:
Our design calls for an Arduino (to allow real-time stuff like outputting steps, running control loops, etc). We’re using an Arduino Due.
We had planned to get the Raspberry Pi to talk to the Due over ‘serial over USB’ – i.e. we connect the USB port on the Due into the Pi and then send bytes to the /dev/ttyACM0 device that gets created by the OS.
This worked, but after a while (30s or so of chatter) the port would stop responding. A quick google showed that a few other people have seen similar behaviour, but no one had a solution.
Now to find a workaround…
The plan here is to get last year’s Metabot code (with as few changes as possible) working on the new robot so that we can try it out and check the performance is sufficient. If we need new motors shipped from China, I’d like to know now rather than halfway through November!
The first 2 bytes in each frame are sync bytes (0x03, 0x01), then there are 7 pairs of bytes which tell you the position of each of the transmitter channels (joystick axes). Just read the bytes and make your robot dance!