tag:blogger.com,1999:blog-78716504934156341352024-03-14T21:05:55.757+11:00Robots AustraliaBlog of my robot building journey...Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-7871650493415634135.post-22223581915950197562009-10-11T16:41:00.011+11:002009-10-15T14:03:43.899+11:00PEDRO 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...<br /><br />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.<br /><br /><span class="currency_converter_text">The robot has always been plagued by really bad timing jitter due to the use of windows software to generate servo movements at </span><span title="Convert this amount" class="currency_converter_link"><span title="Convert this amount" class="currency_converter_link">50</span></span><span class="currency_converter_text">Hz; precise timing is just not a strong point of windows software in general.</span><br /><br /><span class="currency_converter_text">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 </span><span title="Convert this amount" class="currency_converter_link"><span title="Convert this amount" class="currency_converter_link">50</span></span><span class="currency_converter_text">Hz 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 </span><a href="http://social.msdn.microsoft.com/Forums/en/roboticsccr/thread/fe9e8683-8806-43d6-a1d6-5fc01900dc1e">this thread</a><span class="currency_converter_text"> 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 </span><span class="currency_converter_text"><span title="Convert this amount" class="currency_converter_link">20</span></span><span class="currency_converter_text">ms.</span> 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.<br /><br />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 -<br /><br /><object height="340" width="560"><param name="movie" value="http://www.youtube.com/v/hFTn09gQEks&hl=en&fs=1&"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/hFTn09gQEks&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="292" width="480"></embed></object><br /><br /><span class="currency_converter_text">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 </span><span title="Convert this amount" class="currency_converter_link"><span title="Convert this amount" class="currency_converter_link">50</span></span><span class="currency_converter_text">Hz across the WiFi link.</span><br /><br />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 <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9333">WiFly GSX module</a> from Roving Networks. I bought the module already mounted onto a breakout board so I could test it right away.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiycVAXxoOORlEZKpMTWNrEyMkHco0G5k3OUI1KqdZUoMoIb3mL-LAOV3ZDbpbXH7NKzMhOlCAtVk9B43gkYf2uc-zrQdIalfmV9gtcpSXOR33zhMyYURQQZKU_z3w1a_NjVgG_zuF1okE/s1600-h/IMG_6552_800x600.JPG"><img style="cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiycVAXxoOORlEZKpMTWNrEyMkHco0G5k3OUI1KqdZUoMoIb3mL-LAOV3ZDbpbXH7NKzMhOlCAtVk9B43gkYf2uc-zrQdIalfmV9gtcpSXOR33zhMyYURQQZKU_z3w1a_NjVgG_zuF1okE/s320/IMG_6552_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5392649003926153890" border="0" /></a><br /><br />I also got this <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8772">FTDI 3.3V USB converter</a><span class="currency_converter_text"> 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 </span><span title="Convert this amount" class="currency_converter_link">50</span><span class="currency_converter_text">Hz 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 </span><span title="Convert this amount" class="currency_converter_link">2</span><span class="currency_converter_text"> 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.</span><br /><br />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.<br /><span style="text-decoration: underline;"></span>Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com7tag:blogger.com,1999:blog-7871650493415634135.post-15181288201856087742009-05-20T13:09:00.011+10:002009-05-20T13:59:14.901+10:00Every mobile robot needs a battery..."PEDRO" the quadruped robot got a lithium polymer battery last week courtesy of eBay. I had been putting off buying a heavy and expensive large capacity LiPo battery until I had got the walking algorithms working a bit better and I could truly test the ability of the robot to take the <span title="Convert this amount" class="currency_converter_link">500</span>g or so of a heavy battery, but now batteries are available on eBay for not as much money, I just took the plunge and bought a <span title="Convert this amount" class="currency_converter_link">3000</span>mAh <span title="Convert this amount" class="currency_converter_link">3</span> cell battery pack and charger for the robot.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjAvjM3ZEVh7kIqEDqOqDRGGfxYjdODNcwkYhOs2MFDJBBHIjSj_yWKoUAmIeyW80UjbwT1M0RLej_ZuvosbrzcVGtB-hRgfC2dN0iRM0VZk4KA6o-dgGrTgBmTSpUdRIs5ijxI3LlErk/s1600-h/LiPo+battery+and+charger_800x600.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjAvjM3ZEVh7kIqEDqOqDRGGfxYjdODNcwkYhOs2MFDJBBHIjSj_yWKoUAmIeyW80UjbwT1M0RLej_ZuvosbrzcVGtB-hRgfC2dN0iRM0VZk4KA6o-dgGrTgBmTSpUdRIs5ijxI3LlErk/s320/LiPo+battery+and+charger_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5337742350038558514" border="0" /></a><br />The battery weighs just <span title="Convert this amount" class="currency_converter_link">215</span>g, and cost approx AU$<span title="Convert this amount" class="currency_converter_link">50</span> delivered. The charger can charge up to <span title="Convert this amount" class="currency_converter_link">5</span>A and will do a balance charge, monitoring individual cell voltages.<br /><br />Next I had to fit it to the robot, as the original design called for a larger pack slung underneath the body and neatly held in by the spacers between the side plates. The new smaller pack needed some extra holes and some plastic brackets to hold it in;<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoKuqG-Ui1WePgxKa1GQMJhXkymE5t3Il6lkSnN3rsig_x7Jy8AsQjPRQWJDFfQljTAzRseo_gbzmADmMbgkhjAhhY-y87Cxttl6bl_a2iW244847hKy8tnANkSzk6dimoGZkqOsV2wXI/s1600-h/Help,+trapped+on+a+milling+machine_450x600.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoKuqG-Ui1WePgxKa1GQMJhXkymE5t3Il6lkSnN3rsig_x7Jy8AsQjPRQWJDFfQljTAzRseo_gbzmADmMbgkhjAhhY-y87Cxttl6bl_a2iW244847hKy8tnANkSzk6dimoGZkqOsV2wXI/s200/Help,+trapped+on+a+milling+machine_450x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5337742978003529778" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS1eRDq1OM2VeatFtc_5r6ffYZY16O4f0ej__dI_BzoaBX7_T3yjzE96XdeGss-MgJngi7FKL19WrGsGAaGIO2GC9Vjjp2eE64zEVL_waJyikfP-17rExoIxC6QAtbnWHD_iMjM4msqL8/s1600-h/Battery+neatly+fits+underneath_800x600.JPG"><img style="cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS1eRDq1OM2VeatFtc_5r6ffYZY16O4f0ej__dI_BzoaBX7_T3yjzE96XdeGss-MgJngi7FKL19WrGsGAaGIO2GC9Vjjp2eE64zEVL_waJyikfP-17rExoIxC6QAtbnWHD_iMjM4msqL8/s200/Battery+neatly+fits+underneath_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5337743509446253906" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEienL7waey__2R8Gpo_mFr5DbvIb4Wq7nGI_65Jl-p6PBw9YEMYSZ26rcSAt_YjgxClOaCNSVAoT-wKah2I8wqo7bltEcgH77gPCnWQcfBVg4RY1QPerIEii5HUrJ1JZUS7p_wLbZtw-yk/s1600-h/Fitted+Battery_800x600.JPG"><img style="cursor: pointer; width: 200px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEienL7waey__2R8Gpo_mFr5DbvIb4Wq7nGI_65Jl-p6PBw9YEMYSZ26rcSAt_YjgxClOaCNSVAoT-wKah2I8wqo7bltEcgH77gPCnWQcfBVg4RY1QPerIEii5HUrJ1JZUS7p_wLbZtw-yk/s200/Fitted+Battery_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5337743744919513746" border="0" /></a><br /><br />Once the battery was on and tested ok, I had to return to the firmware for the AVR micro and write some code to support turning the unit on and off via the onboard mosfet and soft on/off button. Also needed was some code to talk to the ADC chip on board which has the battery cell voltages on it, so I could implement low battery automatic cut out and (hopefully soon) viewing of the battery level remotely over the wifi link. Of course it didn't go smoothly...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgolGeKW-P1az3vQ6hwHuY8cHONptAEZ3yctBvrqblJgvbkTLCogxCIFg0yf4jc1Jv3zTcAwfOJDyeREB1-FbRP5jDtkPi2Ta8_m6GLF2ibIHByDTFro3Uptx-LLU94ZC-oZgRzdQq1h2w/s1600-h/Serious+debugging_800x600.JPG"><img style="cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgolGeKW-P1az3vQ6hwHuY8cHONptAEZ3yctBvrqblJgvbkTLCogxCIFg0yf4jc1Jv3zTcAwfOJDyeREB1-FbRP5jDtkPi2Ta8_m6GLF2ibIHByDTFro3Uptx-LLU94ZC-oZgRzdQq1h2w/s320/Serious+debugging_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5337747157975051170" border="0" /></a><br /><br />Once again the <a href="http://www.saleae.com/logic/">usb logic analyser</a> came in very handy in debugging the SPI comms between the micro and the AD<span title="Convert this amount" class="currency_converter_link">7490</span> chip (<span title="Convert this amount" class="currency_converter_link">16</span> channel, <span title="Convert this amount" class="currency_converter_link">12</span> bit converter). You can also see the JTAG MkII from Atmel connected (expensive gadget, but very handy for debugging AVR code).<br /><br />I've also been working on the walking algorithms, and various other software and hardware bits and pieces such as improving the communications (the WiPort wifi module doesn't seem to work as well as I'd hoped - it needs really good signal strength or every now and again it will drop out for up to a second or so). Once I've got some of these wrinkles smoothed out and the walking nice and smooth I'll post some more video.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com5tag:blogger.com,1999:blog-7871650493415634135.post-80588355712719060002009-03-26T11:37:00.011+11:002009-05-02T13:13:06.042+10:00It's alive! But needs work...Finally "PEDRO" the quadruped robot has taken it's first steps outside of simulation... Admittedly it suffers from the shakes and falls over continually, but it is still a milestone.<br /><br />I finished the Microsoft Robotics Studio control service to the point where it can send out regular servo position updates over the wifi link to the robot, taking direction from the quadruped differential drive service which implements the walking algorithm.<br /><br />Here's a short video of the shaky movements;<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/phDyd5zeOpY&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/phDyd5zeOpY&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />Obviously there is a lot to improve upon. The balance and stability control aspects of the software, although they worked ok in the simulation environment, are obviously not working too well on the physical robot. I will definitely improve these, but I'm more worried at the moment about making the servo movements a lot more smooth than they are now.<br /><br />I was initially sending servo position and speed updates (via a SYNC WRITE command on the dynamixel network to the AX-12 servos) at only 10Hz, and the first thing I tried was increasing the rate of updates. Even increasing the rate to 50Hz or even 100Hz didn't improve things much. I also removed the speed control code and used a AX-12 speed register setting of zero which represents maximum speed with not much effect. A quick look at the AX-12 data stream using the completely cool and now indispensable <a href="http://www.saleae.com/logic/features/">logic analyser</a> showed the root cause of the problem - relatively large amounts of jitter in the timing of the AX-12 packets.<br /><br />So next I'll be working on improving this aspect so the robot can have smooth movements. Although some people have managed to cram inverse kinematics and other trig type calculations into Atmel AVR micros similar to those on the PEDRO robot, I think I would rather keep the robot platform as independent from the control methodology as possible to allow for completely novel approaches to be implemented on desktop computers and quickly tested. So step one will be to use more accurate timing within the Microsoft Robotics Studio code. Rather than use the TimeoutPort mechanism provided which according to online sources can have 16-20ms jitter (apparently improved in MRDS 2.0) I will use change the code to use timing based on the multimedia timer which should give much more accurate results.<br /><br />Mind you I expect this will only be step 1, because there are many sources of varying latency in my robot system - wifi, processing delays on board the robot, SPI comms between the main micro and the AVR handling the servo comms etc. So I am thinking I might put a queuing system onto the AVR which handles the servo comms, and rather than just passing data onto the servo bus as soon as it is received, I might actually decode the AX-12 packets and buffer them so I can resend them <span class="code-keyword"></span><span class="code-digit"></span>out at precise intervals. If the buffer holds only a few packets then the delay between the PC end and the actual robot movement won't be that great (maybe 100ms?). I will have to make the rate that the packets are taken from the buffer and sent out to the AX servo bus adjustable with a long term average, so that the micro can tolerate timing differences between the PC end and the micro. For example if the PC end is sending out packets on an average interval of 20.4ms and the micro expects packets at exactly 20ms and is taking packets out of the queue at that rate, then the queue will eventually empty. If the micro measures the average arrival timing of the incoming packets and adjusts its interrupt driven timer for precisely sending out packets accordingly, then the buffer will stay more or less at its intended size.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com5tag:blogger.com,1999:blog-7871650493415634135.post-44084357443429381692009-02-22T12:32:00.006+11:002009-02-22T19:08:00.400+11:00More details on making "PEDRO" walkI thought I would post some info on some of the work that has gone into making the quadruped robot "PEDRO" walk in Microsoft Robotics Studio simulation environment.<br /><br />Here's a video which briefly shows the latest hardware progress before moving on to demonstrations of some elements of the control software. The robot hardware and onboard firmware is now basically ready - though as you can see in the video I'm only up to manually moving one joint at a time until some more PC end software is written.<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/7rPVVzf39cs&hl=en&fs=1"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/7rPVVzf39cs&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />The control software is written in C# and implemented as robotics studio services. Using Microsoft Robotics Studio has allowed the control software to be tested out on a simulated robot before being let loose on the real nuts and bolts hardware. It is amazing how often a simple software bug seemed to make the simulated robot do complicated yoga poses that I'm sure would have led to stripped gears on the real bot...<br /><br />The most important element of the control software is the inverse kinematics routines. These take a foot position vector relative to the robot body and work out the necessary joint angles to put the foot into that position. Once this important function is in place, you can then make a leg step simply by moving the foot position through the desired curve, and the leg joint angles are all taken care of by the inverse kinematics.<br /><br />After the inverse kinematics was working well, the next step was simply adding some other ways to set the foot positions by setting a body movement relative to the ground. Although this sounds complicated, to move the body forward relative to the ground, for example, all you have to do is adjust all the feet position vectors backwards a bit, and again, the inverse kinematics takes care of the rest. Body rotation is handled much the same way; a method is provided to rotate the body which actually rotates the four feet position vectors (or however many feet are actually on the ground at the time) around the body centre.<br /><br />The actual stepping motion is created by choosing a target for the foot position using the current movement direction and current desired body rotation. The path the foot follows during the step is an elliptical one so that the foot moves almost directly straight up off the ground at the onset of the step motion and similarly comes down at footfall almost vertically. This should help in clearing obstacles (or carpet etc.). Once the target foot position is chosen and the step is started, the software updates the foot position and servo rotation speed using the calculated path every iteration. Meanwhile the other three non-stepping legs are being moved by the body motion functions - ie. every iteration the body stance is shifted in the desired movement direction.<br /><br />Another important component of the control software is the methods I have added for calculating the robot's current centre of mass. This is calculated using the known current position of all the joints and the mass of each segment. It is important to know the centre of mass in static walking so that stability can be maintained by shifting the body pose before a foot is lifted off the ground. For example if a particular foot is selected as the next to step, then the body centre of mass should be compared with a triangle formed by the other feet. If the centre of mass falls vertically within the triangle, then the robot will be stable with that foot lifted off the ground. If not, then the body stance can be shifted before the step is started so that the centre of mass falls within the stability triangle.<br /><br />The step order is most critical for stable walking, and I found that for forward motion, stepping the rear then front leg on one side followed by the rear then front leg on the other side resulted in the best stability. Currently PEDRO's walking algorithm adapts this basic pattern for whichever quadrant the desired direction of travel falls in. For example if the desired direction is pretty much side stepping to the right, then the best foot step order will be front left, then front right, then rear left then rear right. I have also worked in the desired rotation into the algorithm which picks the next foot to step, and if the desired rotation is more dominant than the translation movement, then the best order for rotation takes over which is stepping around the clock ie. if rotating clockwise, then step front left, front right, rear right, rear left.<br /><br />This method is working quite well in practice, however I would like to replace it with something a little less scripted. I did try choosing the next foot to step based on which foot could possibly step the furthest in the desired direction, however this wasn't particular successful. I won't do any further work on this right now however, because it will be far more exciting to test out the walking algorithms as they are with the real robot, and this is hopefully not too far off. I have to finish the software service which communicates with the robot using tcp/ip, passing on the joint movement messages to the onboard controller. With a bit of luck the real robot will walk just as successfully as the simulated one, but I'm tipping there will be problems to solve...Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com1tag:blogger.com,1999:blog-7871650493415634135.post-28876362831864810672009-02-10T12:26:00.013+11:002009-02-10T15:30:28.935+11:00Controlling robot simulation with Xbox wireless controllerRecently I bought a wireless Xbox controller purely for use with Microsoft Robotics Studio, to remote control the PEDRO quadruped robot and steer it around the floor. To get to this pretty simple goal, a lot of steps are needed - I already had a simulation of the robot going in Robotics Studio, and even walking, but in a very 'canned' sequenced fashion, with all the joint angles moving between key frames that are hard coded. See <a href="http://robotsaustralia.blogspot.com/2008/09/quadruped-robot-nearly-together-and.html">this blog post</a> for a video of the rather unsteady robot simulation walking in a straight line. This method won't do if you want to control the robot in an unplanned fashion where the direction and speed of walking are able to change at any time, so a more sophisticated approach is needed.<br /><br />Since then I have written several robotics studio services to support the robot. One communicates with the real physical robot (still in progress), another controls the simulated robot. These two implement the same 'generic contract' as robotics studio terms it, so other services can be built to interchangeably communicate with either the real or simulated robot without any recompilation. A third robotics studio service implements the 'generic differential drive' contract so that it can accept differential drive control signals from other services which use this contract. This service contains all the software which implements the new walking algorithm capable of rotation, walking in any direction and varying the speed of the robot. The output of this service is essentially a continuous set of joint angles which can get sent to either the real robot control service or the simulation robot service.<br /><br />The beauty of allowing the walking service to accept differential drive control signals (also called skid steering) is that potentially many different services can be connected up to control PEDRO, even though the original authors of the services have not even seen the robot. The drawback is that there is not much control with just a left and right motor speed signal for a 14 degree of freedom quadruped robot! However I will allow more complicated forms of control in the software which will work with services I create, as well as the more standard differential drive control. Another cool little side benefit is that the standard dashboard service supplied with robotics studio accepts input from the mouse or game controllers like the wireless Xbox controller and so can be used to remote control your robot with a convenient wireless handheld device. Because of this, I had to buy one to try it out!<br /><br /><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/T5sOnRAJ9TE&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/T5sOnRAJ9TE&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br /><br />I'm still working on a video which describes the technical detail behind the actual walking algorithms, and I'll post it when its done. Of course making the robot walk in simulation, and making the real robot actually walk across your floor might be two very different things - and this is something I'll hopefully find out pretty soon as the hardware has progressed really well.<br /><br />The physical robot is now fully wired up with all the AX-12 servos connected up to the onboard controller which is communicating over WiFi quite well. I can manually drag a slider up and down and move individual joints one at a time using a slightly modified version of Scott Ferguson's <a href="http://www.forestmoon.com/Software/DynaCommander/">DynaCommander</a> software. I haven't fitted any battery to the robot yet, so it is still tethered to a power supply, because I would like to put a dummy weight equal to the battery weight (nearly half a kilogram for the one I want to use) onto the robot to make sure it can lift and carry this weight comfortably. This way if the robot can't in practice support the heavy battery I can still source and fit a lighter battery option with less run time.<br /><br />I'm currently working on the service which will replace the simulation and communicate with the real robot. When that's tested and debugged it will be really interesting to see if the walking software that works so well in simulation can work as well in reality!Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com0tag:blogger.com,1999:blog-7871650493415634135.post-53292230149691570562008-09-08T13:20:00.000+10:002009-01-28T09:32:45.283+11:00Quadruped robot nearly together, and MRDS simulation workHi everyone, here's an update on the recent work I have been doing on assembly of the quadruped robot design, and also some adventures using the Microsoft Robotics Developer Studio package. I also talk a bit about some experimentation with casting plastic parts using silicone moulds.<br /><br /><div style="text-align: left;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrjVr2TDw7jojcBm2x2qZY3B7ObHToPkUOkebgEEO1VaV0RquMb32lNjxzUbGWCUWagjl3ictwJPM59TBnnJC4mohX2S-IclHhfRTgrLcL9lC5sFakU2KI2kUJUbMSVmlk17hYqpefB4/s1600-h/IMG_5638_800x600.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIrjVr2TDw7jojcBm2x2qZY3B7ObHToPkUOkebgEEO1VaV0RquMb32lNjxzUbGWCUWagjl3ictwJPM59TBnnJC4mohX2S-IclHhfRTgrLcL9lC5sFakU2KI2kUJUbMSVmlk17hYqpefB4/s320/IMG_5638_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5243822877664521378" border="0" /></a></div><br />As you can see from the picture, the robot is getting near completely assembled now, the only parts remaining are the mounting of the two cameras on the head. No wiring up of servos has been done yet, and the battery pack hasn't yet been mounted (or purchased), but still it's looking more and more complete. The shoulder brackets you can see attaching each leg to the body are actually urethane plastic parts cast in a silicone rubber mould which I made using the original milled plastic version of the shoulder brackets. The milled HDPE version took me about 3 hours to machine, so I was looking for a faster way to make a few of these things. I have never done any plastic casting before, and this is a fairly tricky part to start with I think, as it needed a two part mould and had features like counter sunk holes which I chose to try to include in the casting. The brackets didn't come out as good as I'd hoped, with difficulties around the holes, bubbles in the casting and various imperfections all over and they needed a lot of cleanup, but they are functional.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihiE8WGg-gyyxFvHrAx52DDIkQ-ARh4Xz2NVqySnWQtvvU3jKFikuOIY4cuqKVakfFlSzp4qvnVCKXwGxQeNxtsrQ5b7m2vvPpBCFdQP8tzCpdkRP9Y4hBRrMvHj2jGLeSd9ghXoiaxEg/s1600-h/01082008(003).jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihiE8WGg-gyyxFvHrAx52DDIkQ-ARh4Xz2NVqySnWQtvvU3jKFikuOIY4cuqKVakfFlSzp4qvnVCKXwGxQeNxtsrQ5b7m2vvPpBCFdQP8tzCpdkRP9Y4hBRrMvHj2jGLeSd9ghXoiaxEg/s320/01082008(003).jpg" alt="" id="BLOGGER_PHOTO_ID_5243846171063461298" border="0" /></a><br />As an interesting aside, since making these I discovered an interesting company on the net, <a href="http://www.shapeways.com/">Shapeways</a>, who have an online 3d printing service where you can upload a 3d model, and get an almost instant quote to have it 3d printed in a choice of a few different materials. If you click on the Gallery and search for AX-12 you can see my parts... Price seems fairly reasonable, so I have actually got an order in for a set of shoulder brackets for the quadruped robot, as a concept test to see if the material is strong enough and whether this could be a good robot prototyping resource.<br /><br />The feet for the quadruped are a simple design based on half a squash ball (would you believe!) which will give a uniform contact area with the ground during movement. I had originally intended to use some force sensors I have within the feet, however I have instead made a simple variety of the foot which has no sensor at present. During the construction of the feet I did have a good idea (I think) to use a low cost gas pressure sensor and make the squash ball hemisphere airtight - that way force from any direction on the ball will result in a pressure change and should be able to be sensed. That's an idea for the future at the moment.<br /><br />I have been working recently on desktop software support for the quadruped, specifically Microsoft Robotics Developer Studio services to support the quadruped. Although I don't plan to limit the PC end software to MRDS alone, I did want to evaluate the use of Robotics Studio as a means of simulation (especially to develop some simple walking gaits initially) and also perhaps as a rapid software prototyping platform which might enable me to get some interesting behaviours going quite quickly using services developed by other people linked to the hardware of the quadruped robot via a custom MRDS service I would write. It is early days and still very much a work in progress, especially since C# is not my native tongue yet, but I got a physics simulation going and also a very simple walking motion (using the crawl gait).<br /><br />Here's a video of the simulation environment running;<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxJ5vEn8WboHmb3denDCTbhggfJP1T1j3wsP0-Bnld1hbkdBjLBH_QAGHIk-eiqdmWvqEFV0V75oKXe85WlYA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />The crawl gait I have used is pretty unstable, and it doesn't take much to knock over the robot in the sim. However I intend to improve it by adding some inverse kinematics and a better method of controlling group moves of servos. I also need to add proper support for the differential drive service in MRDS which will enable simple steering and control of the robot using xbox wireless controllers and even the nintendo wiimote. Of course all this is just essentially to demonstrate the capabilities of the robot platform (and have a bit of fun with it) - eventually I would like to implement a brain like hierarchical memory network with the grand aim of teaching it to walk without classical control concepts.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com3tag:blogger.com,1999:blog-7871650493415634135.post-66328543335699003252008-06-12T11:26:00.000+10:002009-01-28T09:28:03.391+11:00Quad4 robot getting assembledWell, it's been a good 6 months since I received the laser cut acrylic panels for the quadruped robot and last posted progress on this blog. In that time I've got married, moved house, and starting fixing up both the old and new houses (still in progress)! Hopefully I can be forgiven for slow progress on the robot...<br /><br />Finally I have machined a couple of the plastic parts I needed to assemble the robot and made a start on assembly. First I needed to move the milling machine from the old house (no small job) and get it set up.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3YCaNJAMeoCPFFfMnaLHdXqq6ibLvf1CTRwung621f43g3HXb-RHnkAVf2l3-4IA5OU3VAGtpaBdBh96DpfQ9w9TG9mfTYdWcvnfil7f9fb48qFi4Wi8Isj9KG4BlfXi_6MgqXPbiV8/s1600-h/IMG_5528_800x600.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw3YCaNJAMeoCPFFfMnaLHdXqq6ibLvf1CTRwung621f43g3HXb-RHnkAVf2l3-4IA5OU3VAGtpaBdBh96DpfQ9w9TG9mfTYdWcvnfil7f9fb48qFi4Wi8Isj9KG4BlfXi_6MgqXPbiV8/s200/IMG_5528_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5210803312791836306" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiht_NuM-AIvbvJB6HRZEnedF0PE22ah097YsBBACQl8rbKbVd5IRS3zXBZ3kAzoN7EgZbDeI8B-5ZUIuIwwDVy7MVjUi7dQTgzLUyo-jfO3At77V-VsPA-aZEa2LHVAa7aqvGZlJPIlb4/s1600-h/CADrender.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiht_NuM-AIvbvJB6HRZEnedF0PE22ah097YsBBACQl8rbKbVd5IRS3zXBZ3kAzoN7EgZbDeI8B-5ZUIuIwwDVy7MVjUi7dQTgzLUyo-jfO3At77V-VsPA-aZEa2LHVAa7aqvGZlJPIlb4/s200/CADrender.jpg" alt="" id="BLOGGER_PHOTO_ID_5210803381446602466" border="0" /></a>These two images show the assembled progress versus the cad model of the whole assembly. I have made two of the custom plastic brackets for the AX-12 servos and have fitted them to the front left shoulder. There are two matching brackets required for each shoulder (click on these images for higher resolution).<br /><br />I've also done the angle bending on the top acrylic cover and used velcro patches to hold it on. I was very happy with how the bends came out, though the job is a lot simpler than the bending needed for the head. I was also happy with the machining on the shoulder brackets, though it was very tricky to do, involving a lot of planning ahead of how to best grip the part in the vice so it was held firmly enough. Took about 3 hours each for the two I've done so far, and there's 8 needed in total...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWD0uyqHJVwENyHxvpERrfYtBI-Yn8c_EIRqxz8nSgmQomyz0b2PCEC7OkmJjKoKvFFasm3bEAPkWn07pKtmSmqWJNqAxZMjObHyk8ueGFADGKJGmo-oC-Gnz55Olah0RD7tBSQlUrha8/s1600-h/IMG_5491_800x600.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWD0uyqHJVwENyHxvpERrfYtBI-Yn8c_EIRqxz8nSgmQomyz0b2PCEC7OkmJjKoKvFFasm3bEAPkWn07pKtmSmqWJNqAxZMjObHyk8ueGFADGKJGmo-oC-Gnz55Olah0RD7tBSQlUrha8/s200/IMG_5491_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5210806614765328226" border="0" /></a>Here is a close-up of the HDPE shoulder brackets. The two brackets needed for each shoulder are a mirror image of each other forming a left and right pair. While the standard Robotis brackets available in the Bioloid kits might do the job, these custom brackets allow for the minimum gap between the two servos, just enough for clearance as the shoulder swings outwards.<br /><br />Just to check on how much weight he's gaining; the scales say 857 grams so far. The target weight for the whole robot including battery is around 2kg.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPnJ0rrQNK6A9FurJ14zKsEw5YiExhjpSgSG7Bc6ttcrKRL7K8VaT7Xu42yBP0nDlYN7wCaMcGa5doVOUiB8y-Tfk8dmb3xeDtQEJ3ipBB9KYuQuCUjkaJ7k_ygmBIoAshBPbEZ0RSxcE/s1600-h/IMG_5518_800x600.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPnJ0rrQNK6A9FurJ14zKsEw5YiExhjpSgSG7Bc6ttcrKRL7K8VaT7Xu42yBP0nDlYN7wCaMcGa5doVOUiB8y-Tfk8dmb3xeDtQEJ3ipBB9KYuQuCUjkaJ7k_ygmBIoAshBPbEZ0RSxcE/s200/IMG_5518_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5210806735297094946" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTl9g4aqTAxl6NjIXmJbNHnQS3-JpwcPGTYxPozSrMAoXKOHD5HyXZLbIT1bg-hvLrk3v5efa0rdwxMnOOGLWRzg-4-DzZTSDDaWqWCdld8Zl7AgtWBT96_Hq_FL17DhgpzoXkX1aby6s/s1600-h/IMG_5498_800x600.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTl9g4aqTAxl6NjIXmJbNHnQS3-JpwcPGTYxPozSrMAoXKOHD5HyXZLbIT1bg-hvLrk3v5efa0rdwxMnOOGLWRzg-4-DzZTSDDaWqWCdld8Zl7AgtWBT96_Hq_FL17DhgpzoXkX1aby6s/s200/IMG_5498_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5210808099182789042" border="0" /></a>The next steps involve machining the other 6 shoulder brackets needed, thermoforming the head plate, drilling the holes needed in the shin parts, and making the feet. Because I have a fair bit on the go at the moment, it is just a matter of grabbing an hour here or there to progress the build, but at least it's getting exciting with real physical assembly taking place!Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com2tag:blogger.com,1999:blog-7871650493415634135.post-48551819280993577302008-01-16T15:17:00.001+11:002009-01-28T09:28:03.391+11:00Acrylic panels for the Quadruped robot arrived!The nice people at <a href="http://www.pololu.com/">Pololu</a> have produced the laser cut acrylic panels which make up most of the body components of the <a href="http://robotsaustralia.googlepages.com/quadruped4">Quadruped4</a> robot, and they arrived here in Melbourne yesterday.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj52bKRIvaQBFOr6e68JPlLy3mgip-IzB3Z7vZZCCFY17-lp5WRtI_kj8tc1G3jByTchtCCvtfafC6Iu5fdZV6TritYh7FRExi1mh0OVg3IPPJh5bZtxBrfHUu4Ts4nTh0i-9MdkF3hJPY/s1600-h/Robot+002_800x600.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj52bKRIvaQBFOr6e68JPlLy3mgip-IzB3Z7vZZCCFY17-lp5WRtI_kj8tc1G3jByTchtCCvtfafC6Iu5fdZV6TritYh7FRExi1mh0OVg3IPPJh5bZtxBrfHUu4Ts4nTh0i-9MdkF3hJPY/s320/Robot+002_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5156226192241608610" border="0" /></a>I put together the base plate and side walls, and mounted on the robotics controller board, so I could get an idea of how it will all come together.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0E6Ilt9oMj5YqrzkpEVDVgawzYA6GvObRHl10ZeYYU5wffM1Jp0s9Rz_e7QnO5tTnVNr7AtoeiRhrqKnYUjDfTsYAt9jV4MAasgy-Y_m4a5hQ8kH4x3QCb7n0v6-qKQ_EVIdvY6n3D8Q/s1600-h/Robot+015_800x600.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0E6Ilt9oMj5YqrzkpEVDVgawzYA6GvObRHl10ZeYYU5wffM1Jp0s9Rz_e7QnO5tTnVNr7AtoeiRhrqKnYUjDfTsYAt9jV4MAasgy-Y_m4a5hQ8kH4x3QCb7n0v6-qKQ_EVIdvY6n3D8Q/s320/Robot+015_800x600.JPG" alt="" id="BLOGGER_PHOTO_ID_5156226608853436338" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieEn6U2mYcWw8ljnPksiMPYp0tMFMCGa7b9V2dDri-WVxA2tCc8_DjS-UcqN09Bvz4P2nVpbsG2vvhKfMDaZyiRqL6ij0PUe3rqqVSE-4aL4nE20ZWUvIV_vAK71Rr51OXIdcP3GyBGS0/s1600-h/Cad+comparison.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieEn6U2mYcWw8ljnPksiMPYp0tMFMCGa7b9V2dDri-WVxA2tCc8_DjS-UcqN09Bvz4P2nVpbsG2vvhKfMDaZyiRqL6ij0PUe3rqqVSE-4aL4nE20ZWUvIV_vAK71Rr51OXIdcP3GyBGS0/s320/Cad+comparison.JPG" alt="" id="BLOGGER_PHOTO_ID_5156227051235067842" border="0" /></a>These two images show reality versus cad! There's a bit of catch up to do... But the slots in all the panels aligned well, and the PCB fitted in place correctly, as did the WiFi antenna tail.<br /><br />I have a bit of precision acrylic bending to do to create the aesthetic bends in the top cover, and especially the head with its "Johnny 5" eyebrows.<br /><br />I also have to purchase the rest of the AX-12 servos (I only have two at this point), and cnc cut the shoulder brackets which are custom designed offset brackets for the Ax-12's.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com4tag:blogger.com,1999:blog-7871650493415634135.post-6146302110312059742007-10-21T16:28:00.000+10:002009-01-28T09:28:03.402+11:00First servo moves over WiFi, and Asimo in MelbourneIt has been a full two months since the last post here, it has been difficult to find much time recently to work on the Quadruped4 robot.<br /><br />Finally though I reached a point where I felt I had achieved enough progress to warrant a blog post. I have written enough firmware for the two Atmel processors on the Dynamixel Robotics Controller to get AX-12+ servos moving under control of a laptop connected via WiFi.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxGmau3nwUtGvL0ZwQAVwKBNJ9YB2_FWDoDJWxcPZEtjlewC_vn9trDYSmuPwm2r4LlawL9kfL1B9L6l4UUVA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />I also had to change the small test application I had written to send AX-12 commands via serial to use a TCP/IP socket connection, but once this was done, I had a servo happily moving back and forth as I dragged the mouse over a dial control. May not seem like much, but this is a pretty important milestone I think. If you look really hard at the fuzzy video, you can see the temporary wires tacked on to add a JTAG interface on the secondary micro (secondary micro handles the 1Mbit/s servo comms). I had a fair bit of trouble getting the SPI link between the two micros going well, and a borrowed JTAG debugger was very handy.<br /><br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxTXuxQH5A3d0PTl97FYWJCnWpi7hUcE11E66whabEwW8wicASTCITOwQD-NFrQgkuCXVIB6I_EwcT-3T_bLA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br />On another note, this week Honda's ASIMO robot appeared in Melbourne as part of an Australian tour. Of course I had to go see it even though the show would have pretty much zero technical content! Here is a bit of a sample of some video I took during the show as I sat among all the kiddies.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsfuEKGYcmlnkwTb5ZDZo3Q-kV3nLBAOpMleyWsmAd79ymcuYWx3Tlxy4JVNS5pRtFq1pEr9hdNxKHnz-Nj6NLWsbVUze_4hX5sUpC7oJ6z2FDbN218nqG3cvWnWW-Axw6v2gNXYIQHOw/s1600-h/2007_10_20+Quad4+current+design.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsfuEKGYcmlnkwTb5ZDZo3Q-kV3nLBAOpMleyWsmAd79ymcuYWx3Tlxy4JVNS5pRtFq1pEr9hdNxKHnz-Nj6NLWsbVUze_4hX5sUpC7oJ6z2FDbN218nqG3cvWnWW-Axw6v2gNXYIQHOw/s200/2007_10_20+Quad4+current+design.jpg" alt="" id="BLOGGER_PHOTO_ID_5123683975953762866" border="0" /></a><br />Back to the Quadruped4 robot, and the next step in construction. Now I have enough electronics and firmware going to move servos over WiFi I think it is time to start on the physical build. I have the design finished to a buildable level I think, and in the interests of getting something going sooner rather than later, I will start on construction. I am quite happy with the attached render of the latest cad model - it looks kind of like it is on the surface of Mars...Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com1tag:blogger.com,1999:blog-7871650493415634135.post-13783609290676609572007-08-21T12:05:00.000+10:002009-01-28T09:28:03.402+11:00WiFi module tested sucessfully!Today the Lantronix WiPort wifi module on the Dynamixel Robotics Controller board was successfully tested!<span style="text-decoration: underline;"><br /><br /></span>Initially I had quite a time getting the wifi module going - mainly due to confusion regarding the two serial ports (3.3V logic level) the WiPort provides. On the controller board I had designed port 0 to run directly into the main AtMega2560 micro, and the secondary port 1 to run through a RS232 level converter IC and to a DB9 serial connector on board. This port was intended to be used as a serial configuration port only, a means to initially configure the wifi module, and to act as a fall back connection for fault diagnosis if the wifi link was not working for any reason.<br /><br />Unfortunately the Lantronix documentation for the module, although it mentions both serial ports, doesn't really draw any distinction between the operation of them - as I read the documents, either port could support their serial configuration console.<br /><br />So, when I fired up the board and tried to enter the 'xxx' required to drop the module into console mode from the DB9 connector - nothing. I went through all sorts of debugging steps because I didn't know whether module, my pcb or the RS232 level converter circuitry was at fault, all to no avail. I did think that perhaps the serial configuration console feature was only available through port 0 (which is connected to my Atmel micro, which currently has no firmware in it to speak of...), however this was harder to test.<br /><br />I resolved to write some firmware to just pass through a connection from the FTDI USB chip on board to the WiPort module transparently. This way I could use hyperterminal to talk to Port 0 of the WiPort as if I was connected directly to it. I then ran into more difficulties - the USB port was not working - not even getting recognised on the PC at all!<br /><br />Eventually I found an incorrectly loaded resistor (wrong value...) in the USB circuitry that was preventing the FTDI chip from functioning correctly. Once that was fixed, the USB sprang into life, and I could open Hyperterminal connected to com4 (assigned to the USB serial). Wrote some quick firmware for the transparent link from USB to the WiPort - basically any characters received from either port are passed across to the other. Turned it all on, entered the 'xxx' to jump to the WiPort console, and voila! Success. I could access the menu setting up all the parameters in the WiPort. Next came some rapid learning about AdHoc and Infrastructure modes in wifi networks. I had initially wanted to use an adhoc connection between my laptop and the robotics controller so the whole setup would be portable outside my house, however I couldn't get this to coexist with the infrastructure mode I use at home with my wireless router. Basically I would have to reconfigure my laptop wifi everytime I wanted to use the robot... not very satisfactory. So I ended up just configuring it to use the home network router, which I suppose I will have to take with me if I want to demonstrate the robot elsewhere.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNoQN_R6vRq0LULzsTde5PBL9CkVDIhFsJlGqK4nPY2FNhqTnDjy514y7VfRJZD8naRKRqa6FXYZNKPAzE6NIJavJ4Fxp3Te_WiaJ0Voklg9kpxbpBX1TOX4Yfx2iwN_Xji-0IlEvvpw0/s1600-h/TwoTelnetSessions.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNoQN_R6vRq0LULzsTde5PBL9CkVDIhFsJlGqK4nPY2FNhqTnDjy514y7VfRJZD8naRKRqa6FXYZNKPAzE6NIJavJ4Fxp3Te_WiaJ0Voklg9kpxbpBX1TOX4Yfx2iwN_Xji-0IlEvvpw0/s320/TwoTelnetSessions.jpg" alt="" id="BLOGGER_PHOTO_ID_5100980804944450386" border="0" /></a><br />Now I had the WiFi module basically going, I thought of the next test... Since I had firmware in the Atmel to pass through comms from USB<-->WiPort I could telnet from my notebook using hyperterminal to the WiPort Port 0, which would get passed through to usb, which I had open again in hyperterminal on the laptop. This worked! I effectively had an elaborate loopback between hyperterminal windows, and could type in either window and see the results in the other. I then wanted to see whether the WiPort would support simultaneous connections to Port 1 at the same time as port 0, so hooked up a serial cable from the laptop to the DB9 connector on the board, another hyperterminal on com1, and a fourth hyperterminal window telneting to the WiPort Port1. Amazingly, all this worked as well! The image above has this crazy scheme illustrated, two simultaneous telnet sessions, one looped back through an FTDI usb serial connection, the other looped back through the DB9 connector onboard the controller to the laptop com1 serial port!<br /><br />So now I have tested some large slabs of the Dynamixel Controller, it is time to get it to actually do something halfway useful. I think the next step is to write firmware to link to the Robotis Dynamixel AX-12+ servo network, and then get some software on the laptop to move a servo over the wifi (or even the usb) link. When that happens I am sure I will have to post an blog entry (even though others may not be as excited about the event as I am...).Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com0tag:blogger.com,1999:blog-7871650493415634135.post-65702817947046871792007-08-07T11:37:00.001+10:002009-01-28T09:28:03.402+11:00"First Turn On" moment of truth for Dynamixel ControllerThe last of the parts have been loaded onto the Dynamixel Controller board now, and suddenly the <a href="http://robotsaustralia.googlepages.com/quadruped4">Quadruped4</a> robot design takes one more step closer to realisation.<br /><br />Here is an image of the loaded board, with the various main functions described;<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8MMUTLTNeVWEqSgGJVFPodcco-idRdkfQrHi8r2WoZ7vyUHKv-SNciOxro7OlaZ2EMUnDN5IY2B_lrxPWLhvCOJzB_ZAqGYuCvmxmBul6akwAmJW4Qr4cO3PmtlXnHYE-y0lPIo3EtIw/s1600-h/DynamixelFeatures.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 338px; height: 201px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8MMUTLTNeVWEqSgGJVFPodcco-idRdkfQrHi8r2WoZ7vyUHKv-SNciOxro7OlaZ2EMUnDN5IY2B_lrxPWLhvCOJzB_ZAqGYuCvmxmBul6akwAmJW4Qr4cO3PmtlXnHYE-y0lPIo3EtIw/s400/DynamixelFeatures.jpg" alt="" id="BLOGGER_PHOTO_ID_5095768791687509074" border="0" /></a><br />The first power on for the board required me to hold my breath a bit, some of the parts are quite expensive (and I don't have spares) so any smoke could have been disasterous...<br /><br />The WiFi module (a Lantronix WiPort) is able to be removed from its PCB connector, and I haven't soldered in the tabs, so I removed this expensive module in order to check that the 3.3V rail was ok first. The board draw no current to begin with, which is ok since the soft power on/off circuitry would be off unless the push button is held down. Once the micros are programmed with firmware, the system will latch power on after the button is pressed so the button can be released, but for the time being you have to hold the button down. Holding the on button down, the circuit drew only a small amount of current which is a good sign! I checked the two power rails, 5V and 3.3V were both ok. Next trick was to use the two ISP (in system programming) connectors and AVR studio to read and write the fuse bits of the AVR AtMega128 and the AtMega2560 on board. I was able to talk to the AtMega2560 ok, but the AtMega128 was unresponsive. A short time later I discovered the first pcb error... not too bad, cutting two tracks and two small wire mods later I was able to communicate with the AtMega 128 processor.<br /><br />Once I was sure I wasn't going to blow anything up, I powered up the system with the WiFi module on board as well. The wifi activity led flashes a few times as the module boots up, then the current draw (at the 12V supply to the board) goes up to a significant 300mA or so. I haven't yet tried to configure the module with the RS232 config port yet, so that might be the next step.<br /><br />I have a lot of firmware already written for an earlier board (the PWM Servo Robotics Controller, see description on the <a href="http://robotsaustralia.googlepages.com/earlierwork">Earlier Work</a> page), so hopefully it won't take to long to cobble together a basic framework from that earlier code to allow me to test the various communications options into the board, such as the USB connection and the WiFi link. I hope the next post here will be able to report that the WiFi link is functional! Following that the real work of designing a suitable protocol and writing code to buffer the serial streams to/from the servo networks and the serial cameras etc. will begin, before the more exciting step of plugging in actual servos, and getting real robot hardware to move!Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com0tag:blogger.com,1999:blog-7871650493415634135.post-86359775612854520912007-06-13T16:17:00.000+10:002009-01-28T09:28:03.402+11:00Dynamixel Controller PCB is getting some parts, and progress on designTime to post an update on what has moved forward with the Quadruped4 robot design. The PCB for the Dynamixel controller has arrived, and all parts for it as well, and also quite a bit of cad work has been done playing around with various options for the mechanical design of the robot.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWdzlYlC4GG8pWVHCREeXx0vfLxrdriWL0Z9PgsvUZeV_YNY1Dn-m06JLLKA0cBjtFe_FO0_tFUvzQh-z9FUfm7JwjHXrnf71bXJ9WeSFBzOttAqZw_a7u4uRdHr3eP51bd_UJz73T7Ks/s1600-h/pcb+partly+loaded.JPG"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWdzlYlC4GG8pWVHCREeXx0vfLxrdriWL0Z9PgsvUZeV_YNY1Dn-m06JLLKA0cBjtFe_FO0_tFUvzQh-z9FUfm7JwjHXrnf71bXJ9WeSFBzOttAqZw_a7u4uRdHr3eP51bd_UJz73T7Ks/s200/pcb+partly+loaded.JPG" alt="" id="BLOGGER_PHOTO_ID_5075430428745008482" border="0" /></a><br />Here is a photo of the PCB partly loaded. You can see the two Atmel Atmega micros, one is the AtMega128 and the other is the AtMega2560. On the far right is the outline where the WiPort WiFi module will go, with a few parts carefully fitting underneath it in just the right spots where there is some room.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQZBCwXq-ppdgEE8sAe5WjzuU6oSVRBo-L7wdw2c5ZzWTsSYO3Ls0ja_MCgqpqJx9FzJBLPtQldBNZyD8KbWigf7LOrTGkMRtfK-HZe8roD7lx2fIx2jGX9S_CgoEsx9MrnDAkMZo_raY/s1600-h/AC6_from_front.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQZBCwXq-ppdgEE8sAe5WjzuU6oSVRBo-L7wdw2c5ZzWTsSYO3Ls0ja_MCgqpqJx9FzJBLPtQldBNZyD8KbWigf7LOrTGkMRtfK-HZe8roD7lx2fIx2jGX9S_CgoEsx9MrnDAkMZo_raY/s200/AC6_from_front.jpg" alt="" id="BLOGGER_PHOTO_ID_5075431502486832498" border="0" /></a>I have also been working on the mechanical design of the robot, and although there is still much to do, and I am not fully happy with several areas, I think the robot will eventually come out something like the design pictured here. Note the WiFi antenna naturally positioned as a tail...<br /><br />Earlier images I created for this robot didn't have the right cameras on it, whereas I have created a somewhat hasty model of the C328 serial camera modules I actually intend to use for this model. Also check out the shoulder joints for the legs, these use a custom bracket I have designed for the Dynamixel AX-12 servos which forms an offset hinge<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5sp3phPuBmMKsmLy0CZch0qXJlBrEL2OuZwEmDQRjInM8kqkuLqkpwSH6JFhApjPye6Htlddc_Osux9hQ9Uh0G6ZpBIjDrjgQi0WmZGDuLWCQDW3XUYUvde_ajgqWtgXDyr55ibv1VM/s1600-h/AC6_Shoulder_iso.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5sp3phPuBmMKsmLy0CZch0qXJlBrEL2OuZwEmDQRjInM8kqkuLqkpwSH6JFhApjPye6Htlddc_Osux9hQ9Uh0G6ZpBIjDrjgQi0WmZGDuLWCQDW3XUYUvde_ajgqWtgXDyr55ibv1VM/s200/AC6_Shoulder_iso.jpg" alt="" id="BLOGGER_PHOTO_ID_5075433018610288018" border="0" /></a> between two AX-12 servos. This function could be served by the Robotis offset hinge and flat plate bracket put together, however that would be bulkier and would not quite have the configuration I am after. There is a view of just the specially designed brackets and the AX-12 to the right. The brackets form a left and right pair, and attach to each side of the AX-12. I will machine these out of nylon or similar material, and although the machining will be a bit tricky, I think I should be able to achieve it.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLRbMMCKJ1sIiCC-bnh9Uzvve3h_RhMQaxS7HmkKDUY2HJ5P2g3tTD0VQNqjU76JD1o0Br-HLGsnQ5gTVcTCnzirtQgTLXrd1kdHptboljnMHGQnDan8d0XCYdd04oqdSa9eJqSPeNfXk/s1600-h/AC6_rear_iso.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLRbMMCKJ1sIiCC-bnh9Uzvve3h_RhMQaxS7HmkKDUY2HJ5P2g3tTD0VQNqjU76JD1o0Br-HLGsnQ5gTVcTCnzirtQgTLXrd1kdHptboljnMHGQnDan8d0XCYdd04oqdSa9eJqSPeNfXk/s200/AC6_rear_iso.jpg" alt="" id="BLOGGER_PHOTO_ID_5075433684330218914" border="0" /></a>Here is another view of the design as it stands. I'm not sure of the top cover, it is really not needed, and I kind of like the idea of seeing the electronics etc, but it will offer some protection I suppose. I need to make plenty of asthetic improvements to the shape of some of these panels as well, the whole thing looks a little like a skateboard deck at the moment.<br /><br />Anyway, this will be the last post for a month or so, as I am travelling to Italy for a holiday, so robot work will take a break too! When I return, I shouldn't expect it will take long before all the parts are loaded onto the controller and I can attempt the all important critical first turn on...Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com1tag:blogger.com,1999:blog-7871650493415634135.post-81157621611353715502007-05-24T11:04:00.000+10:002009-01-28T09:28:03.402+11:00Options for AX-12 Robot LegsWhile I wait for the Dynamixel Robot Controller PCB to arrive from the board manufacturers (update: they got here this morning! looks great!) I have returned to the mechanical design of the Quadruped4 robot.<br /><br />I was never really happy with the look and function of the leg and hip design I have to date for the little creature, and thought I would create some alternate concept simplified cad models to look at other possibilities.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisiNPPB8ZektIEoLz4pOFHuVJQkN6p01Y-I7HcSaoYbpx9qGn1Vx2muURksoTjecYdN_4y7OerDaW-xr2SvVS8HvNAnw6CeN4X5jyvn0_3tO8dfeVzkoKuS9pbN1Dp3lN4RUC4KDpY8aw/s1600-h/orig.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisiNPPB8ZektIEoLz4pOFHuVJQkN6p01Y-I7HcSaoYbpx9qGn1Vx2muURksoTjecYdN_4y7OerDaW-xr2SvVS8HvNAnw6CeN4X5jyvn0_3tO8dfeVzkoKuS9pbN1Dp3lN4RUC4KDpY8aw/s200/orig.jpg" alt="" id="BLOGGER_PHOTO_ID_5067963493659736786" border="0" /></a><span style="font-weight: bold;">Original</span><br />This is how I last left the mechanical design of the legs. The two axis shoulder or hip joint is implemented by two Dynamixel hinge brackets end to end bolted, at ninety degrees to each other. The thigh is made up of the two AX-12 servos end on to each other.<br /><br />My main complaint about this configuration is the distance between the two axis making up the shoulder, which tends to make the upper part of the leg look out of proportion if it is fully extended downwards.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHGRxeTzofzxmrZ4Iy3bAmi8rqYQ_Hrs2Tinz7ElHNAAvnxn2pK0vQzNI_dypjLl46ivABkVL5jy0ES4XEtD19kO0W_3w957gEAiBv2wPZxeEbejieolpQdJbOZxp75fRnJRcV1mjk97A/s1600-h/AltConcept1.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHGRxeTzofzxmrZ4Iy3bAmi8rqYQ_Hrs2Tinz7ElHNAAvnxn2pK0vQzNI_dypjLl46ivABkVL5jy0ES4XEtD19kO0W_3w957gEAiBv2wPZxeEbejieolpQdJbOZxp75fRnJRcV1mjk97A/s200/AltConcept1.jpg" alt="" id="BLOGGER_PHOTO_ID_5067964009055812322" border="0" /></a><span style="font-weight: bold;">Alternate Concept 1</span><br />The first thought was to perhaps mount the forward swing servo onto the horn of the other hip servo, this allows really good thigh range of movement, but the bushes in the servo probably won't like all the load on the horn. Better to use the passive hinge point on the other side of the servo as well with one of hinge brackets.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTPKNzw3y6mVEnZR8I_PnE3LPDy0Mgdnc5M6Lrjup50SQ5tPsU5MaPKt4w_WYcfEo_vXpsIOrLl0mKNe77fNEDf9rDP0LLvcwEHTL8UclvMFjJbCUkwpZNDc36TfRP8wxkx-HP-p7KgKs/s1600-h/AltConcept2.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTPKNzw3y6mVEnZR8I_PnE3LPDy0Mgdnc5M6Lrjup50SQ5tPsU5MaPKt4w_WYcfEo_vXpsIOrLl0mKNe77fNEDf9rDP0LLvcwEHTL8UclvMFjJbCUkwpZNDc36TfRP8wxkx-HP-p7KgKs/s200/AltConcept2.jpg" alt="" id="BLOGGER_PHOTO_ID_5067967934655920882" border="0" /></a><span style="font-weight: bold;">Alternate Concept 2</span><br />Robotis manufacture an offset hinge bracket which I thought might be more useful than the straight bracket in allowing a greater range<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNX_6x28eDMIINZg9vgo5SUPRI7Hntem6sBtwKhFqb4rxvEwdKtZfdteL74uwwaQ3ZMw3elM0M3cNRPjqxEZ_BbLupHCERJD2FxG-ZaOgJN2Geh9L3bL3VbzF4wBgPdPRXfLRNXHOJR8M/s1600-h/AC3_Shoulder.jpg"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 139px; height: 169px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNX_6x28eDMIINZg9vgo5SUPRI7Hntem6sBtwKhFqb4rxvEwdKtZfdteL74uwwaQ3ZMw3elM0M3cNRPjqxEZ_BbLupHCERJD2FxG-ZaOgJN2Geh9L3bL3VbzF4wBgPdPRXfLRNXHOJR8M/s200/AC3_Shoulder.jpg" alt="" id="BLOGGER_PHOTO_ID_5067969631168002834" border="0" /></a> of motion of the joints given horizontal mounting of the thigh servo (as shown left). The image shows crouch and full reach (both dimmed) with standard stance pose undimmed.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkUOdU8kdrBWjPMF2myZQZkVvXekxlq5c4u38YHGsQQ_aEscGpSnoTsmmxYB4HaH6DYE1InoA_6qH-Y1CCNDjp1C0RvtW2F90iDsCrh2zwsOFdRN2tuzKz-iNegtDBU54Il0FtEd7RSA/s1600-h/AltConcept3.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkUOdU8kdrBWjPMF2myZQZkVvXekxlq5c4u38YHGsQQ_aEscGpSnoTsmmxYB4HaH6DYE1InoA_6qH-Y1CCNDjp1C0RvtW2F90iDsCrh2zwsOFdRN2tuzKz-iNegtDBU54Il0FtEd7RSA/s200/AltConcept3.jpg" alt="" id="BLOGGER_PHOTO_ID_5067968437167094530" border="0" /></a><span style="font-weight: bold;">Alternate Concept 3<br /></span>I turned the offset hinge joint around on the thigh to hip joint to see if that improves the range of motion. I don't think it does (see the dimmed forward reach motion in the picture to the left) as the limb can't reach forward particularly far. The crouch pose does look a bit more 'natural' I suppose.<br /><br />I can't say I am really satisfied with any of the options thus far; more cad experimentation required!Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com1tag:blogger.com,1999:blog-7871650493415634135.post-41099411235258301002007-05-10T16:58:00.000+10:002009-01-28T09:28:03.402+11:00Dynamixel Controller PCB design finishedI have been grabbing the occasional hour here and there and have finally finished the layout and routing of the Dynamixel Robotics Controller PCB. A little bit of clean up and it will be ready for submission to the board manufacturer. I have to get going on ordering the parts for it while the board is getting made.<br /><br />On the web site front, I have put together some info for the page about the Quadruped4 design which uses the Dynamixel Robotics Controller. Hopefully it can help other experimenters find suppliers or gather useful information from the approach I have used.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com1tag:blogger.com,1999:blog-7871650493415634135.post-21570398541687514892007-04-30T17:31:00.000+10:002009-01-28T09:30:58.223+11:00Web site progress; filling in information slowly...I have been tackling the <a href="http://robotsaustralia.googlepages.com/earlierwork">Earlier Work</a> page, and have created a lot of content about the investigation into low pressure pneumatic cylinders from MUTR, and the evolution of the Quadruped4 design from its early beginnings as a big heavy cordless drill motor driven creature.Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com0tag:blogger.com,1999:blog-7871650493415634135.post-42715268396736618432007-04-17T13:24:00.000+10:002009-01-28T09:30:58.223+11:00RobotsAustralia Blog Created!<span style="font-size:130%;">Robots Australia now has a blog!<br /></span>Robots Australiahttp://www.blogger.com/profile/17636055261405424720noreply@blogger.com0