Aller au contenu


Ulysse

Inscrit(e) (le) 16 sept. 2016
Déconnecté Dernière activité déc. 31 2018 12:44
-----

#91923 Fin du Google Lunar XPrize

Posté par Ulysse - 26 janvier 2018 - 02:10

L’objectif de la compétition était d’inciter des entreprises privées à concevoir un robot capable d’aller sur la Lune et d’y parcourir 500 mètres tout en diffusant à la Terre des données et son trajet sur le satellite via une vidéo en haute définition.

 

Google communique que le prix ne sera pas attribué et qu'il n'y a officiellement aucun gagnant

 

“Après avoir consulté les cinq équipes finalistes du Google Lunar XPrize au cours des derniers mois, nous avons conclu qu'aucune d'entre elles ne sera en mesure d'atteindre la Lune avant la date limite du 31 mars 2018.” En guise d'explication, ils ont invoqué les difficultés financières, techniques et réglementaires des différents projets.

 

https://lunar.xprize...le-lunar-xprize




#91358 Pablo odysseus, robot artist Land Art

Posté par Ulysse - 07 janvier 2018 - 06:41

Entre deux marées, pas le temps de trainer...

 

397731513864349657.gif




#91226 Meilleurs voeux !!

Posté par Ulysse - 01 janvier 2018 - 12:31

Excellente année . . .

Image(s) jointe(s)

  • 20171217_130311.jpg



#89890 Pablo odysseus, robot artist Land Art

Posté par Ulysse - 11 novembre 2017 - 07:33

Voilà,le concours hackeday 2017 se termine. Pablo ne remporte pas de grand prix mais se classe dans les 100 premiers sur les 1057 inscrits. Il reste bien suivi par d'autres makers qui proposent aussi des projets bien intéressants. Pendant ce temps-là les tracés s'affinent.


#89744 Décisions morales prises par des machines

Posté par Ulysse - 08 novembre 2017 - 03:10

Il est difficile d'admettre une situation inévitable - même par jeu. Il s'agit bien ici de dilemmes moraux qui ne font pas intervenir les soucis mécanique sur le véhicule, l'organisation du réseau routier, ou tout ce qui pourrait être fait en amont pour éviter un drame.

La demande n'est pas " qu'auriez-vous fait pour éviter ça ? ", c'est clairement " qui sauvez-vous ? "

 

A qui profite ces études ?

Le constructeur de véhicule cherche l'assentiment de son algorithme d'évitement par la société qui en sera (i-né-vi-ta-ble-ment) victime. Difficile en effet de discréditer un véhicule tueur alors qu'on est à l'origine des données qui ont modelé son comportement.

 

Mais qu'on nous épargne à vous et moi si possible très longtemps d'avoir à faire ces choix.




#89740 Lidar pour l'extérieur

Posté par Ulysse - 08 novembre 2017 - 12:37

Pour abonder dans le sens du rplidar A2, une comparaison avec sweep qui ne semble pas tenir toutes ses promesses :

 

https://diyrobocars....canning-lidars/




#89508 Aibo le retour

Posté par Ulysse - 31 octobre 2017 - 07:18

un article ...

 

 

Le projet Aibo de la société japonaise Sony avait été stoppé il y a une dizaine d’années. Destiné aux enfants, le chien robotique est longtemps resté dans les tiroirs bien que les représentants de la marque aient souvent promis un retour du projet en grande pompe. Ce jour est désormais arrivé et Sony a déclaré son intention de dévoiler prochainement une version très futuriste du robot Aibo selon un article du journal nippon Nikkei Asian Review.




#89177 Let's dance

Posté par Ulysse - 21 octobre 2017 - 04:07




#88966 Glenn Robot Humanoide

Posté par Ulysse - 18 octobre 2017 - 08:39

Un exemple de ce qui se fait : une unité centrale reliée à des périphériques (capteurs et actionneurs ). Chacun son rôle.

 

Architecture_03.png




#88585 Pablo odysseus, robot artist Land Art

Posté par Ulysse - 10 octobre 2017 - 05:57

J'ai fait modifier l'article pour que robotmaker soit cité comme source du projet et une image plus récente


#88567 Pablo odysseus, robot artist Land Art

Posté par Ulysse - 09 octobre 2017 - 07:41

J'ai reçu aujourd’hui un message sympathique du site eeweb.com qui me prévient d'un article :

https://www.eeweb.co...-land-art-robot

L'illustration représente la version V1 mais le texte est à jour. Ça fait toujours plaisir

En attendant Pablo fait ses gammes dans le jardin : allers-retours , allers-retours, ...




#88512 WALK-E, Crowdfunding sur Ulule, Soutenez nous !!!

Posté par Ulysse - 08 octobre 2017 - 08:04

Reçu 5/5


#88500 Tête en ballons - servos - record des mouvements

Posté par Ulysse - 08 octobre 2017 - 05:39

 

Sur la vidéo, le contrôleur MIDI est bien branché sur l'ordi?

