Home » BLOG

Partie 1 : OpenCV et le robot MRPiZ

Ce tutoriel permet de faire du traitement d’images avec le robot MRPiZ en langage Python.

OpenCV_Logo

Le matériel nécessaire pour le tutoriel :

  • Un robot MRPiZ
  • Un support caméra pour le robot MRPiZ
  • Une caméra Raspberry Pi 8MP

Installation

La première étape est d’installer la camera sur la carte Raspberry Pi :

  • Installation de la camera Raspberry Pi 8MP : ici
  • Mise à jour du système:
sudo apt-get update
sudo apt-get upgrade
  • Installation de la bibliothèque de traitement d’image OpenCv :
sudo apt-get install python-opencv
  • Installation de imutils:
sudo easy_install pip
sudo pip install imutil
sudo apt-get install python-picamera python3-picamera

Une simple photo

Prendre une simple photo avec la camera et l’enregistrer dans une image, voic

#!/usr/bin/python
import picamera

camera = picamera.PiCamera()

# initialisation de la resolution
camera.resolution = (1920, 1080)

# capture d'une image
camera.capture('image.jpg')

Simple photo

Lecture d’une image

Un script pour la lecture d’une image avec OpenCv :

#!/usr/bin/python
import picamera
import cv2

camera = picamera.PiCamera()

# initialisation de la resolution
camera.resolution = (100, 100)

# capture d'une image
camera.capture('image.jpg')

image = cv2.read('image.jpg')

print image

Conversion en HSV

Conversion colorimétrique.

HSV : Hue Saturation Value

#!/usr/bin/python
import picamera
import cv2

camera = picamera.PiCamera()

# initialisation de la resolution
camera.resolution = (1920, 1080)

# capture d'une image
camera.capture('image.jpg')

# lecture de l'image
frame = cv2.imread('image.jpg')


# conversion RGB en HSV de l'image
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

# enregistrer image hsv
cv2.imwrite('image_hsv.png', hsv)

image HSV

 

 

Fin de la première partie.

MRPiZ obstacle avoidance

Exemple de gestion des obstacles avec le robot MRPiZ et 5 capteurs de distance ToF:


#!/usr/bin/python

# Mace Robotics (www.macerobotics.com)
 # Author : Mace Robotics
 # Exemple : alarm
 # Date : 30/12/2015
 # Version : 0.1

from mrpiZ_lib import *
 import time, sys
 import random

#main program
 print "Exemple : Obstacle avoidance"

limit = 20
 speed = 45
 speedSlow = 30

try:
 while 1:
 p1 = proxSensor(1)
 p2 = proxSensor(2)
 p3 = proxSensor(3)
 p4 = proxSensor(4)
 p5 = proxSensor(5)
 #-----------------
 if((p1 < limit)or(p2 < limit)) and (p4 > limit):
 turnRight(speed)
 time.sleep(0.5)
 r = random.randint(0,2)
 if (r == 0):
 back(speedSlow)
 elif ((p4 < limit)or(p5 < limit)) and (p2 > limit):
 turnLeft(speed)
 time.sleep(0.5)
 r = random.randint(0,2)
 if (r == 1):
 back(speedSlow)
 elif (p3 < limit):
 r = random.randint(0,3)
 if (r == 0):
 back(speedSlow)
 time.sleep(0.6)
 elif (r == 1):
 back(speedSlow)
 time.sleep(0.9)
 turnRight(35)
 time.sleep(0.5)
 elif (r == 2):
 back(speedSlow)
 time.sleep(0.7)
 turnLeft(35)
 time.sleep(0.5)
 elif (r == 3):
 back(speedSlow)
 elif (p2 < limit) and (p4 < limit):
 turnLeft(35)
 time.sleep(1)
 else:
 forward(speed)
 except:
 print "Fin programme"
 stop()
 print "stop"
 exit()

MRPiZ en Java

Dans ce tutorial vous allez apprendre à programmer le robot MRPiZ en langage Java.

Remarque : le robot MRPiZ doit etre connecté à internet.

Installation

  • Mise à jour et installation de java :
sudo apt-get update && sudo apt-get install oracle-java7-jdk
  • Installation de la librairie Pi4J pour l’accès hardware de la Raspberry Pi:
curl -s get.pi4j.com | sudo bash

Librairie

La librairie java est disponible sur le Github : ici

Exemple

Voici un exemple de programme (Exemple1.java):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Exemple1 {

/****************/
public static void main(String args[]) throws InterruptedException, IOException
{
float tension_batterie;
float distance_sensor1;
float distance_sensor2;

MRPiZ robot = new MRPiZ();

// Lecture de la tension de la batterie
tension_batterie = robot.proxSensor(1);
System.out.println("Batterie = " + tension_batterie);

// avancer le robot pendant 1 seconde
robot.forward(30);

TimeUnit.SECONDS.sleep(2);

// reculer le robot pendant 1 seconde
robot.back(30);

TimeUnit.SECONDS.sleep(2);

// tourner à droite
robot.turnRight(30);

TimeUnit.SECONDS.sleep(1);

// arret du robot
robot.stop();

// Lecture du capteur de proximitè n°1 et n°2
distance_sensor1 = robot.proxSensor(1);
distance_sensor2 = robot.proxSensor(2);

// afficher les valeurs
System.out.println("Sensor 1 = " + distance_sensor1);
System.out.println("Sensor 2 = " + distance_sensor2);

}
}
  • Compilation du programme :
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . Exemple1.java
  • Exécution du programme :
