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

Development of new controller board for Robonova

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

Development of new controller board for Robonova

Post by fleek » Fri Aug 11, 2006 8:31 am

Post by fleek
Fri Aug 11, 2006 8:31 am

Hi all,

I am in the process of developing a new controller for the robonova, based on the same ATmega128 chip of the MR-3024. The reason I went for Atmel chip is because of the abundance of free tools (C compilers/IDE) available.

The circuit will be very similar to the MR-3024, but it will be running off a 16mhz crystal rather than the 7.xx mhz crystal on the MR-3024. I will be incorporating the Bluesmirf bluetooth module as well for a truly wireless connection.

I have read from this forum about the complexity of reverse engineering the coordination of the servos. But I have an idea which might work without any reverse engineering.

1) How do we ensure that a group of servos be commanded to act together?

The solution is pretty simple. Each port can be configured to be a 8 bit port instead of individual pin outs. So by sending pulse signals as a latched 8 bit port, it will allow us to control one group of 8 servos at the same instant.

2) How do we ensure that a group of servos will end all the different movements at the same time?

If you look at the sluggish performance of the robonova, i believe hitec could have implemented a scaled down approach.

Lets take an example of 3 motors, A, B and C, A has to move from 0-10, B from 0-20 and C from 0-90. To ensure we get to the end position at the same time, we will need to slow down A and B and let C move as fast as possible to the end position.

So for each degree that A moves, B has to move 2 degrees and C has to move 9 degrees.

thus we need to send 10 sets of commands to the servos

A 1 2 3 4 5 6 7 8 9 10
B 2 4 6 8 10 12 14 16 18 20
C 9 18 27 36 45 54 63 72 81 90

Through this method the servos will move to the end positions at almost the same time. In this example I am using 1 degree as the resolution, but in actual fact, we can use even finer resolution.

3) As for the firmware, if we can use a high level language like C, we will just need a bootloader to load the code, and some C routines to perform functions like the above.

Contributions welcome.
Hi all,

I am in the process of developing a new controller for the robonova, based on the same ATmega128 chip of the MR-3024. The reason I went for Atmel chip is because of the abundance of free tools (C compilers/IDE) available.

The circuit will be very similar to the MR-3024, but it will be running off a 16mhz crystal rather than the 7.xx mhz crystal on the MR-3024. I will be incorporating the Bluesmirf bluetooth module as well for a truly wireless connection.

I have read from this forum about the complexity of reverse engineering the coordination of the servos. But I have an idea which might work without any reverse engineering.

1) How do we ensure that a group of servos be commanded to act together?

The solution is pretty simple. Each port can be configured to be a 8 bit port instead of individual pin outs. So by sending pulse signals as a latched 8 bit port, it will allow us to control one group of 8 servos at the same instant.

2) How do we ensure that a group of servos will end all the different movements at the same time?

If you look at the sluggish performance of the robonova, i believe hitec could have implemented a scaled down approach.

Lets take an example of 3 motors, A, B and C, A has to move from 0-10, B from 0-20 and C from 0-90. To ensure we get to the end position at the same time, we will need to slow down A and B and let C move as fast as possible to the end position.

So for each degree that A moves, B has to move 2 degrees and C has to move 9 degrees.

thus we need to send 10 sets of commands to the servos

A 1 2 3 4 5 6 7 8 9 10
B 2 4 6 8 10 12 14 16 18 20
C 9 18 27 36 45 54 63 72 81 90

Through this method the servos will move to the end positions at almost the same time. In this example I am using 1 degree as the resolution, but in actual fact, we can use even finer resolution.

3) As for the firmware, if we can use a high level language like C, we will just need a bootloader to load the code, and some C routines to perform functions like the above.

Contributions welcome.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by XenoEvil » Fri Aug 11, 2006 12:22 pm

Post by XenoEvil
Fri Aug 11, 2006 12:22 pm

Good luck with this project.

I certainly think being able to replace the control board will turn the Nova from a puppet to a really usefull bot.

I'll buy one from you if you get it sorted.
Good luck with this project.

I certainly think being able to replace the control board will turn the Nova from a puppet to a really usefull bot.

I'll buy one from you if you get it sorted.
XenoEvil
Robot Builder
Robot Builder
User avatar
Posts: 15
Joined: Tue Jul 18, 2006 1:00 am

Post by fleek » Fri Aug 11, 2006 11:07 pm

Post by fleek
Fri Aug 11, 2006 11:07 pm

