Safe Haskell | None |
---|
A message-based control of a NXT brick via remotely executed MotorControl
program. The main goal of this approach is to achieve
better precision of motor movements as program monitors and adapts motor commands on the NXT brick itself. For example, common
motor's overshoot is thus removed in most cases.
You should download/compile MotorControl
program from http://www.mindstorms.rwth-aachen.de/trac/wiki/MotorControl and upload
it to the NXT brick with nxt-upload
program. This module will then run that program and sends it messages to control the NXT brick.
Because commands will be executed and controlled directly on the NXT brick more powerful and precise control is possible.
Please refer to original documentation of MotorControl
program for more information, description of commands and explanations
how to use them. This interface also implements static pauses between commands mentioned there and required by MotorControl
. This
means functions calls will block for this time so consider using special Haskell thread for communication with the NXT brick.
Dynamic/minimal pauses are not implemented and have to be taken care of by user of this interface.
Check Robotics.NXT.Remote for another (simpler) approach to message-based control. It would be great to one day combine
MotorControl
's precision with API (especially interruptability) of remote.nxc
.
- startMotorControlProgram :: NXT ()
- stopMotorControlProgram :: NXT ()
- controlledMotorCmd :: [OutputPort] -> OutputPower -> TachoLimit -> [MotorControlMode] -> NXT ()
- data MotorControlMode
- resetErrorCorrection :: [OutputPort] -> NXT ()
- isMotorReady :: [OutputPort] -> NXT [Bool]
- classicMotorCmd :: [OutputPort] -> OutputPower -> TachoLimit -> SpeedRegulation -> NXT ()
- type SpeedRegulation = Bool
Initialization
startMotorControlProgram :: NXT ()Source
Starts MotorControl22.rxe
program on the NXT brick. Program has to be uploaded/available on the NXT brick.
stopMotorControlProgram :: NXT ()Source
Stops current running program on the NXT brick. Probably this means MotorControl22.rxe
program on the NXT brick.
Control
controlledMotorCmd :: [OutputPort] -> OutputPower -> TachoLimit -> [MotorControlMode] -> NXT ()Source
Interface to CONTROLLED_MOTORCMD
command which takes care of precise motor movements.
Requires dynamic/minimal pauses.
data MotorControlMode Source
HoldBrake | Keeps active brake on after the end of the movement. |
SpeedRegulation | In a case of a load on the motor adapt motor power to retain the same speed. Really works only if there is room for that (not that motor is already running at the maximum power). |
SmoothStart | Smoothly starts the movement. |
resetErrorCorrection :: [OutputPort] -> NXT ()Source
Interface to RESET_ERROR_CORRECTION
command which can be used to reset the NXT brick's internal error correction mechanism (and
motor position information at the same time).
The same thing can be achieved by using resetMotorPosition
with InternalPosition
argument.
isMotorReady :: [OutputPort] -> NXT [Bool]Source
Interface to ISMOTORREADY
command which determine the state of a motor: is it currently executing a command (for example, moving)
or is it ready to accept new commands?
Implements static pauses.
classicMotorCmd :: [OutputPort] -> OutputPower -> TachoLimit -> SpeedRegulation -> NXT ()Source
Interface to CLASSIC_MOTORCMD
command which is very similar to setOutputState
but better interacts with MotorControl
.
Requires dynamic/minimal pauses.
Types
type SpeedRegulation = BoolSource
Should in a case of a load on the motor its power be adapted to retain the same speed? Really works only if there is room for that (not that motor is already running at the maximum power).