Oui, sur un port usb qui est vu comme une interface midi (in)

 

 

Le servo est en pin9. Il n'y a rien d'autre au niveau de l'arduino?

J'utilise le port 2 :

int pinServo1 = 2; // connection électrique sur la sortie xx

 

 

Est-ce que le servo doit bouger qd je fais "play" sur Reaper??

Oui, avec pour conditions ( dans cet ordre )

 

LoopMIDI doit être lancé

Hairless MIDI doit être lancé et configuré

midi in = le nom qui apparait dans LoopMIDI

serial port = le port série ouvert par le module arduino connecté en USB

la case Sérial <-> MIDI Bridge On cochée (debug aussi peut être utile au début)

 

Reaper doit être configuré

Options \ Préférences \ Midi outputs : le non qui apparait dans LoopMIDI doit être Enable

 

Le port midi de la piste doit être configuré : icone Route \ MIDI hardware output = le non qui apparait dans LoopMIDI et Send to channel 1

 

Dans cette piste il faut saisir quelques valeurs de volume (controle 7) comme indiqué sur l'illustration précédente

 

Ce qui nous fait :

 

Evènements Volume de la piste 1 -> LoopMIDI (channel 1) -> Hairless MIDI -> Arduino

 

Première chose à faire pour contrôler : Hairless MIDI affiche les messages reçu .

 

 




#88439 Tête en ballons - servos - record des mouvements

Posté par Ulysse - 07 octobre 2017 - 11:20

 

.j'ai juste le piano affiché sur la gauche de l'écran...

 

l'icone en haut à gauche permet de masquer les touches du clavier

 

