Legacy Forum: Preserving Nearly 20 Years of Community History - A Time Capsule of Discussions, Memories, and Shared Experiences.

Gyros not really enough

Hitec robotics including ROBONOVA humanoid, HSR-8498HB servos, MR C-3024 Controllers and RoboBasic
14 postsPage 1 of 1
14 postsPage 1 of 1

Gyros not really enough

Post by tum » Sun May 18, 2008 1:07 pm

Post by tum
Sun May 18, 2008 1:07 pm

After playing around with gyros a bit I've come to the conclusion that it's not really necessary. I find the gyros don't really keep robonova significantly more balanced than he naturally is (because of his large feet). The gyros only respond to the intial push by linearly modifying the current servo position. Pretty simple and doesn't actually take into account robonova's actual tilt and position (which would be necessary to determine exactly how much to compensate by). It gives Robonova a more life like appearance but not much more.

I think best thing to do would be to use the accelerometer. Robonova would then just wave his arms in the appropriate direction and at the appropriate speed/force to steady himself. If he calculates he can't move his arms with enough force to straighten up then he could walk backwards of forwards to take up the momentum (like a person or segway).

I suspect robobasic isn't fast enough to do this.

Has anyone done any work into self balancing robonovas beyond basic gyro setups? I'm not expecting performance like boston dynamic's "big dog" but I suspect we can get much closer than what robobasic's gyro commands provide.

I find basic preprogrammed moves boring. Dynamic feedback and control is where it's at!
After playing around with gyros a bit I've come to the conclusion that it's not really necessary. I find the gyros don't really keep robonova significantly more balanced than he naturally is (because of his large feet). The gyros only respond to the intial push by linearly modifying the current servo position. Pretty simple and doesn't actually take into account robonova's actual tilt and position (which would be necessary to determine exactly how much to compensate by). It gives Robonova a more life like appearance but not much more.

I think best thing to do would be to use the accelerometer. Robonova would then just wave his arms in the appropriate direction and at the appropriate speed/force to steady himself. If he calculates he can't move his arms with enough force to straighten up then he could walk backwards of forwards to take up the momentum (like a person or segway).

I suspect robobasic isn't fast enough to do this.

Has anyone done any work into self balancing robonovas beyond basic gyro setups? I'm not expecting performance like boston dynamic's "big dog" but I suspect we can get much closer than what robobasic's gyro commands provide.

I find basic preprogrammed moves boring. Dynamic feedback and control is where it's at!
tum
Savvy Roboteer
Savvy Roboteer
Posts: 34
Joined: Fri Jun 08, 2007 5:28 am

Post by Ray » Sun May 18, 2008 4:25 pm

Post by Ray
Sun May 18, 2008 4:25 pm

first, you are right Robonova has a slow CPU

Secondly, a Title sense will be useful for slow motion where accelerator is not good responding. A pressure sensor is even better if the robot need to go up or down a stair.

Thirdly, Acceleration Sensor is best effective only in Fast acceleration state.
e.g. runing or fast leg motion. note that if the acceleration is of small magnitude the response will of cause tends to zero.
So, some advanced robot technique will make the legs in motion even when it need to stay in the same position.

Motion gait will also affect your robot's stability performance.

:)
first, you are right Robonova has a slow CPU

Secondly, a Title sense will be useful for slow motion where accelerator is not good responding. A pressure sensor is even better if the robot need to go up or down a stair.

Thirdly, Acceleration Sensor is best effective only in Fast acceleration state.
e.g. runing or fast leg motion. note that if the acceleration is of small magnitude the response will of cause tends to zero.
So, some advanced robot technique will make the legs in motion even when it need to stay in the same position.

Motion gait will also affect your robot's stability performance.

:)
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by tum » Sun May 18, 2008 4:30 pm

Post by tum
Sun May 18, 2008 4:30 pm

Ray wrote:first, you are right Robonova has a slow CPU

Secondly, a Title sense will be useful for slow motion where accelerator is not good responding. A pressure sensor is even better if the robot need to go up or down a stair.

