This quadruped will function as demonstration model for new gait-generation algorithms for statically stable omnidirectional locomotion
Another main goal is to keep its cost as low as possible, construction costs are currently below 100 euros, this is expected to rise to about 150 when the battery and the raspberry pi are added.
Components for the battery pack came in today. There's:
- 2 li-ion batteries, 3.7v 1200 mAh
- usb li-ion battery charger board (not pictured, TP4056)
- DC-DC converter board (LM2596S)
- current sensor board (ACS712)
I'll make a 7.4V battery and use the converter to step the voltage down to 5V to power the servos. The current sensor is going on the battery leads so I can track the power consumption. It outputs an analog voltage so I'll use an attiny to read that and put it on the I2C bus.
I'm not sure if the batteries have enough capacity to provide a decent amount of running time for the robot but we'll find out. At least the current sensor will give some insight into the actual power consumption of the robot.
The first working stable gait (dynamically generated) is working. The robot can now move its body in a straight line in x or y direction (one of the two) indefinitely and the legs will move to keep the robot stable at all times. Since turning was already available, we can now walk anywhere:
The lighting is terrible I know. The feet are still being lifted in a very rough manner, causing the rest of the robot to slip over the smooth table. I'm working on that...
I made some functions to allow a statically stable turning motion of the robot around its own center. Stability is preserved by moving the robot's body into a position that allows stable lifting of a foot before each transfer.
The resting positions for all feet are known. They are chosen for their high kinematic margins in all directions. (i.e. all servos set to their middle angle to allow for the most room for movement).
The turning motion is then generated with the following cycle:
Find the resting positions for each foot when the body would be turned by x radians
Look at the legs that have not been transferred yet
Move to a position to allow any of those legs to be lifted with stability
Lift the leg and transfer it to its new resting position
Turn the body by x/4 radians
Repeat steps 2 through 6 until all legs are transferred and the body has turned x radians
Move the body back to the center
The result can be seen in the following video, where x = 0.3
With a few modifications this cycle might be used to reset all legs to their resting positions by simply doing a turning motion for 0 radians. More on that later...
the video shows the robot walking a few steps while the body moves forward in a straight line.
All of the movements are generated by evaluating the model at the current time.
Basically: all feet are connected to eachother and to the center of the robot body by virtual springs. The robot center body is moved forward while the feet remain on the ground. The gaitgenerator runs the following cycle:
1. find the leg L that has the higest virtual force in the direction of movement (forwards)
2. check if L can be lifted without losing stability (i.e. toppling over)
3. if L can be lifted, move its foot upwards
4. generate the target for the foot based on the combined virtual spring forces and an extra virtual force in the movement direction
5. place the foot down at the generated position
This method of gaitgeneration is still far from finished. Next step is expanding the virtual spring model to provide an approximation of the kinematic limits of the robot.
I know what you mean. I hope you you enjoy it too! I'm looking forward to when you have some more time, I'm sure this is going to be a great way to do gaits.
I have bought myself a 16ch PWM for the RPI along with 12 9g servos to do just this.
Hope yours gets done before mine as i have no idea how to program.. this is kind of my hands on learning project :D I got the servos to run the whole 180degrees and now i am searching for an efficient way to create a gait for the RPi Best of luck to you!
I think that for starting you might want to go with a hard-coded gait. I have build and programmed a quadruped like that (rpi + servo controller) in Python, you can try to look at my code and adapt it to your needs: https://bitbucket.org/thesheep/kubik/src/tip/walk.py
The spring-based approach is new :) (t does still use IK and the center of mass)
-
The forward gait that I showed in the video is sadly only stable for about 8 steps. The speed is probably in the range of 2..10 cm per second. Once there's a continuously stable gait I'll measure the speed
I quickly overlooked the schematics and board files.
At first glance the wires look a tid bit like autorouter, but this could be just me.
Of course those layouts are, presumably, still in development.
Also had a quick peek at the software, looks neat.
The entire board is still very much a prototype, i think they clothespins holding it together might indicate this :)
A low power raspberry pi is going to be on top so any other usb peripherals can go on there. I'm not yet sure if I want to keep the I2C bus on the board with the atmega chips or just put it on on the I/O pins of the Pi, we'll cross that bridge when we get there. focus for now is:
1. locomotion
2. functions using the accelerometer (self righting, center of mass detection)
3. custom 6V usb chargeable battery pack
I have the same issue. Can anyone help, please?