Code for autonomous rover for Sparkfun AVC. DataBus won 3rd in 2012 and the same code was used on Troubled Child, a 1986 Jeep Grand Wagoneer to win 1st in 2014.
Dependencies: mbed Watchdog SDFileSystem DigoleSerialDisp
Diff: main.cpp
- Revision:
- 2:fbc6e3cf3ed8
- Parent:
- 1:cb84b477886c
- Child:
- 3:42f3821c4e54
--- a/main.cpp Tue May 28 13:58:35 2013 +0000 +++ b/main.cpp Thu Jun 06 13:40:23 2013 +0000 @@ -55,6 +55,7 @@ #define GYRO_CHAN 5 // Chassis specific parameters +// TODO 1 put WHEEL_CIRC, WHEELBASE, and TRACK in config.txt #define WHEEL_CIRC 0.321537 // m; calibrated with 4 12.236m runs. Measured 13.125" or 0.333375m circumference #define WHEELBASE 0.290 #define TRACK 0.280 @@ -169,23 +170,31 @@ { // Let's try setting priorities... NVIC_SetPriority(TIMER3_IRQn, 0); // updater running off Ticker - NVIC_SetPriority(DMA_IRQn, 1); - NVIC_SetPriority(EINT0_IRQn, 5); // wheel encoders - NVIC_SetPriority(EINT1_IRQn, 5); // wheel encoders - NVIC_SetPriority(EINT2_IRQn, 5); // wheel encoders - NVIC_SetPriority(EINT3_IRQn, 5); // wheel encoders - NVIC_SetPriority(UART1_IRQn, 10); // GPS p25,p26 - NVIC_SetPriority(I2C0_IRQn, 20); // sensors? - NVIC_SetPriority(I2C1_IRQn, 20); // sensors? - NVIC_SetPriority(I2C2_IRQn, 20); // sensors? - NVIC_SetPriority(UART3_IRQn, 30); // LCD p17,p18 - NVIC_SetPriority(UART0_IRQn, 30); // USB - NVIC_SetPriority(ADC_IRQn, 40); // Voltage/current - NVIC_SetPriority(TIMER0_IRQn, 255); // unused(?) - NVIC_SetPriority(TIMER1_IRQn, 255); // unused(?) - NVIC_SetPriority(TIMER2_IRQn, 255); // unused(?) - NVIC_SetPriority(SPI_IRQn, 255); // uSD card, logging + NVIC_SetPriority(DMA_IRQn, 0); + NVIC_SetPriority(EINT0_IRQn, 0); // wheel encoders + NVIC_SetPriority(EINT1_IRQn, 0); // wheel encoders + NVIC_SetPriority(EINT2_IRQn, 0); // wheel encoders + NVIC_SetPriority(EINT3_IRQn, 0); // wheel encoders + NVIC_SetPriority(UART0_IRQn, 5); // USB + NVIC_SetPriority(UART1_IRQn, 10); + NVIC_SetPriority(UART2_IRQn, 10); + NVIC_SetPriority(UART3_IRQn, 10); + NVIC_SetPriority(I2C0_IRQn, 10); // sensors? + NVIC_SetPriority(I2C1_IRQn, 10); // sensors? + NVIC_SetPriority(I2C2_IRQn, 10); // sensors? + NVIC_SetPriority(ADC_IRQn, 10); // Voltage/current + NVIC_SetPriority(TIMER0_IRQn, 10); // unused(?) + NVIC_SetPriority(TIMER1_IRQn, 10); // unused(?) + NVIC_SetPriority(TIMER2_IRQn, 10); // unused(?) + NVIC_SetPriority(SPI_IRQn, 10); // uSD card, logging + // Something here is jacking up the I2C stuff + // Also when initializing with ESC powered, it causes motor to run which + // totally jacks up everything (noise?) + initSteering(); + initThrottle(); + // initFlasher(); // Initialize autonomous mode flasher + // Send data back to the PC pc.baud(115200); fprintf(stdout, "Data Bus 2013\n"); @@ -211,13 +220,6 @@ if (config.load()) // Load various configurable parameters, e.g., waypoints, declination, etc. confStatus = 1; - // Something here is jacking up the I2C stuff - // Also when initializing with ESC powered, it causes motor to run which - // totally jacks up everything (noise?) - initSteering(); - initThrottle(); - // initFlasher(); // Initialize autonomous mode flasher - sensors.Compass_Calibrate(config.magOffset, config.magScale); //pc.printf("Declination: %.1f\n", config.declination); pc.printf("Speed: escZero=%d escMax=%d top=%.1f turn=%.1f Kp=%.4f Ki=%.4f Kd=%.4f\n", @@ -313,7 +315,7 @@ display.update(s); nextUpdate = thisUpdate + 2000; // TODO move this statistic into display class - fprintf(stdout, "update time: %d\n", getUpdateTime()); + //fprintf(stdout, "update time: %d\n", getUpdateTime()); } if (keypad.pressed) { @@ -359,10 +361,9 @@ fprintf(stdout, "%d) Display AHRS\n", i++); fprintf(stdout, "%d) Mavlink mode\n", i++); fprintf(stdout, "%d) Shell\n", i++); - fprintf(stdout, "%d) Bridge serial to 2nd GPS\n", i++); fprintf(stdout, "R) Reset\n"); fprintf(stdout, "\nSelect from the above: "); - fflush(stdout); + //fflush(stdout); printMenu = false; } @@ -840,7 +841,8 @@ sensors.gps.enableVerbose(); wait(2.0); //dev = &gps; - serial.attach(NULL, Serial::RxIrq); + sensors.gps.disable(); + serial.baud(4800); while (!done) { if (pc.readable()) { x = pc.getc(); @@ -935,6 +937,8 @@ sensors.gps.latitude(), sensors.gps.longitude(), sensors.gps.heading_deg(), sensors.gps.speed_mps(), sensors.gps.hdop(), sensors.gps.sat_count(), (unsigned char) sensors.gps.getAvailable() ); + fprintf(stdout, "brg=%6.2f d=%8.4f sa=%6.2f\n", + state[inState].bearing, state[inState].distance, state[inState].steerAngle); /* fprintf(stdout, "gps2=(%.6f, %.6f, %.1f, %.1f, %.1f, %d) %02x\n", gps2.latitude(), gps2.longitude(), gps2.heading_deg(), gps2.speed_mps(), gps2.hdop(), gps2.sat_count(),