Thirdly, Acceleration Sensor is best effective only in Fast acceleration state.
e.g. runing or fast leg motion. note that if the acceleration is of small magnitude the response will of cause tends to zero.
So, some advanced robot technique will make the legs in motion even when it need to stay in the same position.

Motion gait will also affect your robot's stability performance.

:)


I meant using the acelerometer to measure the robot's tilt with respect to the ground (i.e. measuring acceleration due to gravity). I'm basically trying to get robonova to remain standing on one or two legs regardless of how much he is pushed.

I don't think the robonova's CPU is too slow to do what we need (the AVR128 is a nice controller and is used by most other humanoid kits) but robobasic is way too slow and limited (can't even have nested IF statements!) :-(.

I wish hitec would provide an opensource C library for programming robonova :-(
Ray wrote:first, you are right Robonova has a slow CPU

Secondly, a Title sense will be useful for slow motion where accelerator is not good responding. A pressure sensor is even better if the robot need to go up or down a stair.

Thirdly, Acceleration Sensor is best effective only in Fast acceleration state.
e.g. runing or fast leg motion. note that if the acceleration is of small magnitude the response will of cause tends to zero.
So, some advanced robot technique will make the legs in motion even when it need to stay in the same position.

Motion gait will also affect your robot's stability performance.

:)


I meant using the acelerometer to measure the robot's tilt with respect to the ground (i.e. measuring acceleration due to gravity). I'm basically trying to get robonova to remain standing on one or two legs regardless of how much he is pushed.

I don't think the robonova's CPU is too slow to do what we need (the AVR128 is a nice controller and is used by most other humanoid kits) but robobasic is way too slow and limited (can't even have nested IF statements!) :-(.

I wish hitec would provide an opensource C library for programming robonova :-(
tum
Savvy Roboteer
Savvy Roboteer
Posts: 34
Joined: Fri Jun 08, 2007 5:28 am

Post by Ray » Sun May 18, 2008 4:46 pm

Post by Ray
Sun May 18, 2008 4:46 pm

agree.

But standing on one leg and pushing the robot and stay stablely had some difficulty in fact. :roll:

ARM9 CPU or DSP had better processing speed 8)
agree.

But standing on one leg and pushing the robot and stay stablely had some difficulty in fact. :roll:

ARM9 CPU or DSP had better processing speed 8)
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by Voelker » Sun May 18, 2008 4:47 pm

Post by Voelker
Sun May 18, 2008 4:47 pm

Maybe the best solution to this "open-source and C programmable controller" could be solved by re-designing the board with the same CPU and interfaces but provinding access to the ISP pins. This shouldn't be to costy (lot cheaper than the original controller) but we would need to develop C library for servo control.
Maybe the best solution to this "open-source and C programmable controller" could be solved by re-designing the board with the same CPU and interfaces but provinding access to the ISP pins. This shouldn't be to costy (lot cheaper than the original controller) but we would need to develop C library for servo control.
Voelker
Savvy Roboteer
Savvy Roboteer
Posts: 85
Joined: Thu Sep 06, 2007 7:32 pm

Post by Ray » Sun May 18, 2008 5:12 pm

Post by Ray
Sun May 18, 2008 5:12 pm

To me, I would like to directly use a C compiler to program the Atmega 128 using the ISP instead of make a C programable language for the robot. It seem spending too much time to make a general language and in fact in this web there seem do not has ... (If I am not missed)

Well, I may better use a ARM7 CPU instead, such as NXP LPC2148 which use 60MHz Clock rate instead of 16MHz of Atmega 128 of Robonova.
To me, I would like to directly use a C compiler to program the Atmega 128 using the ISP instead of make a C programable language for the robot. It seem spending too much time to make a general language and in fact in this web there seem do not has ... (If I am not missed)

Well, I may better use a ARM7 CPU instead, such as NXP LPC2148 which use 60MHz Clock rate instead of 16MHz of Atmega 128 of Robonova.
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by StuartL » Sun May 18, 2008 5:32 pm

Post by StuartL
Sun May 18, 2008 5:32 pm

The ATMega128 is EASILY fast enough for inverse kinematics and response to accelerometer inputs.

I know because I'm doing it :P :)
The ATMega128 is EASILY fast enough for inverse kinematics and response to accelerometer inputs.

I know because I'm doing it :P :)
StuartL
Savvy Roboteer
Savvy Roboteer
Posts: 350
Joined: Mon Jun 04, 2007 3:46 pm
Location: Thatcham, Berkshire, UK

Post by tum » Sun May 18, 2008 5:35 pm

Post by tum
Sun May 18, 2008 5:35 pm

StuartL wrote:The ATMega128 is EASILY fast enough for inverse kinematics and response to accelerometer inputs.

I know because I'm doing it :P :)


I suspected it would be. Would you care to share some details? :wink:

Are you using C or Robobasic?
StuartL wrote:The ATMega128 is EASILY fast enough for inverse kinematics and response to accelerometer inputs.

I know because I'm doing it :P :)


I suspected it would be. Would you care to share some details? :wink:

Are you using C or Robobasic?
tum
Savvy Roboteer
Savvy Roboteer
Posts: 34
Joined: Fri Jun 08, 2007 5:28 am

Post by StuartL » Sun May 18, 2008 6:13 pm

Post by StuartL
Sun May 18, 2008 6:13 pm

I'm using C on the Robotis CM-5 controlling a fairly modified Bioloid Comprehensive kit in humanoid form.

There's probably little I'm doing that will port to the RoboNova easily (and not having a robonova seriously limits my ability to cross-test) however the biggest problem I'm having is not the maths or response times, it's going through all twenty servos acquiring and setting positional/load information. I may, ultimately, just ignore the current servo positions completely and only propagate my new positions based on the maths.

I'm getting about 40Hz including the servo positional stuff. The maths, which is probably about half of what I want to ultimately do, takes about 4ms/cycle. Assuming I double that number and I can double-buffer the servo work I should be able to hit the 40Hz, and if I could read/set the servos faster I should be able to hit 100Hz.
I'm using C on the Robotis CM-5 controlling a fairly modified Bioloid Comprehensive kit in humanoid form.

There's probably little I'm doing that will port to the RoboNova easily (and not having a robonova seriously limits my ability to cross-test) however the biggest problem I'm having is not the maths or response times, it's going through all twenty servos acquiring and setting positional/load information. I may, ultimately, just ignore the current servo positions completely and only propagate my new positions based on the maths.

I'm getting about 40Hz including the servo positional stuff. The maths, which is probably about half of what I want to ultimately do, takes about 4ms/cycle. Assuming I double that number and I can double-buffer the servo work I should be able to hit the 40Hz, and if I could read/set the servos faster I should be able to hit 100Hz.
StuartL
Savvy Roboteer
Savvy Roboteer
Posts: 350
Joined: Mon Jun 04, 2007 3:46 pm
Location: Thatcham, Berkshire, UK

Post by Voelker » Sun May 18, 2008 7:09 pm

Post by Voelker
Sun May 18, 2008 7:09 pm

Maybe the best solution would be a board allowing to plug a daughter board with the processor, voltage regulator, an crystal. This way user could choose its processor. Another solution would be to have a board with two processor, one managing servos positionning and one doing the AI and sensor management. I am gonna try to design a replacement board for the robonova ...
Maybe the best solution would be a board allowing to plug a daughter board with the processor, voltage regulator, an crystal. This way user could choose its processor. Another solution would be to have a board with two processor, one managing servos positionning and one doing the AI and sensor management. I am gonna try to design a replacement board for the robonova ...
Voelker
Savvy Roboteer
Savvy Roboteer
Posts: 85
Joined: Thu Sep 06, 2007 7:32 pm

Post by tum » Sun May 18, 2008 7:27 pm

Post by tum
Sun May 18, 2008 7:27 pm

Voelker wrote:Maybe the best solution would be a board allowing to plug a daughter board with the processor, voltage regulator, an crystal. This way user could choose its processor. Another solution would be to have a board with two processor, one managing servos positionning and one doing the AI and sensor management. I am gonna try to design a replacement board for the robonova ...


For what I'm wanting to do I'm starting to think I should have gotten a bioloid instead of an RN-1. They're cheaper too. *sigh*
Voelker wrote:Maybe the best solution would be a board allowing to plug a daughter board with the processor, voltage regulator, an crystal. This way user could choose its processor. Another solution would be to have a board with two processor, one managing servos positionning and one doing the AI and sensor management. I am gonna try to design a replacement board for the robonova ...


For what I'm wanting to do I'm starting to think I should have gotten a bioloid instead of an RN-1. They're cheaper too. *sigh*
tum
Savvy Roboteer
Savvy Roboteer
Posts: 34
Joined: Fri Jun 08, 2007 5:28 am

Post by Ray » Mon May 19, 2008 6:39 am

Post by Ray
Mon May 19, 2008 6:39 am

Any real experimental video showing your inverse kinematics ?

I suggest ARM7 or other fast CPU because they can provide fast multiplication of gain adjustment with the gyro gain for the large number of servos.

Of course, the servos's position, speed and timing need a fast processor to do.
Any real experimental video showing your inverse kinematics ?

I suggest ARM7 or other fast CPU because they can provide fast multiplication of gain adjustment with the gyro gain for the large number of servos.

Of course, the servos's position, speed and timing need a fast processor to do.
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by Voelker » Mon May 19, 2008 7:15 am

Post by Voelker
Mon May 19, 2008 7:15 am

The ARM7 is a little more complicated to run, but is a lot faster. I am gonna try to do a design with the atmega128 first, and then i'll try to switch to an ARM7 (LPC2132). Could you give me information about what you would expect from a new board (IO's, 3.3v or 5v, integrated bluetooth, ...)
The ARM7 is a little more complicated to run, but is a lot faster. I am gonna try to do a design with the atmega128 first, and then i'll try to switch to an ARM7 (LPC2132). Could you give me information about what you would expect from a new board (IO's, 3.3v or 5v, integrated bluetooth, ...)
Voelker
Savvy Roboteer
Savvy Roboteer
Posts: 85
Joined: Thu Sep 06, 2007 7:32 pm