Update:

I have added something new to the design of the controller, an SD card interface, compatible to any max size available. The bootloader will be able to load programs into SD cards. However, the SD card is only for storage purposes, you cannot execute programs directly from SD cards. The code limit is still based on the ATmega128 code size limitations.

Realizing I will have some serious timing issues, there will be firmware, some codes will be assembly based, especially for servo control routines and sensing.
Update:

I have added something new to the design of the controller, an SD card interface, compatible to any max size available. The bootloader will be able to load programs into SD cards. However, the SD card is only for storage purposes, you cannot execute programs directly from SD cards. The code limit is still based on the ATmega128 code size limitations.

Realizing I will have some serious timing issues, there will be firmware, some codes will be assembly based, especially for servo control routines and sensing.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by fleek » Fri Aug 11, 2006 11:12 pm

Post by fleek
Fri Aug 11, 2006 11:12 pm

XenoEvil wrote:Good luck with this project.

I certainly think being able to replace the control board will turn the Nova from a puppet to a really usefull bot.

I'll buy one from you if you get it sorted.


I don't intend to sell the controller board, but I will make the board and all source codes public domain. However, I can help with kits if the final product is useful.
XenoEvil wrote:Good luck with this project.

I certainly think being able to replace the control board will turn the Nova from a puppet to a really usefull bot.

I'll buy one from you if you get it sorted.


I don't intend to sell the controller board, but I will make the board and all source codes public domain. However, I can help with kits if the final product is useful.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by fleek » Fri Aug 11, 2006 11:18 pm

Post by fleek
Fri Aug 11, 2006 11:18 pm

Question:

With the new controller, I am intending to run from LiPo batteries, 7.4V with high power regulators stepping to 6V operations. Any objections?
Question:

With the new controller, I am intending to run from LiPo batteries, 7.4V with high power regulators stepping to 6V operations. Any objections?
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by Ray » Sat Aug 12, 2006 4:33 am

Post by Ray
Sat Aug 12, 2006 4:33 am

Hi fleek,

Good Analysis of you robot!
LiPo batteries is good, because of its light weight!

If you use high power regulator, I recommend you to use a switching
converter. I have researched using DSP controller to directly replace the control ciruit of the switching converter. :)
you can include power supply algorithm if your controller board is as fast as DSP :lol:

In the design, I think the integrated gyro sensor should be a concern, I have observed Kondo KHR2 and JR RB1000 are using gyro with digital sampling, the response is not sactisfactory; if you directly connect the gyro to the legs, you will observe the robot is very stable even you push the robot hardly! (Analog circuit). This may be due to the slow speed of the CPU and the AD sampling or even the algorithm.
Cheerful if you can improve :D

furthermore, do you have the circuit of the present RN? I am wondering why there is no RS232 signal level conversion IC in the CPU board.
Is this is done inside the ATMega128? :roll:
(The Serial cable have no component inside)

Cheer!, whishing to receive you project progress any time :D
Hi fleek,

Good Analysis of you robot!
LiPo batteries is good, because of its light weight!

If you use high power regulator, I recommend you to use a switching
converter. I have researched using DSP controller to directly replace the control ciruit of the switching converter. :)
you can include power supply algorithm if your controller board is as fast as DSP :lol:

In the design, I think the integrated gyro sensor should be a concern, I have observed Kondo KHR2 and JR RB1000 are using gyro with digital sampling, the response is not sactisfactory; if you directly connect the gyro to the legs, you will observe the robot is very stable even you push the robot hardly! (Analog circuit). This may be due to the slow speed of the CPU and the AD sampling or even the algorithm.
Cheerful if you can improve :D

furthermore, do you have the circuit of the present RN? I am wondering why there is no RS232 signal level conversion IC in the CPU board.
Is this is done inside the ATMega128? :roll:
(The Serial cable have no component inside)

Cheer!, whishing to receive you project progress any time :D
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by i-Bot » Sat Aug 12, 2006 3:32 pm

Post by i-Bot
Sat Aug 12, 2006 3:32 pm

The RS232 conversion such as it is, is done by U3. This appears to be a dual digital transistor similar to Digikey part: XN0121000LCT-ND, and is the same one used in the HSR8489 servo. I do not have an actual part ID.

The circuit only switches at 5V levels, which is poor practice , but does work. One advantage is that it is easy to put another pair of transistors between the C3024 and a bluetooth module and run a 5V interface.
The RS232 conversion such as it is, is done by U3. This appears to be a dual digital transistor similar to Digikey part: XN0121000LCT-ND, and is the same one used in the HSR8489 servo. I do not have an actual part ID.

