Go digital with RC hobby servos
The digital servo controller circuit I have made can be used to create a servo out of any geared-motor and potentiometer, or used to modify any regular hobby servo by replacing the circuit inside the servo. The control bus uses the popular I2C bus standard. The prototype uses a PIC16f873 and takes advantage of it's ADC, PWM and I2C peripherals.
I have completed over 20 working prototypes of the digital servo circuit replacement. These prototypes are being used in my Symapod robot and allow me to read/write to the servos as a series of registers. These registers include the actual and desired position, maximum speed and force being applied to the servo. External sensors can also be connected to the servo and addressed through the same servo interface; this allows each joint to have sensors outside of the servo casing. Servos can also be daisy-chained to make cabling shorter.
I am also an active participant in the openservo project, whose goal is to develop an open source digital servo. I encourage you to take a look and join our group discussions on the openservo forums.
Add your comment
Your First CPU
I didnt get your email address. If you like, send me an email using the "Home | Contact Me" on the top menu.
I know exactly what you are talking about. When I constructed Symapod, I didn’t care much for the jerkiness of the robot caused by the servos *rushing* to their commanded position. Something of a bezier curve interpolated motion would be prefered. Since most of the robots I planned would have a neural net that would control the output motion, I really wanted the output of the neural net to provide the command position, but the servo to respond in a *dampened* way, or really an organic way, if the neural net produced a sharp curve. The neural net would also receive feedback from the servo.
I hadn't finalized this sort of interface, it would be complex, but if the neural network was interfaced to the servo in a more higher order closed loop I figured natural motion could be realized.
Compliant motion is another matter altogether. When someone/something puts a force on a joint, do you want the joint to be compliant or fight back as hard as it can? In a blind sense, you could always have it compliant but that’s not very realistic. (One fellow robotics hobbyist just turned off one leg's servos, but continued to read its position, it then sent the position of these joints to all other legs...it looked like the robot was compliant, and cool demonstration. Easily done, but overall worthless to the robot.) I think this is a job/decision for an AI above even the motion planning neural net. It would answer the question, "is it worth fighting this force, or can I move out of the way?" To do this properly requires heuristics about the environment. On the servo end, good force measurement is necessary, and a relatively low latency connection between the high level AI and servo.
I also planned on making my next robot more loosely connected using rigid rubber body. This would reduce a lot of unnatural looking vibration as the vibrations would conduct so well. The rubber body may be drilled to be rigid in certain directions/planes but more compliant in others.
I am concentrating on my CNC machines right now. So I will then have a tool to create more complex robots.
The best thing I can suggest right now is to join the openservo.com forums and post your questions there. (One of my favorite forums.) There are many experienced engineers on there. I think there are some people working on this problem already. I know there are discussions about bezier curves and the like for command positions. The open servo is also more advanced than my superservos now.
If you post a message, let me know. Feel free to post any portion of my email if it may help get the conversation started.
Colin
I have a question for you, maybe its a silly one, but i have been searching for a solution to a problem that i find inherent in servos, i deal in very organic motion, (animatronics) and the typical on off motion of servos fails to impress me, what i need is a damping of motion to allow smoother direction changes.
imagine a graph direction over time, instead of the sharp corners of plotting i would like to see a gradient in speed like a function curve in relation to the timing of direction change.
if that at all is clear in my muddled explanation, can you help me?, or point me in the right direction.
this would settle years of searching and put a curiosity at rest.
regards
simon