Post by Ray » Mon May 19, 2008 8:25 am

Post by Ray
Mon May 19, 2008 8:25 am

Hmm ....

I think a bluetooth is good for basic communication with PC.

A PS2 Controller interface is a must if you need a good walk gait with turning and running.... I recently finish the algorithm of interfacing the PS2 controller with vibration feedback.
if you interest, pls go to the RB1000 discussion forum.

I found a great problem with my robots including KHR, Robonova and RB2000 is that the memory is too small, so, when you choose processor, it is recommended to consider to read SD card for robot guit program storage.
there is good site of discussing interfacing the SD card:
www.kronosrobotics.com

3.3V I/O is no problem, basically you can use it to interface 5V system.

If you wish to speed up the servo calculation and save I/O space, I suggest u to use 74HC238 ( 3-to-8 line decoder/demultiplexer)ICs to make a real time parallel output for the servo
(7 i/o can gives more than 20 servos)
:wink:
Hmm ....

I think a bluetooth is good for basic communication with PC.

A PS2 Controller interface is a must if you need a good walk gait with turning and running.... I recently finish the algorithm of interfacing the PS2 controller with vibration feedback.
if you interest, pls go to the RB1000 discussion forum.

I found a great problem with my robots including KHR, Robonova and RB2000 is that the memory is too small, so, when you choose processor, it is recommended to consider to read SD card for robot guit program storage.
there is good site of discussing interfacing the SD card:
www.kronosrobotics.com

3.3V I/O is no problem, basically you can use it to interface 5V system.

If you wish to speed up the servo calculation and save I/O space, I suggest u to use 74HC238 ( 3-to-8 line decoder/demultiplexer)ICs to make a real time parallel output for the servo
(7 i/o can gives more than 20 servos)
:wink:
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK


14 postsPage 1 of 1
14 postsPage 1 of 1