Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 5:bc42c03f2a23
- Parent:
- 4:256f2cbe3fdd
- Child:
- 6:59fbbeaac2af
diff -r 256f2cbe3fdd -r bc42c03f2a23 main.cpp
--- a/main.cpp Thu May 06 16:03:09 2021 +0000
+++ b/main.cpp Fri May 07 14:58:46 2021 +0000
@@ -5,10 +5,13 @@
#include "Robot.h"
#include "Communication.h"
#include "Functions.h"
+#include "math.h"
#include <stdlib.h>
#include <stdio.h>
+#define PI 3.1415926535
+
Serial pc(SERIAL_TX, SERIAL_RX);
RPLidar lidar;
BufferedSerial se_lidar(PA_9, PA_10);
@@ -17,103 +20,86 @@
int main()
{
- float odomX, odomY, odomTheta;
- struct RPLidarMeasurement data;
-
pc.baud(115200);
init_communication(&pc);
- pc.printf("Program started.\n\r");
+
+ DigitalIn UserButton(USER_BUTTON); // Initialize Button
+ DigitalOut myled(LED1); // Initialize LED
+
+ //float odomX, odomY, odomTheta;
+ struct RPLidarMeasurement data;
// Lidar initialization
rplidar_motor.period(0.001f);
- rplidar_motor.write(0.5f);
+ //rplidar_motor.write(0.5f);
lidar.begin(se_lidar);
lidar.setAngle(0,360);
float pose[3] = {20,20,0}; // Ponto Inicial
- //int** pointsVec; // ponteiro duplo para a tabela dimensional que guarda os valores da funcao bresenham
float LidarP[2]; // pontos na plataforma
float LidarW[2]; // pontos no mundo
- float MapaLog[40][40] = {0};
+ float MapaLog[40][40];
+ for(int i = 0; i < 40; i++)
+ for(int j = 0; j < 40; j++)
+ MapaLog[i][j] = 0;
+
float Mapa40[40][40];
- float R_WP[3][3]= {{cos(pose[2]), -sin(pose[2]), pose[0]},// matriz rotacao world plataforma
+
+ // matriz rotacao world plataforma
+ float R_WP[3][3]= {{cos(pose[2]), -sin(pose[2]), pose[0]},
{sin(pose[2]), cos(pose[2]), pose[1]},
{0, 0, 1}};
- int dim; // guarda a dimensao (numero de linhas) de pointsVec
+ setSpeeds(0,0);
+
+ int leituras = 0;
+
+ pc.printf("waiting...\n\r");
+
+ int start = 0;
+ while(start != 1) {
+ myled=1;
+ if (UserButton == 0) { // Button is pressed
+ myled = 0;
+ start = 1;
+ rplidar_motor.write(0.5f);
+ }
+ }
+
+ lidar.startThreadScan();
pc.printf("Program started.\n\r");
- //lidar.startThreadScan();
-
- setSpeeds(0,0);
-
- float dist = 10;
- float angle = 0;
-
- //while(1){
- //if(lidar.pollSensorData(&data) == 0)
- //{
- //pc.printf("%f\t%f\n\r", data.distance, data.angle); // Prints one lidar measurement.
+ while(1){
+ if(lidar.pollSensorData(&data) == 0)
+ {
+ if(leituras == 100){
+ break;
+ }
+ pc.printf("%f\t%f\n\r", data.distance, data.angle); // Prints one lidar measurement.
- //radians = ( data.angle * pi ) / 180;
+ float radians = (data.angle * PI)/180.0;
- //LidarP[0] = -data.distance*cos(radians)- 2.8f;
- //LidarP[1] = -data.distance*sin(radians)- 1.5f;
- LidarP[0] = -dist*cos(angle)- 2.8f;
- LidarP[1] = -dist*sin(angle)- 1.5f;
+ LidarP[0] = -data.distance*cos(radians)- 2.8f;
+ LidarP[1] = -data.distance*sin(radians)- 1.5f;
//W_P = R_WP * p_P
LidarW[0] = LidarP[0]* R_WP[0][0] + LidarP[1]* R_WP[0][1] + R_WP[0][2]; // coordenadas no mundo, ou seja, cm
LidarW[1] = LidarP[0]* R_WP[1][0] + LidarP[1]* R_WP[1][1] + R_WP[1][2];
// pontos onde o feixe passou
- pointsVec = bresenham(pose[0], pose[1], LidarW[0], LidarW[1], &dim);
-
- for(int i=0; i<dim; i++){
- pc.printf("%d, %d\n", pointsVec[i][0], pointsVec[i][1]);
- }
-
+ bresenham(pose[0], pose[1], LidarW[0], LidarW[1], MapaLog, data.distance);
- /* para estes valores o resultado é o seguinte
- dist: 10.000000 angle: 0.000000
-
- dim: 13
- 19, 20
- 18, 20
- 17, 20
- 16, 20
- 15, 19
- 14, 19
- 13, 19
- 12, 19
- 11, 19
- 10, 19
- 9, 19
- 8, 19
- 7, 18*/
-
- // Mapear mapa do Logaritmo
- //Mapping(MapaLog, pose[0], pose[1], pointsVec, data.distance, dim);
-
- /* //libertar espaco da variavel pointsVec
- for (int h = 0; h < height; h++){
- delete [] pointsVec[h];
- }
- delete [] pointsVec;
- pointsVec = 0;*/
-
- //}
-
- //}
+ leituras++;
+ }
+ }
// Converter o logaritmo para o mapa 40
-
for(int i=0; i<40; i++){
for(int j=0; j<40; j++){
Mapa40[j][i] = 1 - 1/(1+exp(MapaLog[j][i]));
//printf("%.2f\n", 1 - 1/(1+exp(MapaLog[i][j])));
- send_map(Mapa40[j][i]); // envia linha em linha
+ send_map(Mapa40[j][i]); // envia linha em linha (j i)
}
}