https://github.com/macerobotics/MRPiZ/tree/master/Software/FirmwareSTM32
MRPiZ – odometry
import sys from mrpiZ_lib import * import time time.sleep(5) controlEnable() forward_mm(10,220) turnLeft_degree(10,90) forward_mm(10,170) turnLeft_degree(10,90) forward_mm(10,170) turnRight_degree(10,90) forward_mm(10,290) turnRight_degree(10,90) forward_mm(10,375) turnRight_degree(10,90) forward_mm(10,450)
Envoyer des commandes SSH avec paramiko
Un script pour envoyer des commandes SSH avec paramiko.
Ce script permet de contrôler en SSH le robot MRPiZ à partir d’un PC.
#!/usr/bin/env python import sys, paramiko import time hostname = '192.168.42.1' # IP du robot MRPiZ password = 'raspberry' username = 'pi' port = 22 command = 'echo "#MF,30!" > /dev/ttyAMA0' ##################################################################################"" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.load_system_host_keys() ssh.connect(hostname, port=port, username=username, password=password) ssh.exec_command(command)
Dance de robots MRPiZ
La gestion des robots en parallèle est gérer par fabric (www.fabfile.org). Un outil SSH permettant d’envoyer plusieurs commandes SSH en parallèle. Chaques robots MRPiZ est identifié par une adresse IP unique:
- IP du robot n°1: 192.168.1.41
- IP du robot n°2: 192.168.1.37
- IP du robot n°3: 192.168.1.47
Le script de contrôle des robots :
#!/usr/bin/env python
import fabric
from fabric.api import run, env, task
from fabric.api import *
import time
env.hosts = ['192.168.1.41', '192.168.1.37', '192.168.1.47']
env.user = 'pi'
env.password = 'raspberry'
@parallel
def hello():
run('python /home/pi/MRPiZ/Dance.py')
Le script python pour les robots :
#!/usr/bin/env python import sys from mrpiZ_lib import * import time controlEnable() while 1: forward_mm(13,120) back_mm(11,100) forward_mm(11,100) turnRight_degree(25,360) time.sleep(1) turnRight_degree(15,90) turnLeft_degree(15,180) turnRight_degree(15,90) back_mm(12,90)
Partie 1 : OpenCV et le robot MRPiZ
Ce tutoriel permet de faire du traitement d’images avec le robot MRPiZ en langage Python.
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):
[ccnbw lang=”java” height=”900″ width=”900″ ]
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);
}
}
[/ccnbw]
- 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
- 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.
La carte Esus
- SDA : pin 2
- SCL : pin 13
- La librairie Pololu est nécessaire : https://github.com/pololu/vl6180x-arduino
#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 :
Fin du tuto.
Support camera pour robot MRPi1 ou MRPiZ
Voici un support de camera Raspberry Pi pour le robot MRPi1.
Le support de la camera :
Le fichier STL pour l’impression 3D est sur GitHub : ici.