[Robotgroup] Divide and Conquer!

Vern Graner vern at txis.com
Thu Sep 13 15:59:07 PDT 2007


Mark Hinkle wrote:

Heh. :) Glad to find a fellow fan of this bot! :)

>    Jon, there are a lot of questions that will need to be addressed
>    regarding the protocol with such distributed processing structure.
>    For example: you built Odex-1 and you want Odex to lift its leg. How
>    far? For how long? What do you do if it cannot lift or lower its leg?
>    How do you know it cannot? How will you synchronize the legs for
>    "walking"? How fast? What direction? How far? Standing? The legs also
>    have pivot angles. How will you specify that in relation to the
>    generic tasks you will assign?

I don't claim (at all!) to be an expert in this regard (talk to Glenn of 
The Robot Brain fame for real expertise), but it seems the example 
questions you posed above above are not really where sub processing 
comes into play.

For example, in most of the hex crawlers (crust crawler, lynx motion 
etc), the sub processor (serial servo controller) is *only* responsible 
for accepting instructions and sending (and maintaining) corresponding 
signals to the servo motor. This relieves the main processor of the 
burden of calculating and generating the servo signals on the correct 
intervals to maintain position.

A sub processor in a distributed computing robotic control system would 
shoulder the burden of low-level processes such as keeping track of the 
health of the system (POST/DIAGS), how many steps a stepper motor has 
gone, whether or not a limit switch has been struck, whether or not a 
current limit has been exceeded, whether the moving part is in its 
commanded position etc.

This would free the main processor to do high level functions i.e. 
computing the walking gait, determining orientation and direction of 
movement, making decisions on path/target. It then issues "higher" level 
commands such as "go to position <x>" and leaves the pulsing, 
monitoring, counting and sensing to the subprocess. The main processor 
could then poll the subprocess for status to see if the instructions 
have been carried out.

As a hypothetical, lets say the main process gives a "go to position 
<x>" command. It then waits for an "ACK" or a "NAK". -- If the main 
process gets an "ACK", then it knows all is well and continues to 
process high level routines. If, on the other hand, it gets a NAK it can 
take additional measures such as sending a "status" query to the sub 
processor (position, health, diags etc), and choosing to branch to an 
error handling routine where it could choose different paths such as 
resending the command to the sub-processor or chosing a different "walk" 
gait that skips that leg.

Based on the result from the sub-processor the main processor could even 
exit error handler routine routine with a "leg is failed" result and 
initiate a recover process when an emergency "fail" subroutine could 
instruct the sub processor to retract the leg or perform some type of 
"get out of the way" routine i.e. trigger a solenoid that releases a 
spring that forcibly retracts the leg so it doesn't "trip" the remaining 
good legs.

The neat thing is that the complexity I've outlined above would have 
been next to impossible for a hobbyist to afford using only 1980's 
processor technology but should well in reach using some off the shelf 
hobbyist microcontrollers available today. :)

Dang. I really want to build an odex1! :) It would be sooooo cool! :D

Vern


-- 
Vern Graner CNE/CNA/SSE    | "If the network is down, then you're
Senior Systems Engineer    | obviously incompetent so why are we
Texas Information Services | paying you? Of course, if the network
http://www.txis.com        | is up, then we obviously don't need
Austin Office 512 328-8947 | you, so why are we paying you?" İVLG


More information about the Robotgroup mailing list