tu peux diminuer l'espace d'affichage des touches pour augmenter l'espace d'affichage des contrôles ( on n'a pas besoin des touches )

 

tu dois sélectionner le contrôle O7 ( le volume ). on peut dessiner à la souris une suite de valeurs qui seront poussées vers la sortie MIDI.

 

midi_ctrl_VOL_01.jpg

 

Pour la mise au point du soft de l' arduino je m'aide d'un contrôleur midi, c'est plus pratique. J'ai un bouton de volume sur le canal 01. Toutes les positions du bouton sont bien reproduites en temps réel par le servo, ce qui valide le principe.

 

 

 

Dans ton projet :

  • le contrôleur est remplacé par un petit module arduino avec quelques potentiomètres
  • les mouvements sont enregistrés pas le séquenceur
  • les mouvements sont reproduits ( maintenant c'est validé ) par les servos

 

J'ai tout réécrit depuis la version précédant. La norme MIDI est largement documentée sur le net.

Voici le code de base qui réalise en boucle ...

  • la lecture des caractères reçus
  • la capture de l'évènement midi CONTROLE 7 (le volume ) du canal 1
  • la commande du servo

Dans ton cas c'est la fonction actionne(midi_controle, midi_chanel, midi_value) qui est importante. C'est là qu'on décide de ce qu'on fait sur le canal 1, 2,3 ...

 

C'est une base à partir de laquelle on peut travailler

// Tête en ballons 
// Utilisation d'évènements MIDI pour contrôler des servomoteurs
// v0.1  02/10/2017  création
// v0.2  06/10/2017  ajout de la rotation d'un servo

#include <Servo.h>

//variables 
byte midi_controle;
byte midi_chanel;
byte midi_value;

//int statusLed = 14;   // select the pin for the LED
//int statusLed = 17;   // select the pin for the LED
int statusLed = 20;   // select the pin for the LED

Servo myservo1;  // create servo object to control a servo
int pinServo1 = 2;  // connection électrique sur la sortie xx

void blink()
{
 digitalWrite(statusLed, HIGH);
 delay(50);
 digitalWrite(statusLed, LOW);
 delay(50);
}


//setup: declaring iputs and outputs and begin serial
void setup() {
	pinMode(statusLed,OUTPUT);   // declare the LED's pin as output
  
	//start serial with midi baudrate
	Serial.begin(115200);        // 31250

  myservo1.attach(pinServo1);  // attaches the servo on pin 9 to the servo object
  myservo1.write(150);
 
}


boolean get_midi_message( byte & controle, byte & channel, byte & value )
{
	static	int nrbyte = 1;
	
	static byte statut;
	static byte data1 ;
	static byte data2 ;
	
	static boolean acceptmessage;
	
	controle = 0;
	channel = 0;
	value = 0;

if (Serial.available() > 0) 
 {
   // lecture du caractère
	byte incomingByte = Serial.read();

	switch (incomingByte)
	{
		case 0xF8:	//	clock
					controle = incomingByte;
					nrbyte = 1;
					return true;
					break;
		case 0xFA:	//	start
					controle = incomingByte;
					nrbyte = 1;
					return true;
					break;
		case 0xFB:	//	continue
					controle = incomingByte;
					nrbyte = 1;
					return true;
					break;
		case 0xFC:	//	stop
					controle = incomingByte;
					nrbyte = 1;
					return true;
  				break;
	}   
   
   int event;
   switch (nrbyte)
   {
	   case 1 :	// le premier caractère doit obligatoirement être >= 0x80, sinon sortie
			if (incomingByte < 0x80)
			{
				statut = 0;
				data1 = 0;
				data2 = 0;
				return false;
			}

			// le controle change ?
			event = incomingByte;
			event = event  & 0xF0;	//	masque les 4 bits de poids faible xxxx 0000
			if (event == 0xB0)
			{	// c'est le contrôle Change
				statut = incomingByte;
				nrbyte = 2;
			}
			else
			{
				statut = 0;
				data1 = 0;
				data2 = 0;
				return false;	
			}

			// le channel
			data1 = incomingByte & 0x0F;	//	masque les 4 bits de poids forte 0000 xxxx

			break;

			
	   case 2 :	//	second caractère : data1
			if (incomingByte != 0x07)
			{
				statut = 0;
				data1 = 0;
				data2 = 0;
				nrbyte = 1;
				return false;
			}

			nrbyte = 3;
			break;

	   case 3 ://	troisième caractère : data2
			
			data2 = incomingByte;
			
			controle = statut;
			channel = data1;
			value = data2;
			
			nrbyte = 1;
			return true;
			break;
   
   }

 }	

	//	pas de message à lire.
	return false;
}


void actionne(byte controle, byte channel, byte value)
{
 switch (controle)
   {
    case 0xFA : //  start
                digitalWrite(statusLed, HIGH);
                break;

    case 0xFC : //  stop
                digitalWrite(statusLed, LOW);
                break;

    case 0xB0 : //  Controle du volume

                switch(channel)
                {
                  case 0 :  //  servo 1
                          //blink();
                          myservo1.write(value);
                          break;

                  case 1 :  //  servo 2
                          break;

                  case 2 :  //  servo 3
                          break;

                  case 3 :  //  servo 4
                          break;

                  default:
                          myservo1.write(value);
                          break;
                }
              
                break;
  }

}



//loop: s'il y a un message, on le traite
void loop () 
	{
		if (get_midi_message(midi_controle, midi_chanel, midi_value ) )
		{
		    actionne(midi_controle, midi_chanel, midi_value);
		}
	
	}
 
 






#88256 Tête en ballons - servos - record des mouvements

Posté par Ulysse - 02 octobre 2017 - 09:43

Je viens d'essayer ce soir : c'est tout bon. Les évènements saisis à la souris (dans l'image le contrôleur volume sur le canal 01) sont bien reçus par une carte Arduino MEGA. Pour l'instant je fais juste clignoter une LED quelque soit la valeur reçue (entre 0 et 127), l'étape suivante je fais bouger un servomoteur. Tranquille quoi :-)

midi_ctrl_PAN_01.jpg

 

On a une vingtaine de contrôleurs disponibles sur 16 canaux, ça laisse pas mal possibilités.

// Tête en ballons v0.1 du 02/10/2017
// Utilisation d'évènements MIDI pour contrôler des servomoteurs

#include <MIDI.h>

#if defined(USBCON)
#include <midi_UsbTransport.h>

static const unsigned sUsbTransportBufferSize = 16;
typedef midi::UsbTransport<sUsbTransportBufferSize> UsbTransport;

UsbTransport sUsbTransport;

MIDI_CREATE_INSTANCE(UsbTransport, sUsbTransport, MIDI);

#else // No USB available, fallback to Serial
MIDI_CREATE_DEFAULT_INSTANCE();
#endif

// --

#define LED 13          // LED pin on Arduino Uno

void BlinkLed()         // Basic blink function
{
        digitalWrite(LED,HIGH);
        delay(50);
        digitalWrite(LED,LOW);
        delay(50);
}


void handleNoteOn(byte inChannel, byte inNumber, byte inVelocity)
{
  // à implémenter si on veut
}
void handleNoteOff(byte inChannel, byte inNumber, byte inVelocity)
{
  // à implémenter si on veut
}

void handleProgramChange(byte inChannel, byte number) 
{
  // à implémenter si on veut
}

void handleControlChange(byte ControlNumber, byte ControlValue, byte Channel ) 
{
  // cet évènement nous intéresse !
  // ControlNumber  The controller number (0 to 127). See the detailed description here: http://www.somascape.org/midi/tech/spec.html#ctrlnums
  // ControlValue  The value for the specified controller (0 to 127).
  // Channel The channel on which the message will be sent (1 to 16). 

  // c'est ici qu'on va lire la valeur ControlValue (0 to 127) pour contrôler un servo
  // Mais pour l'instant : blink !
  BlinkLed();
}

void setup() {
    Serial.begin(115200);
    while (!Serial);
    MIDI.begin();
    MIDI.setHandleNoteOn(handleNoteOn);
    MIDI.setHandleNoteOff(handleNoteOff);
    MIDI.setHandleProgramChange(handleProgramChange);
    MIDI.setHandleControlChange(handleControlChange); 
  )     
    
}

void loop() {
    MIDI.read();
}