Report of Alion project

This topic is to report on my personal project of humanoid robot named Alion. Its purpose is to make a very low cost stunt robot able to walk (for the moment)
It is composed of a biped base of 8dof, an upper body of 9dof and a head of 2dof.
The used servomotors are robotis AX-18.
The inertial reference system is a yocto-3d
The foot contact is detected by two simple switches below each foot
All is connected by USB to a giada computer with an i5 and Ubuntu installed.
The library used is yocto library and pypot.

The first test of control rates have been performed and it is validated.

My first issue is that my motor of knee says :
"Pypot.dynamixel.io.dxltimeouterror: motors 4 did not respond aftersending dxlreaddatapacket(id=4, address=36, length=2)"
Few seconds after the start of the program.

Next step: using high level robot controller in pypot.

1 Like

As the error indicates, a timeout occured :slight_smile: This does not necessary mean that there was a problem somewhere, it could only be a delay in the communication or your timeout is set to a low value - timeout happened quite regularly when controlling Poppy.

In any cases, as you said you should try the higher-level control in pypot where the timeout error are automatically handled. This will likely fix your problem.

Ok, thanks, that’s what I thought.

Also did you set the return delay time to 0ms in your AX-18 motors ?

I advance little by little. The new checkpoint is that I created my first Pypot robot controller adapted to my robotic platform. All the sign convention are then set up. And all is inside a .json file.
I hesitate about sensors management (IMU + “force” sensor of the feet). I have two options:

  • taking the robot controller independently and use it inside external threads (not very smart but right to the solution)
  • inherit a new class from robot controller with new attributes (roll and pitch of the torso…)

To manage external sensors inside the primitive, what should you advise ?

Just a feedback about .json files, you should post a very simple example in the documentation.

You can find a simple example for an ergo-robot here. Is this what you were looking for?

Here is a compatible json file for my configuration

 {
"controllers": {
	"legs": {
		"port": "auto",
		"sync_read": false,
		"attached_motors": ["l_leg", "r_leg"]
	}
},
"motorgroups": {
	"l_leg": ["l_hip_y", "l_hip_x", "l_knee_y","l_ankle_y"],
	"r_leg": ["r_hip_y", "r_hip_x", "r_knee_y","r_ankle_y"]
},
"motors": {
	"l_hip_y": {
		"id": 4,
		"type": "AX-18",
		"orientation": "direct",
		"offset": 0,
		"angle_limit": [-90,90]
	}
}

As you can see the syntax is not the same. It may be due to Python version ? (I work with 3.4)

Ah ok now I understand what you mean. The difference is that in my examples I gave the python dictionary and you showed the json equivalent file.

You can easily transform one to the other using this kind of code:

import json

# From Python dict to JSON
with open('myfile.json', 'wb') as f:
    json.dump(d, f, indent=2)
    
# From JSON to Python dict
with open('myfile.json') as f:
    d = json.load(f)

Ok I removed this line code because it made my json file empty because of syntax error.

Here is my first video of the new version of my biped. It shows the “cockpit”. It is a real-time monitoring of the robot. This interface is going to be enhanced to perform walking. (computation of center of inertia, stability margins…)
It is diificult to see on the video but when I push on the feet, the feet on the cockpit become red.

Next step : longitudinal stability

1 Like

Great!
Do you plan to add a trunk?

Yes, I plan to have a trunk to have center of mass higher and not dependant of the swing leg position.
For the moment, the robot weight 1kg. I plan to have a trunk of 1kg.

An update on Alion Project
It really started the project the 15th october since I am in part time job (half flight control, half dumb humanoĂŻd robot control ;))

So now the project is inside the public “Marionnettes Electriques” (Electric Puppet) project.
I launched :

  • ask for funding in Toulouse’up art call
  • Started “underactuated robotics” on EDX
  • I now cowork in “La serre” which is just next to Artilect Fablab. A very nice place to work.
  • I followed a training on openSCAD opensource software
  • I made a plan to build software architecture based on Pypot
  • I did my first string puppet… So many things to learn…
  • And I make a lot of clown, clown and clown…

The next challenges are:

  • First of all, make Alion walk.
  • On Monday, 3rd november, I will do the first public presentation of the project in Fablab.

I am almost on the tracks.

4 Likes

Looking forward to seeing this!

Marionnettes Ă©lectriques

1 Like

After some days of research, I have an issue : flexibility. I knew I had to face it…
I noticed that for given servomotor angles (torque is not compliant), I have several positions of the robot. For instance, if I force the angle between the legs to 20deg and that the length of the leg is L, the distance between the feet is not 2Lsin(10deg). It can be if I force it by hand but most of time, it is not. It is due to flexibility and slack.
First of all, the flexibility is due to aluminium plates between servos. To minimize this, I replaced plates by aluminium L profile. The flexibility is completely damped.
Slack is more difficult to cancel. The best way I found is to reduce the size of the robot (I removed 25% of height) and to turn the screw on servomotor links.

But the real challenge is to measure this, because the control algorithm needs precision and the more measure we have, the more the state of the robot we have. For geometry it is easy with a ruler. For kinematics… reflexion in progress…

Yep, you got it. I also have this problem…
In my experience, you can compensate a little. In fact, the motors (the controller inside the motors) have difficulties to reach a goal position when to much torque is needed. So you can try by increasing the PID gains.
Another possibility is to implement another controller running at a slower frequency on top of the motor controller which will compensate.

One idea to counterbalance slack/backlash is to use elastics (or springs) such as on the Acroban robot.

1 Like

New checkpoint.
No surprise, walking is hard ;-). But after facing slack and flexibility, there is another wall : understanding what happens and what happened.
In robotics, it is useful to visualize and record all articulation angles to understand why the robot fall. But here, in dynamic robotics, speed is also important. I am thinking about tools to help understanding.

Thinking…

Not sure if I go offf topic but I was trying with BIOLOID GP with static pose stuffs.
I am able to make it walk like humans (fingers crossed :slight_smile: ) !

But it is statically stable. I am thinking to make it stable based on dynamic aspects … may be by sensing sensors.

When it falls it might be because of the reason that I am using AX 18 at legs and does not take up the pain of high torque needed. May I update to MX 28AT?
Will that give some more mechanically stable point … I may be thinking a lot !!!
…
NicoX

2 Likes