The circuit only switches at 5V levels, which is poor practice , but does work. One advantage is that it is easy to put another pair of transistors between the C3024 and a bluetooth module and run a 5V interface.
i-Bot
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1142
Joined: Wed May 17, 2006 1:00 am

Post by Ray » Sat Aug 12, 2006 4:33 pm

Post by Ray
Sat Aug 12, 2006 4:33 pm

got it ! :)

Thanks, i-Bot
got it ! :)

Thanks, i-Bot
Ray
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 230
Joined: Sun Apr 23, 2006 1:00 am
Location: HK

Post by limor » Thu Aug 17, 2006 9:56 pm

Post by limor
Thu Aug 17, 2006 9:56 pm

fleek,

Great idea!
Many RN1 and KHR owners will gladly replace their board by one you are trying to build. Please post any intermediate sketches and ideas as you may get some useful comments.
(check out also this post)

Limor
fleek,

Great idea!
Many RN1 and KHR owners will gladly replace their board by one you are trying to build. Please post any intermediate sketches and ideas as you may get some useful comments.
(check out also this post)

Limor
limor
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1845
Joined: Mon Oct 11, 2004 1:00 am
Location: London, UK

Post by fleek » Sat Aug 19, 2006 3:32 am

Post by fleek
Sat Aug 19, 2006 3:32 am

Hi all,

Now I am concentrating on development of the firmware on the BDmicro development board, this board has 6 servo connectors which is enough currently to control one group of servos in the Robonova.

I have had some successful results moving one group of servos and timing it such that the end points end at almost the same time. I have also measured the timing difference between the stock board movements vs my own firmware, I can see an speed increase of 1 - 1.5 times.

Currently, the small little firmware on the dev board is capable of calculating all the intermediate positions and executing them in unison.

Basically, I have dedicated 1 register for each servo, by loading the 6 registers with new values and calling the subroutine, the group of servos will move together within the shortest time possible.

Now I am proceeding with trying to control 16 servos at the same time. Timing is proving to be a bit tight, but I am hoping to optimize the routines such that all 16 servos can be moved together in unison and end at the same time.

Will post some codes soon.
Hi all,

Now I am concentrating on development of the firmware on the BDmicro development board, this board has 6 servo connectors which is enough currently to control one group of servos in the Robonova.

I have had some successful results moving one group of servos and timing it such that the end points end at almost the same time. I have also measured the timing difference between the stock board movements vs my own firmware, I can see an speed increase of 1 - 1.5 times.

Currently, the small little firmware on the dev board is capable of calculating all the intermediate positions and executing them in unison.

Basically, I have dedicated 1 register for each servo, by loading the 6 registers with new values and calling the subroutine, the group of servos will move together within the shortest time possible.

Now I am proceeding with trying to control 16 servos at the same time. Timing is proving to be a bit tight, but I am hoping to optimize the routines such that all 16 servos can be moved together in unison and end at the same time.

Will post some codes soon.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by fleek » Sat Aug 19, 2006 3:38 am

Post by fleek
Sat Aug 19, 2006 3:38 am

On another note, we may be able to hack the current MR3024 controller board to load a different firmware. By forcing a erase of all the firmware code on the board and setting the correct fuses for JTAG or ISP, we can load our own homebrewed firmware. Thus we may not need a new board after all.
On another note, we may be able to hack the current MR3024 controller board to load a different firmware. By forcing a erase of all the firmware code on the board and setting the correct fuses for JTAG or ISP, we can load our own homebrewed firmware. Thus we may not need a new board after all.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by fleek » Sat Aug 19, 2006 3:49 am

Post by fleek
Sat Aug 19, 2006 3:49 am

See what just arrived at the mailbox - 5 x 2-axis tilt sensors.

Image

Will be incorporating in my new firmware.
See what just arrived at the mailbox - 5 x 2-axis tilt sensors.

Image

Will be incorporating in my new firmware.
fleek
Robot Builder
Robot Builder
User avatar
Posts: 10
Joined: Sun Jul 30, 2006 1:00 am

Post by Viking » Sat Aug 19, 2006 10:50 am

Post by Viking
Sat Aug 19, 2006 10:50 am

fleek wrote:.

