summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/radar.c
diff options
context:
space:
mode:
authorNicolas Schodet2010-04-13 23:39:31 +0200
committerNicolas Schodet2010-04-13 23:39:31 +0200
commit442a4e4da3699c6ea6390512bf67276c30a9e4ba (patch)
tree282cbfe0de44359fa7537ccf28d8bd123962dbb7 /digital/io/src/radar.c
parent2d84fb9a861fc12c2af2da35e22dbf30d9dc206e (diff)
digital/io/src: reduce blocking rectangle when near destination, refs #129
Diffstat (limited to 'digital/io/src/radar.c')
-rw-r--r--digital/io/src/radar.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/digital/io/src/radar.c b/digital/io/src/radar.c
index 0d3611dc..31da7c58 100644
--- a/digital/io/src/radar.c
+++ b/digital/io/src/radar.c
@@ -154,10 +154,17 @@ radar_blocking (const vect_t *robot_pos, const vect_t *dest_pos,
/* If destination is realy near, stop here. */
if (d < RADAR_EPSILON_MM)
return 0;
+ /* If destination is near, use clearance to destination point instead of
+ * stop length. */
+ uint16_t length;
+ if (d < RADAR_STOP_MM - RADAR_CLEARANCE_MM)
+ length = d + BOT_SIZE_FRONT + RADAR_CLEARANCE_MM
+ + RADAR_OBSTACLE_RADIUS_MM;
+ else
+ length = BOT_SIZE_FRONT + RADAR_STOP_MM + RADAR_OBSTACLE_RADIUS_MM;
/* To save divisions, multiply limits by vd (and vdn) length. */
vect_t vdn = vd; vect_normal (&vdn);
- int32_t limit = (uint32_t) d * (BOT_SIZE_FRONT + RADAR_STOP_MM
- + RADAR_OBSTACLE_RADIUS_MM);
+ int32_t limit = (uint32_t) d * length;
int32_t limitn = (uint32_t) d * (BOT_SIZE_SIDE + RADAR_CLEARANCE_MM
+ RADAR_OBSTACLE_RADIUS_MM);
/* Now, look at obstacles. */