sudo java -classpath .:classes:/opt/pi4j/lib/'*' Exemple1

Fusion360 – Modifier un fichier STL

Un tutoriel pour modifier un fichier STL avec le logiciel Fusion360.

 

  • Ouvrir Fusion 360:

 

  • Clic droit :
    • Dot not capture Design History

  • Continue :  

 

  • Ouvrir votre fichier STL via le menu INSERT Mesh:

  • Le fichier STL tel quel ouvert n’est pas modifiable :

  • Clic droit sur la pièce 3D:
    • Mesh to BRep

Maintenant, vous pouvez modifier votre fichier STL.

 

Fin du tuto !

 

Capteur VL6180X avec la carte Esus

Voici un programme afin d’interfacer le capteur VL6180X avec la carte Esus. Le capteur est relié par bus I2C à la carte Esus. Le capteur VL6180X est capteur de distance “Time of Flight” de mesure laser de distance de 0 à 200 mm.

esus_pres_kick

La carte Esus

  • SDA : pin 2
  • SCL : pin 13
#include <VL6180X.h>
unsigned int data;
VL6180X sensor;

void setup() 
{
  Serial.begin(9600);
  // init I2C
  Wire.begin(2, 13);//SDA, SCL
  
  // init VL6180X sensor
  sensor.init();
  sensor.configureDefault();
  sensor.setTimeout(500);
}

void loop() 
{ 
  data = sensor.readRangeSingleMillimeters();

  Serial.print("Distance mm =");
  Serial.println(data);

  delay(500);
}

Le résultat des  mesures avec le capteur :

Resultat

Fin du tuto.

Kicad : étaler les empreintes.

Un petit tutoriel pour étaler les empreintes lors de la toute première phase du routage d’un circuit imprimé.

  • Après avoir lu la netlist, vous obtenez tous les composants réunis dans un même bloc :

img1

  • Cliquer sur le bouton “Mode empreinte”:

img2

  • Ensuite, clic droit sur les composants:

img3

  • Étalements de toutes les empreintes:

img4

Voilà, fin du tuto.

 

Lecture des capteurs de sols

Dans ce tutorial vous allez apprendre à utiliser les 3 capteurs de sols du robot MRduino afin de faire du suivi de ligne.

Les capteurs de sols

Le robot MRduino est équipé de 3 capteurs de sols, ils sont situés à l’avant.

Lire un capteur

La fonction pour lire le capteur de sol n°1 du robot :

value = groundSensor(1)
  • La fonction renvoie une valeur entre 0 et 4095.

Exemple de programme pour lire les 3 capteurs :

#include <mrduino.h>

void setup() 
{
  Serial.begin(115200);

}

void loop()
{
int capteur1, capteur2, capteur3;

 capteur1 = groundSensor(1);
 capteur2 = groundSensor(2);
 capteur3 = groundSensor(3);

 Serial.println(capteur1);
 Serial.println(capteur2);
 Serial.println(capteur3);

 delay(1000);

}

 

Partie 2 : Contrôle du robot MRduino Wireless par UDP

Un tutoriel pour contrôler le robot MRduino Wireless par UDP avec un programme python.

UDP = User Datagram Protocol

MRduino-wireless_UDP

Le contrôle du robot est réaliser par un programme en langage python.

Le programme pour le robot

Ce programme permet au robot MRduino Wireless de

Il faut modifier votre SSID et mot de passe de votre réseau Wifi :

const char* ssid = "YOUR_SSID";  
const char* pass = "YOU_PASSWORD";  

Le programme complet :

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include <mrduino.h>

static void read_receptionCommande(String Commande);

int status = WL_IDLE_STATUS;
const char* ssid = "YOUR_SSID";  //  your network SSID (name)
const char* pass = "YOUR_PASS";       // your network password

unsigned int localPort = 12345;  

WiFiUDP Udp;
int tries=0;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);

  // setting up Station AP
  WiFi.begin(ssid, pass);
 
  // Wait for connect to AP
  Serial.print("[Connecting]");
  Serial.print(ssid);
  
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
    tries++;
    if (tries > 30)
    {
      break;
    }
  }
  Serial.println();

  printWifiStatus();

  Serial.println("Connected to wifi");
  Serial.print("Udp server started at port ");
  Serial.println(localPort);
  Udp.begin(localPort);
}

void loop()
{
int noBytes = Udp.parsePacket();
String received_command = "";
byte packetBuffer[512]; 

  if ( noBytes )
  {

    Serial.print("received a packet");

    // We've received a packet, read the data from it
    Udp.read(packetBuffer,noBytes); // read the packet into the buffer

    for (int i=1;i<=noBytes;i++)
    {
      received_command = received_command + char(packetBuffer[i - 1]);
    } // end for
   
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.endPacket();

    // execution de la commande
    Serial.println(received_command);

  } // end if
}

void printWifiStatus() 
{
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
} 

  • Compiler et télécharger le programme dans le robot MRduino Wireless

Le programme de contrôle

  • Lien pour télécharger le programme de contrôle (dossier Zip): MrduinoControler

Remarque : programme pour Windows

  • Dézipper le dossier :

dossier

  • Lancer le programme MRduinoControler.exe

Controler

Ce programme permet de contrôler les mouvements du robot et les trois leds. Ne pas oublier de saisir l’adresse IP correct du robot.