Fieldsteer

From Rsewiki

Interface plug-in to dynamixel servos (one at each front wheel) and the magnetic encoders AMS 5045 on each wheel and their roll angle relative to the rear wheels. The plug-in talks to a microprocessor (teensy 2++). The firmware is in a subdirectory to this plug-in.


Read variables

encfront[3]         Magnetic encoder value for left wheel, right wheel and roll encoder
                    (14 bit value (sum of 4 12 but  values).
encfrontmagnet[3]   Magnet status: 0 all is fine , 3 is magnetic field is too week (to far away),
                    1,2 magnet is moving away or getting closer.
encfronterr[3]      Magnet error count.
steerPos[2]         Steering position for each servo (degrees*10)
steerVel[2]         Steering servo velocity - in servo units
steerLoad[2]        Steering load - motor current based - as reported by servo
steerVolt[2]        Battery voltage as reported by servo (volt x 10)
steerTemp[2]        Servo temperature in degrees celcius
steerServoComErr[2] Servo communication error count
steerServoIntRef[2] Servo position reference in unsigned int (12 bit) 
                    (mostly for debug, may be removed)
steerServoIntPos[2] Servo current position in unsigned int (12 bit) 
                    (mostly for debug, may be removed)

Write variables

Robot geometry must be defined in rhdconfig.xml

steeringangleref[1] Desired steering angle (in degrees x 10) for robot


Configuration example

Robot geometry

< !-- robot configuration (for all plugins) - in meters for the most part.
       wheelbase is distance between rear wheels
       steerbase is distance between front and rear axis
       frontbase is distance between front wheels -- >
<robot
   wheelBase = "0.35"
   steerBase = "0.39"
   frontBase = "0.35"
   tickPerRev = "2048"
   gearRatio="1"
   wheelDiameter="0.16"
/>

Servo ID for the servo on the left and right wheel are the ID set in the servo, and must be among the defined IS listed in the firmware (on teensy 2++) . The servo communication speed is define in the controller (500kbit/s)

<! -- 
steering interface
* servo values: "ID minpos centerpos maxpos"
* dev is USB interface to teency 2++ board 
* dead zone (with no movement around target position) (0..255)
* safety > joystick
* debug if 1 then errors during startup is ignored
* debugIO if is e.g. 3 then three status messages from each servo is shown after each update -- >
<dxlSteer enable="true" lib="fieldsteer.so.1" 
  critical="true" 
  safety="2"
  dev="/dev/ttyACM0"
  servoLeft ="0x04 21 527 1002"
  servoRight="0x05 21 531 1002"
  deadzone="3"
  debug="0"
  debugIO="0"
  >
 </dxlSteer>