rome2_p6 imported
Dependencies: mbed
Main.cpp
- Committer:
- Appalco
- Date:
- 2018-05-18
- Revision:
- 3:09f77ebfd2e5
- Parent:
- 2:e3f6156788bf
- Child:
- 4:1c821a19876f
File content as of revision 3:09f77ebfd2e5:
/* * Main.cpp * Copyright (c) 2018, ZHAW * All rights reserved. */ #include <cstdlib> #include <mbed.h> #include "EncoderCounter.h" #include "IRSensor.h" #include "IMU.h" #include "LIDAR.h" #include "Controller.h" #include "StateMachine.h" #include "SerialServer.h" #define TOLERANCE 0.1f int main() { // create miscellaneous periphery objects float dist,angle,x_measured_r,y_measured_r, x_measured,y_measured,x,y,angle_pos; // tolerance values for tube 1 and tube 2 const float min_x1 = 0.99f - TOLERANCE; const float max_x1 = 0.99f + TOLERANCE; const float min_y1 = 0.54f - TOLERANCE; const float max_y1 = 0.54f + TOLERANCE; const float min_x2 = 2.52f - TOLERANCE; const float max_x2 = 2.52f + TOLERANCE; const float min_y2 = 0.32f - TOLERANCE; const float max_y2 = 0.32f + TOLERANCE; DigitalOut led(LED1); DigitalIn button(USER_BUTTON); DigitalOut led0(PC_8); DigitalOut led1(PC_6); DigitalOut led2(PB_12); DigitalOut led3(PA_7); DigitalOut led4(PC_0); DigitalOut led5(PC_9); // create motor control objects DigitalOut enableMotorDriver(PB_2); DigitalIn motorDriverFault(PB_14); DigitalIn motorDriverWarning(PB_15); PwmOut pwmLeft(PA_8); PwmOut pwmRight(PA_9); EncoderCounter counterLeft(PB_6, PB_7); EncoderCounter counterRight(PA_6, PC_7); // create distance sensor objects DigitalOut enableIRSensors(PC_1); enableIRSensors = 1; AnalogIn distance(PB_1); DigitalOut bit0(PH_1); DigitalOut bit1(PC_2); DigitalOut bit2(PC_3); IRSensor irSensor0(distance, bit0, bit1, bit2, 0); IRSensor irSensor1(distance, bit0, bit1, bit2, 1); IRSensor irSensor2(distance, bit0, bit1, bit2, 2); IRSensor irSensor3(distance, bit0, bit1, bit2, 3); IRSensor irSensor4(distance, bit0, bit1, bit2, 4); IRSensor irSensor5(distance, bit0, bit1, bit2, 5); // create LIDAR object PwmOut pwm(PA_10); pwm.period(0.00005f); pwm.write(0.5f); // 50% duty-cycle RawSerial uart(PA_0, PA_1); LIDAR lidar(uart); // create robot controller objects Controller controller(pwmLeft, pwmRight, counterLeft, counterRight); StateMachine stateMachine(controller, enableMotorDriver, led0, led1, led2, led3, led4, led5, button, irSensor0, irSensor1, irSensor2, irSensor3, irSensor4, irSensor5); // create serial server object RawSerial serial(PB_10, PC_5); serial.baud(9600); serial.format(8, SerialBase::None, 1); DigitalOut reset(PB_3); DigitalOut modes1(PB_4); modes1 = 0; reset = 1; wait(0.1f); reset = 0; wait(0.1f); reset = 1; wait(0.1f); SerialServer serialServer(serial, lidar, controller); printf("created new waypoint,task"); // move to waypoints TaskMoveToWaypoint taskMoveToWaypoint(controller,2,0.3,10); while (true) { led = !led; // toggle led wait(0.2f); // wait for 200 ms lidar.lookForBeacon(); dist = (float)lidar.getDistanceOfBeacon()/1000; angle = (float)lidar.getAngleOfBeacon()*3.14/180; //relatives cord if(dist!=0) { x_measured_r = distance*cos(angle); y_measured_r = distance*cos(angle); //global cord angle_pos = controller.getAlpha(); x= controller.getX(); y= controller.getY(); x_measured = cos(angle_pos)*x_measured_r-sin(angle_pos)*y_measured_r+x; y_measured = sin(angle_pos)*x_measured_r+cos(angle_pos)*y_measured_r+y; } //check if measured tube is valid with reference if(x_measured>=min_x1 && x_measured<= max_x1 && y_measured>=min_y1 && y_measured<=max_y1) { controller.correctPoseWithBeacon(0.99f,0.54f,x_measured,y_measured); //turn led on printf("found tube 1 at %f %f",x_measured,y_measured); } if(x_measured>=min_x2 && x_measured<= max_x2 && y_measured>=min_y1 && y_measured<=max_y2) { controller.correctPoseWithBeacon(2.52f,0.32f,x_measured,y_measured); printf("found tube 2 at %f %f",x_measured,y_measured); //turn led on } } }