1
0
Fork 0
mirror of https://github.com/RobotechLille/cdf2018-principal synced 2024-11-21 23:56:04 +01:00

Travail inachevé avec Arduino

This commit is contained in:
Geoffrey Frogeye 2018-03-26 10:06:32 +02:00
parent 5c1ccbce93
commit af080ac4bf
9 changed files with 84 additions and 25 deletions

15
Connexions.md Normal file
View file

@ -0,0 +1,15 @@
# Connexions
Ce document a pour but de recenser les connexions entre les différents composants du robot.
## Liste des composants
- Raspberry Pi 3 (RPi)
- Arduino Mega 2560 (Ard)
- Micronova Mercury FPGA (FPGA)
- HEDM-550X Encodeur moteur gauche
- HEDM-550X Encodeur moteur droit
## Connexions de puissance
## Connexions d'information

View file

@ -5,6 +5,8 @@
#ifndef __ACSIGNALS_H_ #ifndef __ACSIGNALS_H_
#define __ACSIGNALS_H_ #define __ACSIGNALS_H_
#include "AFsignals.h"
#define AC_BAUDRATE 9600UL #define AC_BAUDRATE 9600UL
// Structures used everywhere // Structures used everywhere
@ -62,6 +64,8 @@ struct __attribute__ ((packed)) A2CI_DBGs {
struct position actuel; struct position actuel;
struct position destination; struct position destination;
unsigned char movement; unsigned char movement;
struct F2AI_CODERs deltaCoder;
uint16_t nbCalcPos;
// ... // ...
}; };

View file

