Hey Jim,

On 6/22/07, Jim van Gulik <[EMAIL PROTECTED]> wrote:
> Is there any way I can precisely control the motors when controlling the NXT
> via Bluetooth, so a 360 degree rotation will exactly be 360 degrees?

I don't know about NXJ precisely, but the motors all have tacho
feedback that lets the OS track the position of the motors. Given
that, it is possible to implement a feedback control loop to precisely
control the position of the motors.

For my own OS I implemented a PID control loop (
http://en.wikipedia.org/wiki/PID_controller ), which slaves the motor
position to a given setpoint input. I wanted exactly the same thing as
you: "when I say 360 degrees, I really do mean 360, not 354 or 376".

After calibration of the loop (working out the coefficients), I could
control the motor position very precisely. See
http://natulte.net/pid-pi-bordel.png ; green is the setpoint; blue the
motor drive output (-100 through 100); purple the actual angular
position of the motor. Horizontal axis is time in milliseconds;
vertical axis is angle in degrees).

For your arm, I would implement the same control loop in the onboard
logic of your NXT, then use bluetooth to change the setpoint input.
You could also implement the control loop on your computer and just
send motor outputs and tacho feedback over bluetooth, but a PID loop
requires running fairly frequently (the loop that produced the above
graph runs every 10ms), and is a little intolerant to lag (requires a
different calibration, and probably will reach the setpoint slower).

Another tip: while the motor's position feedback is supposedly precise
to within 1 degree, the motor output isn't. I haven't pushed it to its
limits yet, but the 90 degree rotation you can see in the graph
already feels like it's getting close to the precision limits of the
motor outputs. Therefore, if you want to be able to go from 0deg to
1deg, I'd recommend having more reduction stages, and adjusting the
setpoints accordingly (eg. 1440deg motor rotation for 360deg of arm
rotation). If you want to have precise positioning, but can stand
having to configure a setpoint that is at least X degrees away from
the current position, you can get away with hooking the motor up
directly, the PID controller would do the rest properly.

Finally, I highly recommend reading
http://www.embedded.com/2000/0010/0010feat3.htm if you don't know
about PID control loops. That article is very well done, with a
discussion of the function and side-effects of all the stages of a PID
controller, with various examples to match.

Hope that helps a little,
- Dave

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Lejos-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lejos-discussion

Reply via email to