I have had some successful results moving one group of servos and timing it such that the end points end at almost the same time. I have also measured the timing difference between the stock board movements vs my own firmware, I can see an speed increase of 1 - 1.5 times.


I dont know if I'm way off, of what you are seeking, but if you look at the SSC-32 servo controller from lynxmotion.com it will time all 32 servoes to end at the exact time! It has many features and you can connect different micro controllers to it etc.

Some time ago I bought a SD21 controller (http://www.robot-electronics.co.uk/) and the wireless I2C connection so I can run the program directly from my laptop controlling all 21 servoes simultainusly - the timing I have to calculate my self but is straight forward.
The good thing about the SD21 is that you can attach a BasicX or Basic stamp processor directly on top of it!

Well maybe this is not what your project is about but I have in mind to rebuilt the RN - especially the legs where I want the knee part to be with 2 servoes similar to the Robo One - this will speed up the movement of the leg to double speed.
Also I would love to make RN stand up by putting his feet under his body first and then stem up like a normal person - the way he gets up now looks silly and could damage the servoes.


anyway keep up your good work - eager to see your controller board
fleek wrote:.

I have had some successful results moving one group of servos and timing it such that the end points end at almost the same time. I have also measured the timing difference between the stock board movements vs my own firmware, I can see an speed increase of 1 - 1.5 times.


I dont know if I'm way off, of what you are seeking, but if you look at the SSC-32 servo controller from lynxmotion.com it will time all 32 servoes to end at the exact time! It has many features and you can connect different micro controllers to it etc.

Some time ago I bought a SD21 controller (http://www.robot-electronics.co.uk/) and the wireless I2C connection so I can run the program directly from my laptop controlling all 21 servoes simultainusly - the timing I have to calculate my self but is straight forward.
The good thing about the SD21 is that you can attach a BasicX or Basic stamp processor directly on top of it!

Well maybe this is not what your project is about but I have in mind to rebuilt the RN - especially the legs where I want the knee part to be with 2 servoes similar to the Robo One - this will speed up the movement of the leg to double speed.
Also I would love to make RN stand up by putting his feet under his body first and then stem up like a normal person - the way he gets up now looks silly and could damage the servoes.


anyway keep up your good work - eager to see your controller board
Viking
Robot Builder
Robot Builder
User avatar
Posts: 20
Joined: Wed Jul 19, 2006 1:00 am
Location: Denmark

Post by i-Bot » Sun Aug 20, 2006 1:37 pm

Post by i-Bot
Sun Aug 20, 2006 1:37 pm

If you do remove the existing firmware, you can also replace it in the future, since the image is contained in the Robobasic executable. The thing you loose is the bootloader, and maybe the chance to get firmware updates in future .

If you extract the Atmega code from the executable, bin2hex it, then you can view it and download it from AVR studio.

I have been unable to get access to the existing boot loader on the C3024 which sits at location 0xF000
If you do remove the existing firmware, you can also replace it in the future, since the image is contained in the Robobasic executable. The thing you loose is the bootloader, and maybe the chance to get firmware updates in future .

If you extract the Atmega code from the executable, bin2hex it, then you can view it and download it from AVR studio.

I have been unable to get access to the existing boot loader on the C3024 which sits at location 0xF000
i-Bot
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1142
Joined: Wed May 17, 2006 1:00 am

Post by DanAlbert » Sun Aug 27, 2006 6:18 pm

Post by DanAlbert
Sun Aug 27, 2006 6:18 pm

Hi guys,

I wanna play too.

I hate RoboBasic witha passion.

I have an AVR JTAG ICE and am pretty good with assembly code.

Lets start cracking.

Please post any info so we don't overlap our efforts.

I plan to try the following:
1. extract the existing code. (just in case I want to reload it)
2. write a general C program to set up the hardware as it is currently wired.
3. write a serial communications protocol to talk to the board.

I'll start posting my results as soon as I get them.

Dan
Hi guys,

I wanna play too.

I hate RoboBasic witha passion.

I have an AVR JTAG ICE and am pretty good with assembly code.

Lets start cracking.

Please post any info so we don't overlap our efforts.

I plan to try the following:
1. extract the existing code. (just in case I want to reload it)
2. write a general C program to set up the hardware as it is currently wired.
3. write a serial communications protocol to talk to the board.

I'll start posting my results as soon as I get them.

Dan
DanAlbert
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 70
Joined: Fri Feb 04, 2005 1:00 am

Next
25 postsPage 1 of 21, 2
25 postsPage 1 of 21, 2