u navcontrollo
TRANSCRIPT
Storia
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
2
¨ Nasce nel 2008, progettazione del codice molto vicina a quella della scheda di Guido (dsNAV33)
¨ Nel 2013 c’è una totale riprogettazione del codice a fronte di una gestione ottimizzata delle risorse ed una visione più efficiente della comunicazione.
¨ Nel 2015 Riprogettazione dell’hardware ed una ulteriore ottimizzazione del codice
a
Sommario
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
3
¨ Introduzione
¨ uNAV ¤ Core
n Gestione dei task n Organizzazione del codice
¤ Controllo n Controllo motori n Controllo di alto livello
¤ Comunicazione n Messaggi n Frame
¨ Applicazioni ¤ uNAV PID Tuner ¤ uNAV Simple console ¤ ROS
n ROS CONTROL
¨ Robots disponibili
Microcontrollore
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
5
DMA
16BI
T
16BI
T
DSP Comunicazione: • 2 UART • I2C • SPI
PWM
Micro activity
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
6
interrutps.c
Interrupt
Motor control
High level control System task
sleep Timer
Motor control
High level control
Interrupt based
Comunicazione ed altri task
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
7
system.c
Input Capture
Controllo motori
Parsing pacchetto
Chiamate asincrone
Gestione GPIO e LED
System_service System_task System_task_name
Tc
file.c
Organizzazione del codice
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
8
root
Communication
Control
System
file.c
main.c
New Code
file.c
ISSUES
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
9
N Descrizione Stato
#45 Gestione ottimizzata delle periferiche In attesa
#33 Ottimizzazione dei task In attesa
#5 Monitoraggio stack In attesa
#22 Configurazione dinamica delle porte seriali In lavorazione
#20 Aggiunta I2C e controllo EEPROM In lavorazione
Manuale
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
11
Reference
Direct motor control: - NO velocity information - NO position information - NO torque information
Control 1/5
CONTROL
MEASURE
REFERENCE
- +
SATURATION
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
12
Rifererence constructor Parameter configurator
Control 2/5 - Ref & Error
RIFERIMENTO
- +
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
13
Funzione SET Funzione GET
set_motor_reference(num, state, value)
get_motor_reference(num)
get_motor_measure(num)
set_motor_state(num, state) get_motor_state(num)
Modalità Descrizione LED
Emergency Modalità di sicurezza* fisso
Disable Motore fermo e ponte disabilitato
1 lampeggio
Position control Controllo di posizione 2 Lampeggi
Velocity control Controllo di velocità 3 lampeggi
Torque control Controllo di coppia 4 lampeggi
V0.5
motor
Controllo 3/5 - Misura
MISURA
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
14
Funzione SET
reset_motor_position_measure(num, value)
Sensore di corrente bidirezionale
Encoder: Misura posizione Stima velocità QEI IC
V0.5-V0.7*
Controllo 4/5
CONTROLLO
SATURAZIONE
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
15
Funzione SET Funzione GET
update_motor_pid(num, pid) get_motor_pid(num) PID
paramaters
Controllo 5/5
SATURAZIONE
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
16
Funzione SET Funzione GET
update_motor_constraints(num, constraints)
get_motor_constraints(num)
Update_motor_parameters(num, parameters)
Get_motor_parameters(num) Motor_control
Motor_state
Controllo - Gestione
¨ Tre differenti modalità di controllo: ¤ Controllo posizione ¤ Controllo velocità ¤ Controllo Coppia ¤ Controllo Diretto*
¨ Ogni controllo agisce a differenti frequenze operative
Riferimento • Conversione del riferimento
Misura
• Acquisione e media dei valori da: • QEI • Input Capture • Current sense
Controllo • Calcolo dell’errore • Costruzione del comando di controllo
Invio • Conversione in valore PWM
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
17
Control Task motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
18
V0.5-V0.8*
Position Control
Velocity Control
Torque Control
100Hz
1KHz
*10KHz
Controllo 3/3
CONTROLLO POSIZIONE
MISURA
RIFERIMENTO
- +
- + CONTROLLO
VELOCITA’ - + CONTROLLO
COPPIA
MISURA
MISURA
motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
19
V0.7*
Diagnosi e sicurezza motors.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
20
V0.3
Funzione SET Funzione GET
update_motor_emergency(num, constraints)
get_motor_emergency(num)
Last reference
Velocity
H-bridge
diagnostic
emergency
Timeout
Slope Stop
Controllo di alto livello High_level_
control.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
21
V0.3
parameters
velocity
coordinate
Control_state
Odometry
Twist Control
ISSUES
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
23
N Descrizione Stato
#14 Gestione “direct PWM” per debug In attesa
#40 Riferimenti di controllo a 32bit In lavorazione
#36 Correzione misura alle basse velocità
In lavorazione
#29 Configurazione Dead zone PWM In lavorazione
MESSAGGIO
Messaggi 1/2
MSG#1
MSG #2
MSG #N
DATA … LNG HEADER CKS
MSG#N
MSG #2
MSG #1
PC Altre schede
…
serial.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
26
Messaggi 2/2
DATA … LNG HEADER CKS
I messaggi possono essere: • # Sincroni • @ Asincroni
Lunghezza del pacchetto Il contenuto del messaggio Checksum
1 2 3 … N N+1
C/Arduino C++
send Pkg_send(header, buffer)
receive Decode_pkg(char)
Encoding Encoder(frame*, lng)
Decoding Decode(packet)
serial.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
27
FRAME
Frame 1/6
DATA LNG HEADER CKS
LNG OPTION TYPE COMMAND DATA
…
FRAME #1
FRAME #2
FRAME #N
parsing.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
28
Frame 2/6
LNG OPTION TYPE COMMAND DATA
Lunghezza frame
Tipologia: • D - Data • R - Richiesta • A - ACK • K - NACK
Hashmap dei comandi Comando
Dati richiesti (opzionale)
C/Arduino C++
Build packet Create_packet(command, option, type, message) createPacket(command, type, message)
Create_data_packet(command, option, type, message)
CreateDataPacket(command, option, type, message)
Parsing Parse_packet(packet) Parsing(packet)
parsing.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
29
Frame 3/6 - dati
Error_serial
motor
diagnostic Motor_control
Motor_state paramaters
emergency PID
parameters velocity coordinate Control_state
System_service System_task System_task_name
Frame Hashmap
parsing.c
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
30
packet.h
motion.h
motor.h
Frame 4/6 Hashmap SYSTEM
ERROR_SERIAL Informazioni sugli errori della linea seriale
• Numero di errori per ogni tipo
SYSTEM_SERVICE Informazioni generali sulla scheda
• Nome scheda • Produttore • Data di compilazione • Tipologia di scheda • Versione • Reset
SYSTEM_TASK_PRIORITY Priorità del task
• Nome del task • Dato di comando
SYSTEM_TASK_TIME Tempo di esecuzione del task
SYSTEM_TASK_FRQ Frequenza di esecuzione del task
SYSTEM_TASK_NAME Nome del task
• Nome del task
MOTOR_STATE • Stato del motore
MOTOR_POS_RESET • Reset della posizione
packet.h
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
31
Frame 5/6 Hashmap MOTION
COORDINATE Coordinate del robot
• X • Y • Theta • Spazio percorso
PARAMETER_UNICYCLE Configurazione del robot
• Raggio ruota sinistra • Raggio ruota destra • Interasse • Spostamento minimo
VELOCITY Riferimento di velocità
• Velocità lineare • Velocità angolare
VELOCITY_MIS Velocità misurata
ENABLE Stato di controllo imposto
• Stato di controllo
Motion.h
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
32
Frame 6/6 Hashmap MOTOR
MOTOR Informazioni complete sullo stato dei motori
• Stato di controllo • Tensione imposta al ponte • Coppia uscente • Velocità • Posizione • Distanza percorsa dall’ultimo messaggio
MOTOR_CONSTRAINT Limiti del control
MOTOR_DIAGNOSTIC Informazioni generali sul motore e sui controlli
• Corrente • Temperatura • TODO
MOTOR_PARAMETER [MOTOR_PARAMETER_ENCODER, MOTOR_PARAMETER_BRIDGE] Configurazione del motore
• Configurazione dell’encoder • Configurazione del bridge • Verso di rotazione (Per convezione rotazione antioraria) • Rapporto di riduzione
MOTOR_EMERGENCY • Tempo in secondi affinché il motorsi fermi • Tempo in secondi affinché il bridge si spenga • Timeout prima dell’avvio della modalità di emergenza
MOTOR_STATE • Stato del motore
MOTOR_POS_RESET • Reset della posizione
MOTOR_POS_PID • Kp • Ki • Kd MOTOR_VEL_PID
MOTOR_TORQUE_PID
MOTOR_POS_REF • Riferimento di controllo
MOTOR_VEL_REF
MOTOR_TORQUE_REF
Numero motore Comando
# (Max 14) ### Motor.h
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
33
ISSUES
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
34
N Descrizione Stato
#34 Pacchetto dinamico In attesa
#13 Ottimizzazione del protocollo di trasmissione In attesa
#2 Gestione della DMA in ricezione In attesa
#43 Divisione delle librerie di comunicazione lato micro In lavorazione
#30 Messaggi per debug In lavorazione
Sommario
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
35
¨ Introduzione
¨ uNAV ¤ Core
n Gestione dei task n Organizzazione del codice
¤ Controllo n Controllo motori n Controllo di alto livello
¤ Comunicazione n Messaggi n Frame
¨ Applicazioni ¤ uNAV PID Tuner ¤ uNAV Simple console ¤ ROS
n ROS CONTROL
¨ Robots disponibili
uNAV PID Tuner
¨ Tuning dei parametri del PID
¨ Configurazione dei parametri: ¤ Motore ¤ Encoder
¨ Configurazione di più motori*
23/05/15
37
Raffaello Bonghi - Officine Robotiche 2015
Caratteristiche V0.4
Simple uNAV Console
¨ Controllo di sterzo ed velocità del robot
¨ Informazioni di velocità del robot
23/05/15
38
Raffaello Bonghi - Officine Robotiche 2015
Caratteristiche
V0.4
Risorse
¨ Diverse modalità di controllo: ¤ Controllo singolo
giunto ¤ Controllo giunto
differenziale ¤ altro
23/05/15
42
Raffaello Bonghi - Officine Robotiche 2015
Come contribuire
23/05/15 Raffaello Bonghi - Officine Robotiche 2015
46
FORK ADD YOUR CODE MERGE
https://github.com/officinerobotiche/uNAV.X
https://github.com/officinerobotiche/ros_orbus_interface