Regbot calibration

From Rsewiki
Revision as of 17:39, 24 May 2019 by Jca (Talk | contribs)

Jump to: navigation, search

Contents

Calibration

In the REGBOt GUI, the "robot" pane has the basic configuration

Gui-robot.png

Figure 1. Basic robot settings.

  • "Base WB [m]" is the distance between driving wheels. This is important for heading calculation and turning.
  • "gear N" is gear reduction - normally 9.68
  • "pulses per rev" is encoder configuration - number of pulses for one motor revolution - normally 48.
  • "wheel radius" is important for distance calculation, and a bit for velocity and turning.
  • "COG tilt offset" Center of Gravity tilt offset is important when keeping balance, should be adjusted, so that "tilt" (lower right) is 0, when in balance (hand held), if not, then add tilt value to "COG tilt offset". Accuracy should be about 0.01 radian (0.5 degree).

To change, press "edit", do the change and press "save" - and to be permanent after a reboot press "save to flash"

Gyro

The gyro is primarily used when in balance, but could be usefull for turning as well. The gyro has an offset, that can be calibrated away.

Gui-imu.png

Figure 2. Gyro calibration. The lower left graph are the gyro values, when tha calibration values are implemented. The lower right graph is the accelerometer (raw) values - no calibration offered here. The top right graph is the tilt angle - a combination of gyro and acceleromerter values (complementary filter).

  • To calibrate, make sure the robot is steady (no movement, no touch) then click the "calibrate" on the "IMU" pane. This will average the values over 1s and use as an offset.
  • after this the 3 gyro values should have zero mean.

Encoder

Encoder calibration attempt to compensate for the uneven sized magnets in the magnetic encoder.

Gui-encoder.png

Figure 3. Calibration the encoder. The graph shows for all 48 encoder tics the time between the tics at constant velocity. Ideally it should be a straight line.

  • To calibrate tick both "Get raw data regulary" and "Run motor at 3V" (wheels away from floor).

This will show some rather uneven lines in the plot.

  • press the "Do calibration" button, once the velocity is stable.

This should make the calibrated lines more straight.

  • Tick also the "Use calibration" (to the right) to use the calibrated values. If this is ticked and the calibration is out of sync, then it probably is worse than no calibration.
  • NB! the calibration will only work as long as all encoder tics are counted, i.e. not after a reboot.


Edge

Edge (or line) detector for tape lines.

Gui-edge.png

Figure 4. Calibration line sensor.

Function

The sensor use blinking LEDs - on in 0.5ms and off in 0.5ms - the detected difference is converted to a value between 0 (black) and 4096 (high refection). The censor has automatic offset and is fairly linear within a wide range of ambient illumination.

Direct sunlight will in most cases saturate the sensor.

LED illumination with a blink frequency close to 1 kHz will disturb the sensor.

Turn on

Turn on line sensor by ticking the "on" field.

Select "White line" - system is never tested on a black line (may/2019).

High power and tilt compensate should only be used when regot is in balance.

To change, pres first the edit button, and when finished press the apply button (followed by the "save to flash" to make sure it stays after a reboot.

Edge sensor calibration

Place the robot so that the illuminated area is on the white part of the (tape) line, and the robot is in its normal configuration (i.e. all wheels on the ground).

The bars should be more than half filled and not saturated, and flickering slightly. Now, press the "calibrate on white", then the new calibration values will be shown for all 8 sensors.

Lift the robot, so that the sensor sees nothing and press "reflection on black".

Again press "apply" and "save to flash" to save.

test edge

Place the robot so that the left side of sensor sees the white tape and the right side do not.

The Line valid count should increase fast to 20 (the counter increase or decrease by one dependent on detection or not of a white area (white is about 80% or more of the calibrated white value). So 20 means that a line is detected in (at least) 20 ms.

One missed detection will decrease the count to 19, so a line valid test of maybe 15 should give a reliable measure of a valid line. But a value 15 will means the line has been present for at least 15ms.

White all the way to the left side of sensor yields -3 for the left edge, i.e. the robot (sensor) centerline is -3 cm to the left (3 cm to the right) of the left edge.

The right edge should show about 0, i.e. the robot center line is just above the right edge.

The part of the surface that is not the white line should have no more than 80% of the reflection of the white line (at the color of the LED).

Crossing detect

The crossing detect (Crossing det.) value basically based on the measured width of the tape.

If the robot is centered on the one edge, and the tape is more than 3cm wide, then the measured width is 3cm. If the crossing detect threshold is 3 (cm), then it is likely that it will detect it as a crossing line. If the threshold is 5, then a crossing threshold should not be detected.

There is 2 modifiers to this scheme.

  • 1. If the width increases with movement, then the increase over the last 2mm of movement will be added to the sensed width.

This means that when approaching a crossing line at an angle, then the triggering of crossing line will be faster. This feature is especially important as there otherwise would be a tendency for the robot to follow the crossing line, or turn a bit in that direction.

Code is like this, with kd = 10 and edgePos2mm is the edge position 2mm ago: 
vl = lsLeftSide + (lsLeftSide - edgePos2mm[0]) * kd;
vr = lsRightSide + (lsRightSide - edgePos2mm[1]) * kd;
  • 2. If the robot turns (rotates), then the effect in modifier 1 could easily trigger a crossing. To eliminate that the gyro signal around the vertical axis is used to counteract (z axis on REGBOT and x axis on ROBOBOT (on default mounting)).
Code is like this (findCrossingLineVal is the total width before applying the threshold):
const float kg = 0.0005;
// on ROBOBOT z-axis is gyro x, on REGBOT it is z, so add the two
findCrossingLineVal = vr - vl - fabsf(imuGyro[2] + imuGyro[0]) * kg;

If crossing is detected the crossing count increases up to 20, and decreases down to 0 if not.

On figure 4, the threshold is 6.5, i.e. larger than the sensor width, it will then be triggered on fast approach to a line only. A crossing value of 4.5 is often a good value.

Crossing effect on control

When crossing line count is > 0 (i.e. at least one crossing detected), then the line follow control will be disabled (the robot will go straight).

Swap and width

Swap changes the sign of the edge position to allow the sensor to be rotated 180 degrees on the robot.

The width setting is not used.

IR distance

The 2 distance sensors need calibration too.

Gui-ir-2.png

Figure 5. Calibration of the IR sensor.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox