Commit from zer0 (2008-03-27 10:55 CET)
================
Some timing optimisations
aversive_projects microb2008/extension/barrel.c 1.4
aversive_projects microb2008/extension/catapult.c 1.5
aversive_projects microb2008/extension/commands.c 1.3
aversive_projects microb2008/extension/state.c 1.4
aversive_projects microb2008/main/main.c 1.22
aversive_projects microb2008/main/main.h 1.13
aversive_projects microb2008/main/strat.c 1.5
===============================================
aversive_projects/microb2008/extension/barrel.c (1.3 -> 1.4)
===============================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: barrel.c,v 1.3 2008-03-24 17:58:19 zer0 Exp $
+ * Revision : $Id: barrel.c,v 1.4 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -274,5 +274,4 @@
catapult_goto(speed, pos);
wait_ms(150);
catapult_release();
- wait_ms(400);
}
=================================================
aversive_projects/microb2008/extension/catapult.c (1.4 -> 1.5)
=================================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: catapult.c,v 1.4 2008-03-24 23:29:12 zer0 Exp $
+ * Revision : $Id: catapult.c,v 1.5 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -34,8 +34,8 @@
#include "catapult.h"
#include "main.h"
-#define CATAPULT_ZERO_OFFSET -100
-#define CATAPULT_RELEASE_PWM -200
+#define CATAPULT_ZERO_OFFSET 0
+#define CATAPULT_RELEASE_PWM -300
void catapult_pid_init(void);
@@ -95,5 +95,7 @@
wait_ms(50);
encoders_microb_set_value(CATAPULT_ENCODER, CATAPULT_ZERO_OFFSET);
catapult_pid_init();
+ IRQ_LOCK(flags);
ext.flags |= CATAPULT_CS_ON;
+ IRQ_UNLOCK(flags);
}
=================================================
aversive_projects/microb2008/extension/commands.c (1.2 -> 1.3)
=================================================
@@ -333,9 +333,7 @@
action_servo_set(SERVO_RIGHT_EJECT_NUM,
SERVO_RIGHT_EJECT_POS_NORMAL);
}
else if (!strcmp_P(res->dst, PSTR("drop"))) {
- catapult_goto(catapult_speed, catapult_pos);
- wait_ms(200);
- catapult_release();
+ barrel_drop_shot(catapult_speed, catapult_pos);
}
}
/* function called when cmd_eject is parsed successfully */
@@ -924,9 +922,7 @@
barrel_room_to_dst(i, BARREL_OFFSET_DROP);
while(barrel_get_idx(BARREL_OFFSET_DROP) != i);
wait_ms(res->pause);
- catapult_goto(catapult_speed, catapult_pos);
- wait_ms(150);
- catapult_release();
+ barrel_drop_shot(catapult_speed, catapult_pos);
}
}
@@ -1152,9 +1148,7 @@
struct cmd_catapult_result * res = parsed_result;
if (!strcmp_P(res->subcmd, PSTR("drop"))) {
- catapult_goto(res->speed, res->pos);
- wait_ms(200);
- catapult_release();
+ barrel_drop_shot(res->speed, res->pos);
}
if (!strcmp_P(res->subcmd, PSTR("params"))) {
catapult_speed = res->speed;
==============================================
aversive_projects/microb2008/extension/state.c (1.3 -> 1.4)
==============================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: state.c,v 1.3 2008-03-24 23:29:12 zer0 Exp $
+ * Revision : $Id: state.c,v 1.4 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -84,6 +84,44 @@
return 0;
}
+static void eat_ball(uint8_t type)
+{
+ /* the color sensor sees the ball before if it's white */
+ if (type == BARREL_ROOM_WHITE)
+ wait_ms(300);
+ else
+ wait_ms(100);
+
+ roller_off();
+ barrel_in(type);
+ if (type != BARREL_ROOM_BADCOL) {
+ if (type == BARREL_ROOM_COLORED)
+ DEBUG(E_USER_ST_MACH, "%s: got colored", __FUNCTION__);
+ else
+ DEBUG(E_USER_ST_MACH, "%s: got white", __FUNCTION__);
+ index = barrel_prepare(BARREL_ROOM_EMPTY, BARREL_OFFSET_IN);
+ if (index == -1)
+ return; /* ? */
+ while(barrel_get_idx(BARREL_OFFSET_IN) != index);
+ }
+ else {
+ /* we need to eject the bad ball before doing
+ anything else */
+ DEBUG(E_USER_ST_MACH, "%s: got bad color", __FUNCTION__);
+ if (ext.eject_side == I2C_EXTENSION_PREFER_LEFT_SIDE) {
+ barrel_room_to_dst(index, BARREL_OFFSET_LEFT);
+ while (barrel_get_idx(BARREL_OFFSET_LEFT) != index);
+ barrel_drop_left();
+ }
+ else {
+ barrel_room_to_dst(index, BARREL_OFFSET_RIGHT);
+ while (barrel_get_idx(BARREL_OFFSET_RIGHT) != index);
+ barrel_drop_right();
+ }
+ }
+ arm_roller_default();
+}
+
/* pickup balls in dispensers */
static int8_t state_do_pickup(void)
{
@@ -96,9 +134,6 @@
DEBUG(E_USER_ST_MACH, "%s", __FUNCTION__);
- action_servo_set(SERVO_LEFT_ARM_NUM, SERVO_LEFT_ARM_POS_HARVEST);
- action_servo_set(SERVO_RIGHT_ARM_NUM, SERVO_RIGHT_ARM_POS_HARVEST);
-
/* prepare barrel with a free place */
index = barrel_prepare(BARREL_ROOM_EMPTY, BARREL_OFFSET_IN);
DEBUG(E_USER_ST_MACH, "%s: prepare room %d", __FUNCTION__, index);
@@ -107,6 +142,9 @@
return 1; /* huh ? */
}
+ action_servo_set(SERVO_LEFT_ARM_NUM, SERVO_LEFT_ARM_POS_HARVEST);
+ action_servo_set(SERVO_RIGHT_ARM_NUM, SERVO_RIGHT_ARM_POS_HARVEST);
+
while(barrel_get_idx(BARREL_OFFSET_IN) != index) {
if (state != I2C_EXTENSION_STATE_PICKUP)
return 0;
@@ -123,11 +161,11 @@
while(type == BARREL_ROOM_EMPTY) {
type = sensor_ball_front();
- /* reopen it every second */
- if ((time_get_us2() - us) > 1000000L) {
+ /* reopen it periodically */
+ if ((time_get_us2() - us) > 600000L) {
action_servo_set(SERVO_LEFT_ARM_NUM,
SERVO_LEFT_ARM_POS_HARVEST);
action_servo_set(SERVO_RIGHT_ARM_NUM,
SERVO_RIGHT_ARM_POS_HARVEST);
- wait_ms(500);
+ wait_ms(300);
action_servo_set(SERVO_LEFT_ARM_NUM,
SERVO_LEFT_ARM_POS_PICKUP);
action_servo_set(SERVO_RIGHT_ARM_NUM,
SERVO_RIGHT_ARM_POS_PICKUP);
us = time_get_us2();
@@ -141,37 +179,7 @@
action_servo_set(SERVO_LEFT_ARM_NUM, SERVO_LEFT_ARM_POS_HARVEST);
action_servo_set(SERVO_RIGHT_ARM_NUM, SERVO_RIGHT_ARM_POS_HARVEST);
- wait_ms(200);
-
- roller_off();
- barrel_in(type);
- if (type != BARREL_ROOM_BADCOL) {
- if (type == BARREL_ROOM_COLORED)
- DEBUG(E_USER_ST_MACH, "%s: got colored", __FUNCTION__);
- else
- DEBUG(E_USER_ST_MACH, "%s: got white", __FUNCTION__);
- index = barrel_prepare(BARREL_ROOM_EMPTY, BARREL_OFFSET_IN);
- if (index == -1)
- return 0; /* ? */
- while(barrel_get_idx(BARREL_OFFSET_IN) != index);
- }
- else {
- /* we need to eject the bad ball before doing
- anything else */
- DEBUG(E_USER_ST_MACH, "%s: got bad color", __FUNCTION__);
- if (ext.eject_side == I2C_EXTENSION_PREFER_LEFT_SIDE) {
- barrel_room_to_dst(index, BARREL_OFFSET_LEFT);
- while (barrel_get_idx(BARREL_OFFSET_LEFT) != index);
- barrel_drop_left();
- }
- else {
- barrel_room_to_dst(index, BARREL_OFFSET_RIGHT);
- while (barrel_get_idx(BARREL_OFFSET_RIGHT) != index);
- barrel_drop_right();
- }
- }
-
- arm_roller_default();
+ eat_ball(type);
return 1; /* loop when return 1 */
}
@@ -185,8 +193,6 @@
if (state != I2C_EXTENSION_STATE_HARVEST)
return 0;
- arm_roller_default();
-
/* prepare barrel with a free place */
index = barrel_prepare(BARREL_ROOM_EMPTY, BARREL_OFFSET_IN);
DEBUG(E_USER_ST_MACH, "%s: prepare room %d", __FUNCTION__, index);
@@ -196,6 +202,8 @@
return 1; /* huh ? */
}
+ arm_roller_default();
+
while(barrel_get_idx(BARREL_OFFSET_IN) != index) {
if (state != I2C_EXTENSION_STATE_HARVEST)
return 0;
@@ -211,35 +219,7 @@
return 0;
}
- wait_ms(200);
- roller_off();
- barrel_in(type);
- if (type != BARREL_ROOM_BADCOL) {
- if (type == BARREL_ROOM_COLORED)
- DEBUG(E_USER_ST_MACH, "%s: got colored", __FUNCTION__);
- else
- DEBUG(E_USER_ST_MACH, "%s: got white", __FUNCTION__);
- index = barrel_prepare(BARREL_ROOM_EMPTY, BARREL_OFFSET_IN);
- if (index == -1)
- return 0; /* ? */
- while(barrel_get_idx(BARREL_OFFSET_IN) != index);
- }
- else {
- /* we need to eject the bad ball before doing
- anything else */
- DEBUG(E_USER_ST_MACH, "%s: got bad color", __FUNCTION__);
- if (ext.eject_side == I2C_EXTENSION_PREFER_LEFT_SIDE) {
- barrel_room_to_dst(index, BARREL_OFFSET_LEFT);
- while (barrel_get_idx(BARREL_OFFSET_LEFT) != index);
- barrel_drop_left();
- }
- else {
- barrel_room_to_dst(index, BARREL_OFFSET_RIGHT);
- while (barrel_get_idx(BARREL_OFFSET_RIGHT) != index);
- barrel_drop_right();
- }
- }
- arm_roller_default();
+ eat_ball(type);
return 1; /* loop when return 1 */
}
@@ -270,16 +250,15 @@
return 0;
}
+ wait_ms(50); /* a little wait to be sure that the barrel is
+ not moving anymore */
DEBUG(E_USER_ST_MACH, "%s: prepared !", __FUNCTION__);
-
- /* exit if we changed the state */
- if (state != I2C_EXTENSION_STATE_PREPARE)
- return 0;
IRQ_LOCK(flags);
if (state == I2C_EXTENSION_STATE_PREPARE)
state = I2C_EXTENSION_STATE_DROP_READY;
IRQ_UNLOCK(flags);
+
return 0;
}
========================================
aversive_projects/microb2008/main/main.c (1.21 -> 1.22)
========================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: main.c,v 1.21 2008-03-24 23:29:13 zer0 Exp $
+ * Revision : $Id: main.c,v 1.22 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -44,6 +44,7 @@
#include <rdline.h>
#include <parse.h>
#include <obstacle_avoidance.h>
+#include <blocking_detection_manager.h>
#include "cam.h"
#include "main.h"
@@ -87,7 +88,6 @@
void do_cs(void * dummy)
{
static uint8_t cpt = 0;
- uint8_t second;
/* used for cs debugging */
static uint32_t debug_cs_cpt = 0;
@@ -145,9 +145,11 @@
bd_manage(&robot.bd_d);
}
+#if 0
if(robot.cs_events & DO_TIMER) {
+ uint8_t second;
second = time_get_s();
- if (second>= MATCH_TIME) {
+ if (second >= MATCH_TIME) {
strat_uninit();
pwm_set(LEFT_PWM, 0);
pwm_set(RIGHT_PWM, 0);
@@ -155,6 +157,7 @@
while(1);
}
}
+#endif
cpt++;
}
========================================
aversive_projects/microb2008/main/main.h (1.12 -> 1.13)
========================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: main.h,v 1.12 2008-03-24 23:29:13 zer0 Exp $
+ * Revision : $Id: main.h,v 1.13 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -35,7 +35,7 @@
//#define PROFILE
-/* XXX it is 90 don't forget it :) */
+/* it is 90 don't forget it :) */
#define MATCH_TIME 90
/* decrease track to decrease angle */
=========================================
aversive_projects/microb2008/main/strat.c (1.4 -> 1.5)
=========================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: strat.c,v 1.4 2008-03-24 23:29:13 zer0 Exp $
+ * Revision : $Id: strat.c,v 1.5 2008-03-27 09:55:49 zer0 Exp $
*
*/
@@ -38,8 +38,15 @@
#define CATAPULT_SPEED_H_DISP 200
#define CATAPULT_POS_H_DISP 8000
-static int8_t colored_v_disp_balls;
-static int8_t white_v_disp_balls;
+#define DISP_MAX_TRIES 2
+
+struct v_dispenser {
+ int8_t count;
+ uint8_t tries;
+};
+
+static struct v_dispenser colored_disp;
+static struct v_dispenser white_disp;
static uint8_t h_disp_enabled;
@@ -52,8 +59,8 @@
i2c_set_roller(1);
i2c_set_arm(I2C_EXTENSION_ARM_HARVEST);
time_reset();
- colored_v_disp_balls = 5;
- white_v_disp_balls = 5;
+ colored_disp.count = 5;
+ white_disp.count = 5;
h_disp_enabled = 0;
robot.cs_events = DO_CS | DO_RS | DO_POS | DO_BD | DO_TIMER;
}
@@ -63,6 +70,7 @@
{
i2c_set_roller(0);
i2c_set_arm(I2C_EXTENSION_ARM_INSIDE);
+ robot.cs_events &= DO_TIMER;
}
/* get static balls on the game area
@@ -75,35 +83,79 @@
return END_TRAJ;
}
-/* get balls from dispenser
- * Return values:
- * - END_TRAJ: we emptied the dispenser
- * - ERROR: Cannot finish the trajectory, some balls can
- * remain in the dispenser */
+#define PICKUP_TIMEOUT (2000000L) /* 2 seconds */
+
+/* get balls from dispenser */
+static uint8_t strat_pickup_v_disp(struct v_dispenser *disp)
+{
+ uint8_t prev_count;
+ microseconds us;
+
+ if (disp->tries >= DISP_MAX_TRIES || disp->count == 0)
+ return END_TRAJ;
+
+ disp->tries++;
+ prev_count = barrel_colored_count();
+ i2c_pickup();
+
+ /* retrieve balls */
+ us = time_get_us2();
+ while (!barrel_full()) {
+
+ /* we got a ball */
+ if (barrel_colored_count() != prev_count) {
+ us = time_get_us2(); /* reinit timeout */
+ disp->count --;
+ prev_count = barrel_colored_count();
+ }
+
+ /* no ball left */
+ if (disp->count == 0) {
+ DEBUG(E_USER_STRAT, "%s: all balls have been
retrieved");
+ return END_TRAJ;
+ }
+
+ /* cannot get any ball, ok we will try later */
+ if ((time_get_us2() - us) > PICKUP_TIMEOUT) {
+ DEBUG(E_USER_STRAT, "%s: barrel full");
+ return END_TRAJ;
+ }
+ }
+
+ DEBUG(E_USER_STRAT, "%s: barrel full");
+ return END_TRAJ;
+}
+
+/* */
static uint8_t strat_get_white_v_disp(void)
{
- if (white_v_disp_balls <= 0)
+ if (white_disp.count <= 0)
return END_TRAJ;
DEBUG(E_USER_STRAT, "%s, %d balls remaining", __FUNCTION__,
- white_v_disp_balls);
+ white_disp.count);
+
+ /* XXX check traj failures */
+ trajectory_goto_xy_abs(&robot.traj, 45, COL_COORD_Y(75));
+ wait_traj_end(END_TRAJ);
+ trajectory_a_abs(&robot.traj, COL_ANGLE(180));
+ wait_traj_end(END_TRAJ);
+ trajectory_goto_xy_abs(&robot.traj, 25, COL_COORD_Y(75));
+ wait_traj_end(END_TRAJ);
+
+ strat_pickup_v_disp(&white_disp);
+
return END_TRAJ;
}
-/* get balls from dispenser
- * Return values:
- * - END_TRAJ: we emptied the dispenser
- * - ERROR: Cannot finish the trajectory, some balls can
- * remain in the dispenser */
+/* */
static uint8_t strat_get_colored_v_disp(void)
{
- uint8_t old_count;
-
- if (colored_v_disp_balls <= 0)
+ if (colored_disp.count <= 0)
return END_TRAJ;
DEBUG(E_USER_STRAT, "%s, %d balls remaining", __FUNCTION__,
- colored_v_disp_balls);
+ colored_disp.count);
- /* XXX check errors */
+ /* XXX check traj failures */
trajectory_goto_xy_abs(&robot.traj, 70, COL_COORD_Y(45));
wait_traj_end(END_TRAJ);
trajectory_a_abs(&robot.traj, COL_ANGLE(-90));
@@ -111,15 +163,7 @@
trajectory_goto_xy_abs(&robot.traj, 70, COL_COORD_Y(25));
wait_traj_end(END_TRAJ);
- old_count = barrel_colored_count();
- i2c_pickup();
-
- /* count retrieved balls */
- /* XXX add a timeout */
-
- while (!barrel_full() &&
- (colored_v_disp_balls - (barrel_colored_count() - old_count)) !=
0);
- colored_v_disp_balls -= (barrel_colored_count() - old_count);
+ strat_pickup_v_disp(&colored_disp);
return END_TRAJ;
}
@@ -143,7 +187,6 @@
while (barrel_colored_count()) {
while(extension_state() != I2C_EXTENSION_STATE_DROP_READY);
- wait_ms(50);
i2c_drop(get_catapult_speed(distance_from_robot(300,
COL_COORD_Y(185))), 8000);
while(extension_state() != I2C_EXTENSION_STATE_HARVEST);
if (barrel_colored_count())
@@ -210,20 +253,25 @@
trajectory_set_speed(&robot.traj, 300, 300);
err = strat_get_static_balls();
- err = strat_drop_balls(1);
+ err = strat_drop_balls(1); /* ou pas force ? */
while(1) {
err = strat_get_colored_v_disp();
- err = strat_drop_balls(0);
-
- return 0; /* XXX */
+ strat_drop_balls(0);
- if (colored_v_disp_balls != 0)
+ /* si on a une chance s'y retourner sans encombres, on retente
*/
+ if (err == END_TRAJ && colored_disp.count != 0)
continue;
+ /* ici, il vaut mieux s'arranger pour ne plus avoir de
+ * balles, car ça serait con de faire plusieurs
+ * voyages */
err = strat_get_white_v_disp();
- err = strat_drop_balls(0);
- if (white_v_disp_balls != 0)
+ strat_drop_balls(0);
+
+ return 0; /* XXX */
+
+ if (white_disp.count != 0)
continue;
err = strat_enable_h_disp();
Commit from zer0 (2008-03-27 11:01 CET)
================
replace all \n by \r\n
aversive_projects microb2008/extension/main.c 1.15
aversive_projects microb2008/main/main.c 1.23
aversive_projects microb2008/sensor/commands.c 1.2
aversive_projects microb2008/sensor/main.c 1.2
=============================================
aversive_projects/microb2008/extension/main.c (1.14 -> 1.15)
=============================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: main.c,v 1.14 2008-03-24 17:58:19 zer0 Exp $
+ * Revision : $Id: main.c,v 1.15 2008-03-27 10:01:34 zer0 Exp $
*
*/
@@ -149,11 +149,11 @@
int8_t ret;
ret = parse(main_ctx, buf);
if (ret == PARSE_AMBIGUOUS)
- printf_P(PSTR("Ambiguous command\n"));
+ printf_P(PSTR("Ambiguous command\r\n"));
else if (ret == PARSE_NOMATCH)
- printf_P(PSTR("Command not found\n"));
+ printf_P(PSTR("Command not found\r\n"));
else if (ret == PARSE_BAD_ARGS)
- printf_P(PSTR("Bad arguments\n"));
+ printf_P(PSTR("Bad arguments\r\n"));
}
static int8_t
@@ -209,8 +209,8 @@
uart0_register_rx_event(emergency);
sei();
- printf_P(PSTR("\nBitte Schnell Edition 3.0" "\n"));
- printf_P(PSTR(" -- Um zu gut zu machen --\n\n"));
+ printf_P(PSTR("\r\nBitte Schnell Edition 3.0" "\r\n"));
+ printf_P(PSTR(" -- Um zu gut zu machen --\r\n\n"));
printf_P(PSTR("Init... please wait..."));
/* LOGS */
@@ -256,7 +256,7 @@
scheduler_add_periodical_event_priority(do_cs, NULL,
5000L / SCHEDULER_UNIT,
CS_PRIO);
- printf_P(PSTR("Starting state machine\n"));
+ printf_P(PSTR("Starting state machine\r\n"));
ext.logs[0] = E_USER_ST_MACH;
ext.log_level = 5;
state_harvest();
========================================
aversive_projects/microb2008/main/main.c (1.22 -> 1.23)
========================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: main.c,v 1.22 2008-03-27 09:55:49 zer0 Exp $
+ * Revision : $Id: main.c,v 1.23 2008-03-27 10:01:34 zer0 Exp $
*
*/
@@ -233,11 +233,11 @@
int8_t ret;
ret = parse(main_ctx, buf);
if (ret == PARSE_AMBIGUOUS)
- printf_P(PSTR("Ambiguous command\n"));
+ printf_P(PSTR("Ambiguous command\r\n"));
else if (ret == PARSE_NOMATCH)
- printf_P(PSTR("Command not found\n"));
+ printf_P(PSTR("Command not found\r\n"));
else if (ret == PARSE_BAD_ARGS)
- printf_P(PSTR("Bad arguments\n"));
+ printf_P(PSTR("Bad arguments\r\n"));
}
static int8_t
@@ -265,7 +265,7 @@
TCCR2 = 4;
TCNT2 = 0;
cpt = PROFILE_TIME;
- printf("%.4x\n", pc);
+ printf("%.4x\r\n", pc);
}
cpt--;
}
@@ -502,32 +502,32 @@
wait_ms(100);
//strat_uninit();
- printf_P(PSTR(" .*. .**" "\n"));
- printf_P(PSTR(" ,*. --------------------" "\n"));
- printf_P(PSTR(" .*. Microb Technology" "\n"));
- printf_P(PSTR(" .** --------------------" "\n"));
- printf_P(PSTR(" .** ***" "\n"));
- printf_P(PSTR(" ***. ***" "\n"));
- printf_P(PSTR(" .*** .,****.. ***." "\n"));
- printf_P(PSTR(" .****.*** .**,****." "\n"));
- printf_P(PSTR(" ..****,. ..****..." "\n"));
- printf_P(PSTR(" ************** **************" "\n"));
- printf_P(PSTR(" .**************** ****************." "\n"));
- printf_P(PSTR("..**. **.***** *****,,* ..***." "\n"));
- printf_P(PSTR(".* ** .**. .**, ** .**.""\n"));
- printf_P(PSTR("* .*. ..** **.. .** *.""\n"));
- printf_P(PSTR(" .** .*******. .*. .*""\n"));
- printf_P(PSTR(" .**. .*****. **. *""\n"));
- printf_P(PSTR(" **, *****..**" "\n"));
- printf_P(PSTR(" ,*******." "\n"));
- printf_P(PSTR(" .*******." "\n"));
- printf_P(PSTR(" .***.**** 2008" "\n"));
- printf_P(PSTR(" **** .****." "\n"));
- printf_P(PSTR(" .*....****** .*****.....*." "\n"));
- printf_P(PSTR(" ..**,. .:**.." "\n"));
+ printf_P(PSTR(" .*. .**" "\r\n"));
+ printf_P(PSTR(" ,*. --------------------" "\r\n"));
+ printf_P(PSTR(" .*. Microb Technology" "\r\n"));
+ printf_P(PSTR(" .** --------------------" "\r\n"));
+ printf_P(PSTR(" .** ***" "\r\n"));
+ printf_P(PSTR(" ***. ***" "\r\n"));
+ printf_P(PSTR(" .*** .,****.. ***." "\r\n"));
+ printf_P(PSTR(" .****.*** .**,****." "\r\n"));
+ printf_P(PSTR(" ..****,. ..****..." "\r\n"));
+ printf_P(PSTR(" ************** **************" "\r\n"));
+ printf_P(PSTR(" .**************** ****************." "\r\n"));
+ printf_P(PSTR("..**. **.***** *****,,* ..***." "\r\n"));
+ printf_P(PSTR(".* ** .**. .**, ** .**.""\r\n"));
+ printf_P(PSTR("* .*. ..** **.. .** *.""\r\n"));
+ printf_P(PSTR(" .** .*******. .*. .*""\r\n"));
+ printf_P(PSTR(" .**. .*****. **. *""\r\n"));
+ printf_P(PSTR(" **, *****..**" "\r\n"));
+ printf_P(PSTR(" ,*******." "\r\n"));
+ printf_P(PSTR(" .*******." "\r\n"));
+ printf_P(PSTR(" .***.**** 2008" "\r\n"));
+ printf_P(PSTR(" **** .****." "\r\n"));
+ printf_P(PSTR(" .*....****** .*****.....*." "\r\n"));
+ printf_P(PSTR(" ..**,. .:**.." "\r\n"));
- printf_P(PSTR("\nBitte Schnell Edition 3.0" "\n"));
- printf_P(PSTR(" -- Um zu gut zu machen --\n\n"));
+ printf_P(PSTR("\r\nBitte Schnell Edition 3.0" "\r\n"));
+ printf_P(PSTR(" -- Um zu gut zu machen --\r\n\n"));
rdline_init(&rdl, write_char, valid_buffer, complete_buffer);
==============================================
aversive_projects/microb2008/sensor/commands.c (1.1 -> 1.2)
==============================================
@@ -29,10 +29,10 @@
{
// struct cmd_sensor_result *res = parsed_result;
- printf_P(PSTR("Sensors state:\n"
- " %lx\n"), sensor_read());
+ printf_P(PSTR("Sensors state:\r\n"
+ " %lx\r\n"), sensor_read());
- printf_P(PSTR("PINA=%x\n"), PINA);
+ printf_P(PSTR("PINA=%x\r\n"), PINA);
}
==========================================
aversive_projects/microb2008/sensor/main.c (1.1 -> 1.2)
==========================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: main.c,v 1.1 2008-03-24 18:02:11 zer0 Exp $
+ * Revision : $Id: main.c,v 1.2 2008-03-27 10:01:34 zer0 Exp $
*
*/
@@ -85,11 +85,11 @@
int8_t ret;
ret = parse(main_ctx, buf);
if (ret == PARSE_AMBIGUOUS)
- printf_P(PSTR("Ambiguous command\n"));
+ printf_P(PSTR("Ambiguous command\r\n"));
else if (ret == PARSE_NOMATCH)
- printf_P(PSTR("Command not found\n"));
+ printf_P(PSTR("Command not found\r\n"));
else if (ret == PARSE_BAD_ARGS)
- printf_P(PSTR("Bad arguments\n"));
+ printf_P(PSTR("Bad arguments\r\n"));
}
static int8_t
@@ -118,8 +118,8 @@
uart1_register_rx_event(emergency);
sei();
- printf_P(PSTR("\nBitte Schnell Edition 3.0" "\n"));
- printf_P(PSTR(" -- Um zu gut zu machen --\n\n"));
+ printf_P(PSTR("\r\nBitte Schnell Edition 3.0" "\r\n"));
+ printf_P(PSTR(" -- Um zu gut zu machen --\r\n\n"));
/* i2c */
i2c_protocol_init();
Commit from zer0 on branch b_zer0 (2008-03-27 20:19 CET)
=================================
fix i2c:
- workaround when i2c is stucked, use i2c_reset()
- add debug
aversive modules/comm/i2c/i2c.c 1.1.2.10
aversive modules/comm/i2c/i2c.h 1.1.2.8
===============================
aversive/modules/comm/i2c/i2c.c (1.1.2.9 -> 1.1.2.10)
===============================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: i2c.c,v 1.1.2.9 2008-01-07 22:49:06 zer0 Exp $
+ * Revision : $Id: i2c.c,v 1.1.2.10 2008-03-27 19:19:33 zer0 Exp $
*
*/
@@ -34,7 +34,6 @@
#include <aversive/errno.h>
#include <i2c.h>
-
#if I2C_SEND_BUFFER_SIZE < 1
#error "I2C_SEND_BUFFER_SIZE must be at least 1"
#endif
@@ -56,7 +55,7 @@
static void (*g_send_event)(int8_t) = NULL;
static volatile i2c_mode_t g_mode = I2C_MODE_UNINIT;
-volatile uint8_t g_status = I2C_STATUS_READY;/* XXX */
+static volatile uint8_t g_status = I2C_STATUS_READY;
static volatile uint8_t g_ctrl = 0; /* ctrl flags */
static volatile uint8_t g_sync_res = 0; /* result of sync send */
@@ -70,6 +69,14 @@
static volatile uint8_t g_recv_nbytes = 0; /* number of received bytes */
static volatile uint8_t g_recv_size = 0; /* size of buffer to be received */
+#if I2C_DEBUG == 1
+#include <stdio.h>
+#include <aversive/pgmspace.h>
+static volatile uint8_t g_prev_twstatus = 0;
+static volatile uint8_t g_intr_cpt = 0;
+static volatile uint8_t g_prev_status = 0;
+static volatile uint8_t g_command = 0;
+#endif
/**
* mode is I2C_MODE_UNINIT, I2C_MODE_MASTER, I2C_MODE_MULTIMASTER or
@@ -185,7 +192,6 @@
IRQ_UNLOCK(flags);
}
-
/**
* Send a buffer. Return 0 if xmit starts correctly.
* On error, return != 0.
@@ -265,12 +271,19 @@
/* If it is sync mode, wait op_finished. Here we will reset
* the status flag to ready */
if (ctrl & I2C_CTRL_SYNC) {
- while ( (g_status & I2C_STATUS_OP_FINISHED) == 0 );
- g_status &= ~(I2C_STATUS_MASTER_XMIT |
- I2C_STATUS_MASTER_RECV |
- I2C_STATUS_SLAVE_XMIT |
- I2C_STATUS_SLAVE_RECV |
- I2C_STATUS_OP_FINISHED);
+ while ( 1 ) {
+ IRQ_LOCK(flags);
+ if (g_status & I2C_STATUS_OP_FINISHED) {
+ g_status &= ~(I2C_STATUS_MASTER_XMIT |
+ I2C_STATUS_MASTER_RECV |
+ I2C_STATUS_SLAVE_XMIT |
+ I2C_STATUS_SLAVE_RECV |
+ I2C_STATUS_OP_FINISHED);
+ break;
+ }
+ IRQ_UNLOCK(flags);
+ }
+ IRQ_UNLOCK(flags);
return g_sync_res;
}
@@ -308,6 +321,25 @@
}
/**
+ * recover from error state
+ */
+void
+i2c_reset(void)
+{
+ uint8_t flags;
+
+ IRQ_LOCK(flags);
+ TWCR = 0;
+ g_status = I2C_STATUS_READY;
+ if (g_mode == I2C_MODE_MASTER)
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE);
+ else
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE) |
+ (1<<TWSTO) | (1<<TWEA);
+ IRQ_UNLOCK(flags);
+}
+
+/**
* In slave mode, it returns error and is useless (all data is
* received trough the callback). In master mode, if dest_add is
* between 0 and 127, it will start to read the addressed slave. The
@@ -456,8 +488,21 @@
return size;
}
-
-
+#if I2C_DEBUG == 1
+void i2c_debug(void)
+{
+ printf_P(PSTR("mode=0x%x\r\n"), g_mode);
+ printf_P(PSTR("status=0x%x\r\n"), g_status);
+ printf_P(PSTR("ctrl=0x%x\r\n"), g_ctrl);
+ printf_P(PSTR("dst=%d\r\n"), g_dest);
+ printf_P(PSTR("send_nbytes=%d, send_size=%d\r\n"), g_send_nbytes,
g_send_size);
+ printf_P(PSTR("recv_nbytes=%d, recv_size=%d\r\n"), g_recv_nbytes,
g_recv_size);
+ printf_P(PSTR("prev_twstatus=0x%x\r\n"), g_prev_twstatus);
+ printf_P(PSTR("intr_cpt=%d\r\n"), g_intr_cpt);
+ printf_P(PSTR("prev_status=0x%x\r\n"), g_prev_status);
+ printf_P(PSTR("prev_command=0x%x\r\n"), g_command);
+}
+#endif
/** interrupt ********************************************************/
@@ -472,6 +517,10 @@
hard_status = TW_STATUS;
+#if I2C_DEBUG == 1
+ g_prev_twstatus = hard_status;
+ g_intr_cpt++;
+#endif
switch(hard_status) {
#ifdef CONFIG_MODULE_I2C_MASTER
@@ -504,7 +553,7 @@
g_status |= (I2C_STATUS_OP_FINISHED | I2C_STATUS_NEED_XMIT_EVT);
break;
- case TW_MT_DATA_ACK:
+ case TW_MT_DATA_ACK: /* 0x28 */
/* we transmitted data with success, send next one or
* stop condition if there is no more data */
if (g_send_nbytes >= g_send_size) {
@@ -581,6 +630,7 @@
g_send_nbytes = -2;
g_status |= I2C_STATUS_NEED_XMIT_EVT;
}
+ /* g_status |= I2C_STATUS_OP_FINISHED; */ /* ?? or not ? */
break;
#endif
@@ -588,10 +638,10 @@
/* SLAVE RECEIVER */
- case TW_SR_GCALL_ACK:
- case TW_SR_SLA_ACK:
case TW_SR_ARB_LOST_SLA_ACK:
case TW_SR_ARB_LOST_GCALL_ACK:
+ case TW_SR_GCALL_ACK:
+ case TW_SR_SLA_ACK:
/* slave is addressed (in general call or not, and
* after arbiteration lost or not) */
g_recv_nbytes = 0;
@@ -637,8 +687,8 @@
/* SLAVE TRANSMITTER */
- case TW_ST_SLA_ACK:
case TW_ST_ARB_LOST_SLA_ACK:
+ case TW_ST_SLA_ACK:
/* slave is addressed. If it is not ready, send a 0 as
* last byte. */
g_send_nbytes = 0;
@@ -682,16 +732,21 @@
/* COMMON */
case TW_BUS_ERROR:
- /* error >> send stop ?? XXX */
+ command |= (1<<TWSTO);
g_status |= I2C_STATUS_OP_FINISHED;
break;
default :
/* default ... what can we do ? */
+ g_status |= I2C_STATUS_OP_FINISHED;
break;
}
+#if I2C_DEBUG == 1
+ g_prev_status = g_status;
+#endif
+
/* transmission finished */
if (g_status & I2C_STATUS_OP_FINISHED) {
/* if it is not a synchronous op, we should be aware
@@ -735,9 +790,13 @@
}
g_status &= ~(I2C_STATUS_NEED_XMIT_EVT | I2C_STATUS_NEED_RECV_EVT);
+#if I2C_DEBUG == 1
+ g_command = command;
+#endif
+
/* if a command (repeated start) has been sent in the callback
* (by calling i2c_send() or i2c_recv(), we don't need to
* send it (we are back in MASTER_SEND or MASTER_RECV mode) */
- if (TWCR & TWINT)
+ if (TWCR & (1<<TWINT))
TWCR = command;
}
===============================
aversive/modules/comm/i2c/i2c.h (1.1.2.7 -> 1.1.2.8)
===============================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: i2c.h,v 1.1.2.7 2007-07-01 15:35:35 zer0 Exp $
+ * Revision : $Id: i2c.h,v 1.1.2.8 2008-03-27 19:19:33 zer0 Exp $
*
*/
@@ -50,6 +50,7 @@
#include <aversive.h>
#include <i2c_config.h>
+#define I2C_DEBUG 1
#define I2C_ADD_GENCALL 0x00
@@ -241,5 +242,17 @@
*/
uint8_t i2c_get_recv_buffer(uint8_t *buf, uint8_t size);
+/**
+ * recover from error states
+ */
+void i2c_reset(void);
+
+#if I2C_DEBUG == 1
+/**
+ * display debug infos
+ */
+void i2c_debug(void);
+#endif
+
#endif
Commit from zer0 on branch b_zer0 (2008-03-27 20:20 CET)
=================================
new interface for blocking detection
aversive
modules/devices/robot/blocking_detection_manager/blocking_detection_manager.c
1.1.2.2
aversive
modules/devices/robot/blocking_detection_manager/blocking_detection_manager.h
1.1.2.3
======================================================================================
aversive/modules/devices/robot/blocking_detection_manager/blocking_detection_manager.c
(1.1.2.1 -> 1.1.2.2)
======================================================================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: blocking_detection_manager.c,v 1.1.2.1 2007-12-31 16:25:00
zer0 Exp $
+ * Revision : $Id: blocking_detection_manager.c,v 1.1.2.2 2008-03-27 19:20:49
zer0 Exp $
*
* Olivier MATZ <[EMAIL PROTECTED]>
*/
@@ -38,14 +38,30 @@
}
/* thresholds */
-void bd_set_thresholds(struct blocking_detection * bd, uint32_t speed_thres,
- uint32_t err_thres, uint16_t cpt_thres)
+void bd_set_speed_err_thresholds(struct blocking_detection * bd, uint32_t
speed_thres,
+ uint32_t err_thres, uint16_t cpt_thres)
{
uint8_t flags;
IRQ_LOCK(flags);
bd->speed_thres = speed_thres;
bd->err_thres = err_thres;
- bd->cpt_thres = cpt_thres;
+ bd->cpt1_thres = cpt_thres;
+ bd->cpt1 = 0;
+ IRQ_UNLOCK(flags);
+}
+
+/* thresholds */
+void bd_set_current_thresholds(struct blocking_detection * bd,
+ int32_t k1, int32_t k2,
+ uint32_t i_thres, uint16_t cpt_thres)
+{
+ uint8_t flags;
+ IRQ_LOCK(flags);
+ bd->k1 = k1;
+ bd->k2 = k2;
+ bd->i_thres = i_thres;
+ bd->cpt2_thres = cpt_thres;
+ bd->cpt2 = 0;
IRQ_UNLOCK(flags);
}
@@ -54,34 +70,67 @@
{
uint8_t flags;
IRQ_LOCK(flags);
- bd->cpt = 0;
+ bd->cpt1 = 0;
+ bd->cpt2 = 0;
IRQ_UNLOCK(flags);
}
/** function to be called periodically */
void bd_manage(struct blocking_detection * bd)
{
- int32_t err;
+ int32_t err=0;
int32_t pos;
+ int32_t cmd;
+ int32_t i=0;
+ int32_t speed;
+
+ static uint8_t a=0;
- err = cs_get_error(bd->cs);
pos = cs_get_filtered_feedback(bd->cs);
+ speed = (pos - bd->prev_pos);
- if ( (ABS(err) > bd->err_thres &&
- ABS(pos - bd->prev_pos) < bd->speed_thres)) {
+ /* if blocking detection enabled */
+ if ( bd->cpt1_thres ) {
+ err = cs_get_error(bd->cs);
+ if ((ABS(err) > bd->err_thres &&
+ ABS(speed) < bd->speed_thres)) {
+ if (bd->cpt1 == bd->cpt1_thres - 1)
+ DEBUG(E_BLOCKING_DETECTION_MANAGER,
+ "A: err=%ld speed=%ld",
+ ABS(err), ABS(speed));
+
+ if(bd->cpt1 < bd->cpt1_thres)
+ bd->cpt1++;
+ }
+ else {
+ bd->cpt2=0;
+ }
+ }
- if (bd->cpt == bd->cpt_thres - 1)
- DEBUG(E_BLOCKING_DETECTION_MANAGER, "err=%ld speed=%ld",
- ABS(err), ABS(pos - bd->prev_pos));
- if(bd->cpt < bd->cpt_thres)
- bd->cpt++;
- }
- else {
- bd->cpt=0;
+ /* if current-based blocking_detection enabled */
+ if ( bd->cpt2_thres ) {
+ cmd = cs_get_out(bd->cs);
+ i = bd->k1 * cmd - bd->k2*speed;
+ if (ABS(i) > bd->i_thres) {
+ if (bd->cpt2 == bd->cpt2_thres - 1)
+ DEBUG(E_BLOCKING_DETECTION_MANAGER,
+ "A: i=%ld", i);
+ if(bd->cpt2 < bd->cpt2_thres)
+ bd->cpt2++;
+ }
+ else {
+ bd->cpt2=0;
+ }
}
+ if (a++ == 0)
+ DEBUG(E_BLOCKING_DETECTION_MANAGER,
+ "test err=%ld speed=%ld i=%ld",
+ ABS(err), ABS(speed), i);
+
bd->prev_pos = pos;
+ bd->speed = speed;
}
/** get value of blocking detection */
@@ -89,7 +138,8 @@
{
uint8_t ret, flags;
IRQ_LOCK(flags);
- ret = bd->cpt == bd->cpt_thres;
+ ret = (bd->cpt1 && (bd->cpt1 == bd->cpt1_thres)) ||
+ ( bd->cpt2 && (bd->cpt2 == bd->cpt2_thres));
IRQ_UNLOCK(flags);
return ret;
}
======================================================================================
aversive/modules/devices/robot/blocking_detection_manager/blocking_detection_manager.h
(1.1.2.2 -> 1.1.2.3)
======================================================================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: blocking_detection_manager.h,v 1.1.2.2 2008-01-09 22:27:45
zer0 Exp $
+ * Revision : $Id: blocking_detection_manager.h,v 1.1.2.3 2008-03-27 19:20:49
zer0 Exp $
*
* Olivier MATZ <[EMAIL PROTECTED]>
*/
@@ -24,28 +24,50 @@
#include <control_system_manager.h>
-/* detect blocking : if the speed is below a threshold and the error
- * is below another threshold during n tests, trigger the blocking
- * detection. */
+/* detect blocking :
+ *
+ * 1/ if the speed is below a threshold and the error is above another
+ * threshold during n tests, trigger the blocking detection.
+ *
+ * 2/ based on motor current. if the current in the motor is a above a
+ * threshold suring n tests, trigger the blocking detection.
+ * We suppose that i = k1.V - k2.w
+ * (V is the voltage applied on the motor, and w the current speed
+ * of the motor)
+ */
struct blocking_detection {
struct cs *cs;
uint32_t speed_thres;
uint32_t err_thres;
- uint16_t cpt_thres;
+ uint16_t cpt1_thres;
+ uint16_t cpt1;
+
+ uint32_t i_thres;
+ int32_t k1;
+ int32_t k2;
+ uint16_t cpt2_thres;
+ uint16_t cpt2;
+
int32_t prev_pos;
- uint16_t cpt;
+ int32_t speed;
};
/** init module, give the cs as parameter */
void bd_init(struct blocking_detection * bd, struct cs *cs);
/** thresholds. Be carreful, speed threshold depends on the period of
- * bd_manage() call */
-void bd_set_thresholds(struct blocking_detection * bd,
+ * bd_manage() call. If cpt_thres is 0, disable it. */
+void bd_set_speed_err_thresholds(struct blocking_detection * bd,
uint32_t speed_thres, uint32_t err_thres, uint16_t
cpt_thres);
-/** reset current blocking */
+/* thresholds for current-based blocking detection. If cpt_thres
+ * is 0, disable it. */
+void bd_set_current_thresholds(struct blocking_detection * bd,
+ int32_t k1, int32_t k2,
+ uint32_t i_thres, uint16_t cpt_thres);
+
+/** reset the blocking */
void bd_reset(struct blocking_detection * bd);
/** function to be called periodically */
Commit from zer0 on branch b_zer0 (2008-03-27 20:22 CET)
=================================
add a func trajectory manager turn_to_behind
aversive modules/devices/robot/trajectory_manager/trajectory_manager.c
1.4.4.8
aversive modules/devices/robot/trajectory_manager/trajectory_manager.h
1.4.4.6
======================================================================
aversive/modules/devices/robot/trajectory_manager/trajectory_manager.c
(1.4.4.7 -> 1.4.4.8)
======================================================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: trajectory_manager.c,v 1.4.4.7 2007-12-31 16:25:01 zer0
Exp $
+ * Revision : $Id: trajectory_manager.c,v 1.4.4.8 2008-03-27 19:22:19 zer0
Exp $
*
*/
@@ -302,7 +302,22 @@
traj->state = RUNNING_A;
DEBUG(E_TRAJECTORY, "Goto Turn To xy %f %f", x_abs_cm, y_abs_cm);
- __trajectory_goto_d_a_rel(traj, 0, simple_modulo_2pi(atan2(y_abs_cm -
posy, x_abs_cm - posx) - posa),
+ __trajectory_goto_d_a_rel(traj, 0,
+ simple_modulo_2pi(atan2(y_abs_cm - posy, x_abs_cm -
posx) - posa),
+ UPDATE_A | UPDATE_D | RESET_D);
+}
+
+/** turn the robot until the point x,y is behind us */
+void trajectory_turnto_xy_behind(struct trajectory* traj, double x_abs_cm,
double y_abs_cm)
+{
+ double posx = position_get_x_double(traj->position);
+ double posy = position_get_y_double(traj->position);
+ double posa = position_get_a_rad_double(traj->position);
+
+ traj->state = RUNNING_A;
+ DEBUG(E_TRAJECTORY, "Goto Turn To xy %f %f", x_abs_cm, y_abs_cm);
+ __trajectory_goto_d_a_rel(traj, 0,
+ modulo_2pi(atan2(y_abs_cm - posy, x_abs_cm - posx) -
posa + M_PI),
UPDATE_A | UPDATE_D | RESET_D);
}
======================================================================
aversive/modules/devices/robot/trajectory_manager/trajectory_manager.h
(1.4.4.5 -> 1.4.4.6)
======================================================================
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: trajectory_manager.h,v 1.4.4.5 2007-12-31 16:25:01 zer0
Exp $
+ * Revision : $Id: trajectory_manager.h,v 1.4.4.6 2008-03-27 19:22:19 zer0
Exp $
*
*/
@@ -124,6 +124,9 @@
/** turn the robot until the point x,y is in front of us */
void trajectory_turnto_xy(struct trajectory* traj, double x_abs_cm, double
y_abs_cm);
+/** turn the robot until the point x,y is behind us */
+void trajectory_turnto_xy_behind(struct trajectory* traj, double x_abs_cm,
double y_abs_cm);
+
/** update angle consign without changing distance consign */
void trajectory_only_a_rel(struct trajectory * traj, double a_deg);
Commit from zer0 on branch b_zer0 (2008-03-27 20:22 CET)
=================================
don't forget to put this in config.
aversive modules/devices/robot/obstacle_avoidance/obstacle_avoidance.h
1.1.2.2
======================================================================
aversive/modules/devices/robot/obstacle_avoidance/obstacle_avoidance.h
(1.1.2.1 -> 1.1.2.2)
======================================================================
@@ -15,12 +15,13 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: obstacle_avoidance.h,v 1.1.2.1 2007-12-31 16:25:00 zer0
Exp $
+ * Revision : $Id: obstacle_avoidance.h,v 1.1.2.2 2008-03-27 19:22:43 zer0
Exp $
*
* Fabrice DESCLAUX <[EMAIL PROTECTED]>
* Olivier MATZ <[EMAIL PROTECTED]>
*/
+/* XXX this should be set in obstacle_avoidance_config.h !! */
#define MAX_POLY 3
#define MAX_PTS 10
#define MAX_RAYS 100
Commit from zer0 on branch b_zer0 (2008-03-27 20:23 CET)
=================================
Use \r\n instead of \n
aversive modules/ihm/rdline/rdline.c 1.1.2.8
====================================
aversive/modules/ihm/rdline/rdline.c (1.1.2.7 -> 1.1.2.8)
====================================
@@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Revision : $Id: rdline.c,v 1.1.2.7 2008-01-05 22:46:27 zer0 Exp $
+ * Revision : $Id: rdline.c,v 1.1.2.8 2008-03-27 19:23:28 zer0 Exp $
*
*
*/
@@ -345,12 +345,12 @@
}
/* choice */
- rdl->write_char('\n');
+ rdline_puts_P(rdl, PSTR("\r\n"));
while (ret) {
rdl->write_char(' ');
for (i=0 ; tmp_buf[i] ; i++)
rdl->write_char(tmp_buf[i]);
- rdl->write_char('\n');
+ rdline_puts_P(rdl, PSTR("\r\n"));
ret = rdl->complete(rdl->left_buf,
tmp_buf,
sizeof(tmp_buf),
&complete_state);
}
_______________________________________________
Avr-list mailing list
[email protected]
CVSWEB : http://cvsweb.droids-corp.org/cgi-bin/viewcvs.cgi/aversive
WIKI : http://wiki.droids-corp.org/index.php/Aversive
DOXYGEN : http://zer0.droids-corp.org/doxygen_aversive/html/
BUGZILLA : http://bugzilla.droids-corp.org
COMMIT LOGS : http://zer0.droids-corp.org/aversive_commitlog