top of page

Forum Posts

Roselli Sergio
Mar 10, 2021
In Software
intanto inserisco alcuni link da dove prendere spunto Exapode Link Link Robot Arm Link Video Link Link PS Ringrazio tutti per aver collaborato alla realizzazione delle APP che ci permetteranno di usare ancora meglio i nostri Robot. Lascio il Link qui Riguardo alla cinematica inversa, interessante ed estramemente semplice è il video con gli esempi riportati in questo video di QRBX (Regarding the inverse kinematics, interesting and extremely simple is the video with the examples shown in this QRBX video) L'esempio non implementa un interfaccia grafica ma fornisce algoritmo di esempio da dove poter cominciare e dove è possibile verificare quasi in tempo reale i movimenti !!! Inoltre c'è una implementazione con le librerie grafiche di IKpy qui che mi sembra già l'idea che avevo proposto in altri post Altri Link da considerare link Link
1
5
29
Roselli Sergio
Feb 20, 2021
In General Discussions
Una volta eseguita la fase di montaggio del busto, lasciate collegati i servomotori ma senza assemblare le gambe e le ginocchia in modo da poter eseguire correttamente in seguito il settaggio dello zero dei servomotori. Inizia tutto con il download della libreria dal seguente qui e ricordatevi di rinominare la cartella in OpenCat Quindi caricate il file .ino e inviatelo a Bittle,vedi figura sotto. Inizia con un errore (ma non fateci tanto caso) in fase di compilazione di OpenCat.ino (che si trova nella cartella Utente\Documents\Arduino\OpenCat) In file included from C:\Users\Sergio\AppData\Local\Temp\arduino_build_604654\sketch\WriteInstinct/OpenCat.h:85:0, from C:\Users\Sergio\Documents\Arduino\libraries\OpenCat\OpenCat.ino:31: C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h: In member function 'void Motion::loadDataFromI2cEeprom(unsigned int&)': C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h:68:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int) uint8_t requestFrom(int, int); ^~~~~~~~~~~ C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h:65:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t) uint8_t requestFrom(uint8_t, uint8_t); ^~~~~~~~~~~ La compilazione procede e lo sketch viene inviato al Bittle quandoha finito di inviare aprite il terminal di Arduino ,riceverete il seguente messaggio (rappresentato anche in figura sopra) : 18:25:44.207 -> * Start * 18:25:44.207 -> Initialize I2C 18:25:44.207 -> Connect MPU6050 18:25:44.720 -> Test connection 18:25:44.720 -> MPU successful 18:25:44.720 -> Initialize DMP 18:25:45.573 -> 1693 41 -31 8 18:25:45.573 -> Enable DMP 18:25:45.573 -> Enable interrupt 18:25:45.573 -> DMP ready! 18:25:46.391 -> 18:25:46.391 -> * Assigning 1 skill addresses... 18:25:46.391 -> Finished! che conferma che il programma è stato trasferito e che tutte le componenti sono attive Andare quindi nella sottodirectory di (Utente\Documents\Arduino\librerie\OpenCat\WriteInstinct ), e modificare le righe di WriteInstinct.ino come descritto dal manuale decommentando la vostra scheda di bordo correttamente #include "InstinctBittle.h" //activate the correct header file according to your model //#include "InstinctNybble.h" //#define NyBoard_V0_1 //#define NyBoard_V0_2 #define NyBoard_V1_0 Quindi trasferiamo OpenCat.h (una delle quattro schede schede), sarà il codice principale da inviare al Bittle Il codice comprende 3 file : WriteInstinct è responsabile della scrittura dei dati raccolti durante la calibrazione nella EEPROM. Instinct definisce tutti i tipi di posture. Qui viene definita la postura di riferimento, postura seduta, in piedi ecc. OpenCat è il programma generale che esegue i movimenti delle posture definite in Instinct.h . Ancora una volta durante la compilazione compariranno gli stessi errori postati sopra che per comodità ri-posto nuovamente In file included from C:\Users\Sergio\AppData\Local\Temp\arduino_build_132630\sketch\OpenCat.h:85:0, from C:\Users\Sergio\Documents\Arduino\libraries\OpenCat\WriteInstinct\WriteInstinct.ino:31: C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h: In member function 'void Motion::loadDataFromI2cEeprom(unsigned int&)': C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h:68:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int) uint8_t requestFrom(int, int); ^~~~~~~~~~~ C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.3\libraries\Wire\src/Wire.h:65:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t) uint8_t requestFrom(uint8_t, uint8_t); ^~~~~~~~~~~ alla fine della compilazione si avranno i seguenti messaggi avrdude: Version 6.3-20190619 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Users\Sergio\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" Using Port : COM13 Using Programmer : arduino Overriding Baud Rate : 115200 AVR Part : ATmega328P Chip Erase delay : 9000 us PAGEL : PD7 BS2 : PC2 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00 signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 Programmer Type : Arduino Description : Arduino Hardware Version: 3 Firmware Version: 4.4 Vtarget : 0.3 V Varef : 0.3 V Oscillator : 28.800 kHz SCK period : 3.3 us avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: reading input file "C:\Users\Sergio\AppData\Local\Temp\arduino_build_851178/WriteInstinct.ino.hex" avrdude: writing flash (25572 bytes): Writing | ################################################## | 100% 3.97s avrdude: 25572 bytes of flash written avrdude: verifying flash memory against C:\Users\Sergio\AppData\Local\Temp\arduino_build_851178/WriteInstinct.ino.hex: avrdude: load data flash data from input file C:\Users\Sergio\AppData\Local\Temp\arduino_build_851178/WriteInstinct.ino.hex: avrdude: input file C:\Users\Sergio\AppData\Local\Temp\arduino_build_851178/WriteInstinct.ino.hex contains 25572 bytes avrdude: reading on-chip flash data: Reading | ## avrdude: stk500_paged_load(): (a) protocol error, expect=0x10, resp=0x00 #avrdude: stk500_cmd(): programmer is out of sync avr_read(): error reading address 0x0000 reathe selected serial port rea does not exist or your board is not connected d operation not supported for memory "flash" avrdude: failed to read all of flash memory, rc=-2 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x2a avrdude done. Thank you. NOTA!!!!! Ricordarsi nel monitor seriale, di impostare Nessuna fine di riga e baudrate su 115200 (o 57600 per NyBoard V0_ *). Immettere tre Y maiuscole dopo il prompt e attendere che la MPU si calibri. Confermate quindi "y" alle domande che vi saranno rivolte Calibrate infine la MPU? (Y/n) rispondendo ancora Y Inizierà quindi la calibrazione...... Se tutto andrà bene dopo al massimo un paio di minuti otterrete un beep lungo con la seguente schermata : ATTENZIONE!!! Non toccare nulla durante questo periodo di attesa !!!! È NECESSARIO collegare tutti i servi e le batterie per una corretta calibrazione. Quindi, nel monitor seriale, digitare "c" per accedere alla modalità di calibrazione. Ci sarà rumore proveniente dal sistema di ingranaggi dei servi e vedrete la tabella di calibrazione: 18:58:22.725 -> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18:58:22.760 -> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18:58:22.760 -> c0, 0, La prima riga sono i valori la seconda gli offset Con tutti i servi in angolo zero, collegate testa, e gambe preparate nella sezione precedente al corpo., modo perpendicolare alla struttura del corpo evitatando di ruotare i servo durante il funzionamento. A questo punto riferendoci all'immagine del manuale dove sono rappresentati i servo digitiamo il comando c(numeroservo) (valore) c11 -4 assicurandoci che l'arto si allinei perfettamente ed utilizzando lo strumento di calibrazione ad L in dotazione con Bittle. Alla fine della calibrazione di tutti i motori, fissate gli arti con le viti in dotazione e digitate il comando "s" e di seguito "kbalance" per salvare i settaggi impostati. Posto di seguito la calibrazione da me eseguita con l'elenco dei comandi impartiti al terminal a scopo dimostrativo 18:51:58.971 -> Data is printed as: acelX acelY acelZ giroX giroY giroZ 18:51:58.971 -> Readings should be ,⸮k⸮⸮to: 0 0 16384 0 0 0 18:51:58.971 -> Sensor readings with offsets: -70, -11, 16388, -1, 0, 0, 18:51:58.971 -> Your calibration offsets: 3106, 1645, 1376, 44, -29, -25, 18:51:58.971 -> The ˙͕⸮́are saved and automatically sent to mpu.setXAccelOffset(yourOffset) 18:51:58.971 -> 18:58:22.725 -> 18:58:22.725 -> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18:58:22.760 -> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18:58:22.760 -> c0, 0, 19:08:14.384 -> moving [ targetIdx, angle ]: 19:08:14.384 -> m12, -4, 19:08:26.530 -> moving [ targetIdx, angle ]: 19:08:26.530 -> m13, -6, 19:08:35.977 -> moving [ targetIdx, angle ]: 19:08:35.977 -> m8, 4, 19:08:40.372 -> moving [ targetIdx, angle ]: 19:08:40.372 -> m8, -8, 19:09:05.359 -> moving [ targetIdx, angle ]: 19:09:05.359 -> m12, 2, 19:09:08.354 -> moving [ targetIdx, angle ]: 19:09:08.354 -> m12, 4, 19:09:11.686 -> moving [ targetIdx, angle ]: 19:09:11.686 -> m12, 6, 19:09:16.621 -> save calibration 19:09:42.187 -> moving [ targetIdx, angle ]: 19:09:42.187 -> m11, -4, 19:09:51.349 -> moving [ targetIdx, angle ]: 19:09:51.349 -> m11, 8, 19:09:59.192 -> moving [ targetIdx, angle ]: 19:09:59.192 -> m11, 6, 19:10:19.290 -> moving [ targetIdx, angle ]: C⸮+⸮bJ4, 19:10:53.825 -> moving [ targetIdx, angle ]: 19:10:53.825 -> m10, 4, 19:10:57.884 -> moving [ targetIdx, angle ]: 19:10:57.884 -> m10, 10, 19:11:01.935 -> moving [ targetIdx, angle ]: 19:11:01.935 -> m10, 14, 19:11:06.259 -> moving [ targetIdx, angle ]: 19:11:06.259 -> m10, 16, 19:11:09.216 -> moving [ targetIdx, angle ]: 19:11:09.216 -> m10, 18, 19:11:26.785 -> moving [ targetIdx, angle ]: 19:11:26.785 -> m14, 6, 19:11:29.911 -> save calibration 19:13:25.415 -> moving [ targetIdx, angle ]: 19:13:25.415 -> m0, 0, 19:13:30.005 -> 19:13:30.005 -> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 19:13:30.005 -> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19:13:30.039 -> c0, 0, 19:13:49.123 -> moving [ targetIdx, angle ]: 19:13:49.123 -> m0, 0, 19:13:51.704 -> save calibration NOTA IMPORTANTE !!! Vi è una modifica da eseguire nel file codice IRemote.h presente nella cartella Utente\Documents\Arduino\libraries\IRremote\src del telecomando nel caso in cui esso non funzioni #define DECODE_RC5 0 #define SEND_RC5 0 #define DECODE_RC6 0 #define SEND_RC6 0 #define DECODE_NEC 1 #define SEND_NEC 0 #define DECODE_SONY 0 #define SEND_SONY 0 #define DECODE_PANASONIC 0 #define SEND_PANASONIC 0 #define DECODE_JVC 0 #define SEND_JVC 0 #define DECODE_SAMSUNG 0 #define SEND_SAMSUNG 0 #define DECODE_WHYNTER 0 #define SEND_WHYNTER 0 #define DECODE_AIWA_RC_T501 0 #define SEND_AIWA_RC_T501 0 #define DECODE_LG 0 #define SEND_LG 0 #define DECODE_SANYO 0 #define SEND_SANYO 0 // NOT WRITTEN #define DECODE_MITSUBISHI 0 #define SEND_MITSUBISHI 0 // NOT WRITTEN #define DECODE_DISH 0 // NOT WRITTEN #define SEND_DISH 0 #define DECODE_SHARP 0 #define SEND_SHARP 0 #define DECODE_SHARP_ALT 0 #define SEND_SHARP_ALT 0 #define DECODE_DENON 0 #define SEND_DENON 0 #define DECODE_LEGO_PF 0 // NOT WRITTEN #define SEND_LEGO_PF 0 #define DECODE_BOSEWAVE 0 #define SEND_BOSEWAVE 0 #define DECODE_MAGIQUEST 0 #define SEND_MAGIQUEST 0 #define DECODE_HASH 1 // special decoder for all protocols Di seguito i comandi preimpostati sul telecomando a infrarossi : Vi è una versione di terze parti CodeCraft non ancora completamente testata che permette la costruzione di codici Py, la calibrazione e la creazione di profili che potrebbe essere interessante prendere in considerazione. NOTA Dato che l'attrito gioca un ruolo importante nel bilanciamento dinamico del Bittle, sebbene i gommini possano migliorare la presa, potrebbero amplificare le differenze derivanti dal tipo delle superfici. E' quindi consigliato usare Bittle senza gommini a meno che non venga regolata l'andatura agendo sul software. Cinematica e Dinamica Dopo aver correttamente assemblato e settato 2 dei 5 Bittle acquistati, installato il software in dotazione e gli ambienti di sviluppo nonchè il Python e relative libreria IKpy consigliate nel Forum, di seguito provo a fare un punto sulla situazione raggiunta : Dal mio punto di vista nel programma testato e fornito da @Gero che permette di creare un andatura piuttosto valida, ci vorrebbe come già detto nel suo post un implementazione grafica con interfaccia GUI che impostato un piano 3D con un immagine si produca in qualche un target della posizione (finale) che permetta la generazione della dinamica di tutto il movimento dal punto di partenza al punto target . Potremmo pensare di interagire con l'immagine statica muovendo i servimotore de robot e generando una serie di nuove posizione (agganciando un arto, spalla o ginocchio con il mouse e trascinandolo in un punto successivo) generando alcune sequenze definite (frame) del movimento e quindi esportando le intere sequenze dei dati da importare successivamente nello scketch instinct.h Mi sono guardato attorno ed intanto ho trovato un paio di Link da verificare per lo scopo ma sarebbe interessante avere qualche tool o APP grafica che ci desse già un nuova impostazione e successivamente modificarlo con un software personalizzato che ne regoli le nuove andature e generi una corretta sequenza di coordinate. http://gazebosim.org/ https://robodk.com/doc/it/Basic-Guide.html#Start Python in fase di verifica potete installare dal link l'API per poter colloquiare tramite python attraverso la porta seriale. Una volta installato il Python potete scaricare il software di @Gero per generare l'andatura da qui Di seguito procedete ad installare le librerie grafiche del Python e l'API per la cinematica inversa a questo link link Petoi documentazione assemblaggio link Documentazione link Codecraft link Post per la cinematica del Robot Inserisco un Link diretto ad un nuovo argomento dove tratteremo alcuni esempi in cui mi sono imbattuto utili per dare un idea ai lettori di quello che potrebbe essere il futuro sviluppo di un applicazione completa ed interattiva per il Bittle.
Installazione Robot Bittle (Italiano step by step)
 content media
3
14
236

Roselli Sergio

更多動作
bottom of page