PEDRO gets better timing, and gizmos from SparkFun!
Ok, it's been quite some time since progress on PEDRO the robot dog was posted, but since we've just had our first kid (welcome little baby Emily!), I think I can be forgiven...
There's been quite a bit of development behind the scenes of Pedro - but about the only visible change is much smoother walking due to improving the controlling windows software running on Microsoft Robotics Studio.
The robot has always been plagued by really bad timing jitter due to the use of windows software to generate servo movements at 50Hz; precise timing is just not a strong point of windows software in general.
I did a lot of experimenting with different methods of generating timing, and settled on the windows multimedia timer as the best method to use to generate the 50Hz servo update messages that get sent to the robot. I then had a lot of trouble getting them to work within my Robotics Studio code for some reason. I won't bore you with the details, but I got some help on the MSDN robotics forum from KuSter (follow this thread if you're interested) and ended up writing a little separate program to act as a metronome using the MM timers and sending TCP/IP timing messages through to the robotics studio service every 20ms. Eventually I'm going to change the software around quite a bit, and have the robot ask for position updates from the PC every cycle so the robot becomes the timing master rather than just a slave device. This way the AVR micro can precisely control the rate position updates are sent to the servos.
In the meantime still generating regular servo updates from the PC end, the timing is much better (still far from perfect though); check out this video -
In the video I'm using a USB cable for communications between the robot and the laptop because I still have a problem with the WiFi connection to the robot. The WiFi is provided by a Lantronix WiPort module (same as the Surveyor folks) but I've had problems with getting consistent performance from it given I'm trying to send servo updates at 50Hz across the WiFi link.
I'm also tackling the WiFi problem as well - I've just bought a replacement WiFi module from the guys at SparkFun, it's the WiFly GSX module from Roving Networks. I bought the module already mounted onto a breakout board so I could test it right away.
I also got this FTDI 3.3V USB converter from SparkFun as well so I could hook it up to the new WiFi module and start testing it right away. This I did, and it worked without any trouble at all. I tested it by hammering it with 50Hz packets (actually I used my normal Pedro robot software to be totally authentic), and it worked very well without any of the strange dropouts I got with the Lantronix WiPort module. Of course it is possible that my Lantronix module is a dud, but regardless the WiFly GSX is lower power, smaller and just as fast, so if Pedro gets a revision 2 of the controller PCB, the WiFly will get pride of place. In the mean time, I will remove the Lantronix module and mount the WiFly onto the current board as neatly as possible.
Other than the stuff I've described above, I've been tooling away on the walking algorithm in order to finally have a system that can calculate and plan the foot movements dynamically, so the robot stays stable and upright no matter what direction or rotation it is instructed to follow. I've come a long way with this, but it'll need some serious debugging and testing before its ready for prime time.