ClubRobotInsat / robot-2023

Le robot INSA Toulouse pour la coupe de France de robotique 2024
https://clubrobotinsat.github.io/
2 stars 0 forks source link

Définir structure messages CAN BUS #18

Closed BloodFutur closed 6 months ago

BloodFutur commented 7 months ago

Solution générale

Header (11bits) Data (8 bytes)
1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8
Priorité
(3bits)
ID destinataire
(4bits)
ID origine
(4bits)
ID Commande
(1 Byte)
1st parameter
(1 Byte)
Paramètres optionnels
(6 Bytes)

Base roulante

Commande

ID commande 1st param Opt params Description
0 stop()
1 ping()
2 start()
3 idMot speed setTargetSpeed(idMotor, speed)
4 idMot speed getTargetSpeedACK(idMotor, speed)
5 idMot direction setMotorDirection(idMotor, direction)
6 idMot getCurrentSpeed(idMotor)
7 idMot getDistance(idMot)
8 startRecordDistance()

idMotor : integer (0 ou 1) direction : integer (0 pour anti-horraire et 1 pour horraire) speed : float (en mm/s)

Bras/Storage

ID commande 1st param Opt params Description
0 stop()
1 ping
2 idServo angle setAngle(idServo, angle)
3 idServo getAngle(idServo)
4 idServo angle getAngleACK(idServo, angle)
5 idServo speed setSpeed(idServo, speed)
6 idServo getSpeed(idServo)
7 idServo speed getSpeedACK(idServo, speed)
8 idServo duration setSpinDuration(idServo, duration)
9 idServo mode changeMode(idServo, mode)
10 idServo mode getMode(idServo, Mode)
11 idServo torque setTorque(idServo, torque)
12 idServo getTorque(idServo)
13 idServo reboot(idServo)
14 idServo clearError(idServo)
15 idServo getError(idServo)
16 idServo getStatusDetail(idServo)
17 grab()
18 release()
19 moveToHomePosition()
20 moveToReadyPosition()
21 moveFindObjetLow()
22 moveFindObjetHigh()
23 putInStock()
24 getFromStock()
25 movePlaceObject()
26 nextRing()
27 previousRing()

idServo : integer (0 à 253) angle : float (de 159.8 deg à -159.8 deg) speed : integer (de 1023 à -1023, 0 pour arrêter) - actuellement on sait pas comment convertir en deg/s duration : integer (en ms) mode : integer (0 pour Position Control, 1 pour Speed Control) torque : integer (0 pour TorqueOFF, 1 pour TorqueON, 2 pour TorqueBREAK)

Capteurs

ID commande 1st param Opt params Description
0 stop()
1 ping()
2 idImu get_accel(idImu)
3 idImu get_ang_vel(idImu)
4 idTof get_distance(idTof)

Message Tirette (carte capteur)

ID commande 1st param Opt params Description
5 on message d'activation de la tirette

Urgence

ID commande 1st param Opt params Description
0 stop()

Raspi

En fonction des interfaces de chacun => peut interpréter les messages correctement.

Notes

Header

11 bits

Idée 1:

Idée 2:

Suivre ce qu'à fait Aude -> pas trop mal

ids: cas particulier: tous les bits à 0: arret URGENCE raspi: 1 bras & stockage: 2 base roulante 1 & 2 : 3 capteurs (Imu, ultrasons): 4

Data

8 octets = 64 bits

Modules

Urgence

Actions

Base roulantes

Actions

Message

1 octet de commande 1 octet d'id 6 octets de params

Bras + stockage

Message

BloodFutur commented 6 months ago

La structure générale semble correct pour tout le monde, si modifications nécessaires il y a, alors on peut facilement les changer car c'est assez modulaire pour le contenu de message.