inspired by BOB by badji here at LMR, i wanted to build my own four servo biped walker after i kind of failed on the rather complicated 12 servo ROFI. i love BOB's simplicity and also the gait pattern generating software, i really admire the designer's knack for simplicity and clarity in his solutions. my present bot is more built from stuff i had floating around, this is not about beauty but really about learning the principles of a good gait, smooth walking and understanding the real world's problems on the implementation.
one of the things that really bug me: when you connect the lipo to the system, the servos do all sorts of strange things. obviously this is because they get power before the servo.attach command is grabbing them. this is bad behaviour (see the video, i have to lift him to not fall over when i switch him on), has anybody found a solution?
btw: you can see the full description how i built it on my blog.
update 08.12.14: hunted down the "seizure" problem when powering up and fixed it, see my latest blog post how.
When an Arduino compatible CPU comes out of reset it enters boot mode where it waits a predetermined time for a boot message to arrive on the UART port. During this time, the I/O lines to the servos probably are set as inputs. I suspect that the servos see junk, definitely not a nice servo control pulse. Are the sevos in the power off condition able to maintain the previous position? Can you measure the time before first servo movement?
If the servos are able to hold their position without power, it is possible that the “default” servo initialization code is causing the problem. You might test this by not initializing the servo code.
ad 1: yes it can walk a bit faster by moving the servos faster, but then it shakes up more easily and will fall. i think to make it really walk faster, i’d need to increas the angles the hips do. then again the feet will (and sometimes are already) touch and make it stumble. in order to fix this, i’d increase the distance between the hip servos, i guess, or introduce a knee servo to actually move the flying foot out of the way. still think about how to improve this…
ad 2: mostly because the legs are too long and not stiff enough. this is my next improvement: i’ll connect the hip servos with a cross and add more metal to the legs so that they can’t swing left and right.
ad 3: i think tiles and ground are okay, carpet will be more problematic as it’s not stabilising itself in any way, the gait is not flexible. i have a gyro sensor here and think i’ll add a belly / back with 1-2 servos that can actively ■■■■ the upper part’s mass to stabilise. hoping that the PID library will do the job as otherwise the maths involved are way beyond my capabilities (kalman filter kills me already).
ad 4: about 700g
ad 5: i think, right now weight on the feet would actually help, but that’s not elegant engineering. weight on the top would add to the shakeyness. this is why i want to add two servos and a gyro to actively counter balance. (i actually want to have an upper body, at least a head, possibly also arms, if possible)
ad 6: this is just the conventional arduino nano. my favorite board. i also have teensy duinos they are much faster so if the complexity of incoming singals should increase, i may change.
the simplicity is mostly @bajdi’s genius, i actually copied the inverted L leg structure and the servos positions. it’s really simple and beautiful, but it also has some limitations.
my take-away from that was that i’ll add a relay that will switch the power on the servo-lines on when the arduino is up and running. in that way, the servos will be started with the intended initial servo position.
i actually have the next version here on my table. will just include the relay add-on i blogged about yesterday and will post the update tomorrow. will iterate the bot a couple of more times. goal is to be able to support an upper body without falling over every second.