@ -41,8 +41,8 @@ struct __attribute__ ((packed)) F2AD_ERRs {
// Récupère les valeur des encodeurs // Récupère les valeur des encodeurs
#define F2AI_CODER 'D' #define F2AI_CODER 'D'
struct __attribute__ ((packed)) F2AI_CODERs { struct __attribute__ ((packed)) F2AI_CODERs {
int16_t left; int16_t dL;
int16_t right; int16_t dR;
}; };
// Récupère les valeur des capteurs de distance // Récupère les valeur des capteurs de distance

View file

@ -13,7 +13,10 @@ void TaskDebug(void *pvParameters) {
// Copie des valeurs à envoyer en debug // Copie des valeurs à envoyer en debug
memcpy((void*) &debug.actuel, (const void*) &actuel, (unsigned long) sizeof(actuel)); memcpy((void*) &debug.actuel, (const void*) &actuel, (unsigned long) sizeof(actuel));
memcpy((void*) &debug.destination, (const void*) &destination, (unsigned long) sizeof(destination)); memcpy((void*) &debug.destination, (const void*) &destination, (unsigned long) sizeof(destination));
memcpy((void*) &debug.deltaCoder, (const void*) &deltaCoder, (unsigned long) sizeof(deltaCoder));
debug.movement = movement; debug.movement = movement;
debug.nbCalcPos = nbCalcPos;
nbCalcPos = 0;
// Envoi des valeurs // Envoi des valeurs
sendAC(A2CI_DBG, &debug, sizeof(debug)); sendAC(A2CI_DBG, &debug, sizeof(debug));

View file

@ -1,25 +1,51 @@
#include "position.h" #include "position.h"
#include "AC.h" #include "AC.h"
#include "AF.h"
#include "dimensions.h"
void TaskPosition(void *pvParameters) { void TaskPosition(void* pvParameters)
(void) pvParameters; {
TickType_t xLastWakeTime; (void)pvParameters;
TickType_t xFrequency = 100 / portTICK_PERIOD_MS;
const TickType_t xDelay = 500 / portTICK_PERIOD_MS;
ulTaskNotifyTake(pdFALSE, portMAX_DELAY); // TODO Dummy
xLastWakeTime = xTaskGetTickCount();
for (;;) { for (;;) {
vTaskDelayUntil(&xLastWakeTime, xFrequency); sendAF(F2AI_CODER, NULL, 0);
ulTaskNotifyTake(pdFALSE, portMAX_DELAY); // Wait until new information has arrived
nbCalcPos++;
float adjacent = DISTANCE_BETWEEN_WHEELS;
float opposite = deltaCoder.dR - deltaCoder.dL;
float deltaO = atan(opposite / adjacent);
float deltaD = (deltaCoder.dL + deltaCoder.dR) / 2;
actuel.o += deltaO;
float deltaX = deltaD * cos(actuel.o);
float deltaY = deltaD * sin(actuel.o);
actuel.x += deltaX;
actuel.y += deltaY;
vTaskDelay(xDelay);
} }
} }
void onF2AI_CODER()
{
void configurePosition() { readAF(&deltaCoder, sizeof(struct F2AI_CODERs));
actuel.x = 0; vTaskNotifyGiveFromISR(tPosition, NULL);
actuel.y = 0;
actuel.o = 90;
xTaskCreate(TaskPosition, "Position", 128, NULL, 2, &tPosition);;
} }
void configurePosition()
{
actuel.x = 0;
actuel.y = 0;
actuel.o = 0;
registerRxHandlerAF(F2AI_CODER, onF2AI_CODER);
xTaskCreate(TaskPosition, "Position", 128, NULL, 2, &tPosition);
;
}

View file

@ -9,11 +9,15 @@
#include <task.h> #include <task.h>
#include "ACsignals.h" #include "ACsignals.h"
#include "AFsignals.h"
struct position actuel; struct position actuel;
struct F2AI_CODERs deltaCoder;
TaskHandle_t tPosition; TaskHandle_t tPosition;
uint16_t nbCalcPos;
void TaskPosition(); void TaskPosition();
void configurePosition(); void configurePosition();

1
chef/src/AFsignals.h Symbolic link
View file

@ -0,0 +1 @@
../../arduino/AFsignals.h

View file

@ -21,14 +21,20 @@ void* TaskDebug(void* pdata)
void printDebugInfos(struct A2CI_DBGs* debug) void printDebugInfos(struct A2CI_DBGs* debug)
{ {
printf("← Position actuelle (%f; %f) (%f°)", debug->actuel.x, debug->actuel.y, debug->actuel.o); // Position
printf(", destination : "); printf("← + % .6g; % .6g % .6g°", debug->actuel.x, debug->actuel.y, debug->actuel.o);
// Frequence de calcul de la position
printf(" % 5d☼", debug->nbCalcPos);
// Delta codeuses
printf(", %5d↿↾%-5d", debug->deltaCoder.dL, debug->deltaCoder.dR);
// Destination
printf(", ");
if (debug->movement == C2AD_BRAKE) { if (debug->movement == C2AD_BRAKE) {
printf("ne pas bouger\n"); printf("\n");
} else if (debug->movement == C2AD_FREE) { } else if (debug->movement == C2AD_FREE) {
printf("là où le vent l'emporte\n"); printf("\n");
} else { } else {
printf("(%f; %f) (%f°)\n", debug->destination.x, debug->destination.y, debug->destination.o); printf("↑ % .6g; % .6g % .6g°\n", debug->destination.x, debug->destination.y, debug->destination.o);
} }
} }

View file

@ -8,7 +8,7 @@
#include "movement.h" #include "movement.h"
#include "debug.h" #include "debug.h"
#define TEMPSMAX 10 #define TEMPSMAX 60
void* TaskParcours(void *pdata) void* TaskParcours(void *pdata)
{ {
@ -42,8 +42,8 @@ int main()
/* printf("En attente de la tirette...\n"); // TODO */ /* printf("En attente de la tirette...\n"); // TODO */
printf("C'est parti !\n"); printf("C'est parti !\n");
pthread_t tParcours; /* pthread_t tParcours; */
pthread_create(&tParcours, NULL, TaskParcours, NULL); /* pthread_create(&tParcours, NULL, TaskParcours, NULL); */
sleep(TEMPSMAX); sleep(TEMPSMAX);