Installation de CoppeliaSim

À la date de l’installation, mon PC est sous Debian 11.

Télécharger CoppeliaSim depuis :
https://www.coppeliarobotics.com/downloads

Dans la console :

cd Téléchargements
tar -xJf CoppeliaSim*.tar.xz

Si le répertoire coppeliasim n’existe pas déjà, je le crée :
mkdir ~/.local/share/CoppeliaSim
J’installe l’application à l’endroit voulu :
cp -r CoppeliaSim*/* ~/.local/share/CoppeliaSim

Je télécharge l’icône CoppeliaSim et l’installe à l’endroit voulu :
wget http://entropie.org/3615/download/coppeliasim.png
mv coppeliasim.png ~/.local/share/CoppeliaSim

Pour intégrer le programme au menu de Mate, je passe par le menu auquel j’ai déjà intégré mozo :
Système > Préférences > Apparence > Menu Principal > Nouvel élément
Le fichier créé apparaît ici :
~/.local/share/applications/mozo-made.desktop

Pour effacer une version précédente :
rm -rf ~/.local/share/CoppeliaSim


J’installe ensuite Jupyter Notebook pour programmer Poppy en Python :
sudo apt-get install jupyter

Pour appeler rapidement Jupyter Notebook, j’installe également l’application dans le menu (avec mozo).
Télécharger l’icône de Jupyter :
wget http://entropie.org/3615/download/jupyter.svg
L’appel du programme se fait par : jupyter-notebook

Dans Jupyter Notebook, créer un nouveau Notebook et dans la première cellule, écrire puis exécuter :

# Import des bibliothèques et création du robot
from poppy_ergo_jr import PoppyErgoJr
creature = PoppyErgoJr(simulator='vrep')

Le robot apparaît alors dans CoppeliaSim (il faut avoir ouvert CoppeliaSim avant d’exécuter la cellule).

Installation de Poppy Ergo Jr

À la date de l’installation, mon PC est sous Debian 11.

Officiel : Documentation / GitHub / Poppy Forum

1/ Préparer la carte SD

Télécharger le fichier image pour la Raspberry Pi 2 :
https://github.com/poppy-project/poppy-ergo-jr/releases

Décompresser le fichier téléchargé pour obtenir le fichier image.

Version 4.0.1 :
2021-10-20-poppy-ergo-jr.img.7z
MD5 sums : ce648d0eba1099520e982032b0a9ca86
2021-10-20-poppy-ergo-jr.img
MD5 sums : bc87deb721ee851ccd8cc06311cba514

Transférer l’image sur la carte SD :

sudo fdisk -l (pour avoir la liste des disques)
cd Téléchargements
sudo dd if=2021-10-20-poppy-ergo-jr.img of=/dev/sdf bs=1M status=progress (à adapter)

À adapter : On indique en sortie le nom d’un périphérique (ici sdf), pas celui d’une partition comme sdf1. Il faut attendre quelques minutes pour que l’opération se finisse.

On met la carte SD dans la Raspberry Pi, on connecte le robot au réseau local et on branche le transformateur (7,5 V / 2 A) sur la carte Pixl prévue pour le robot Poppy Ergo Jr. Le + de la prise du transformateur est au centre, le – à l’extérieur.

2/ Améliorer la sécurité

Par défaut, pour se connecter à Poppy :
login : poppy / password : poppy
Il existe aussi un autre mode administrateur :
login : pi / password : raspoppy
On va modifier leur mot de passe.

ssh pi@192.168.0.xxx (à adapter)
passwd pi (pour modifier le mot de passe)
sudo passwd poppy (pour modifier le mot de passe)

3/ Modifier la configuration

Dans la console :

sudo raspi-config

Network Options > Hostname (modifier poppy en POPPY)
Localisation Options > Change Locale : fr_FR.UTF8 UTF-8
                     > Change TimeZone : Europe > Paris
                     > Change Keyboard Layout
Advanced Options > Expand Filesystem

Network Options modifie les fichiers :
/etc/hostname
/etc/hosts

4/ Ports à ouvrir sur le routeur / firewall à l’adresse du robot et à destination de mon ordinateur

nmap -p- -v 192.168.0.xxx (à adapter)

Nmap scan report for 192.168.0.xxx :
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
2280/tcp open  lnvpoller
4000/tcp open  remoteanything
6969/tcp open  acmsoda
8000/tcp open  http-alt
8080/tcp open  http-proxy
8888/tcp open  sun-answerbook
9009/tcp open  pichat

5/ Utiliser Poppy en le connectant directement sur un PC

En général, on utilise Poppy en le branchant sur un routeur, mais on peut vouloir être indépendant de tout réseau, soit parce qu’il n’y a tout simplement pas de réseau, soit parce que Poppy n’est pas reconnu. La solution est donc de brancher directement Poppy sur un PC en utilisant un câble RJ45 croisé (chez moi, ça fonctionne aussi avec un câble droit).

sudo nano /boot/cmdline.txt

Rajouter à la fin de la première ligne : ip=192.168.0.xxx (à adapter).
Pour repérer les cartes réseaux :
ip addr (ou ip a)
On donne une adresse ip à la carte Ethernet du PC :
sudo ifconfig eth0 192.168.0.yyy up (eth0 et adresse ip à adapter)
On teste la connection avec Poppy :
ping 192.168.0.xxx (à adapter)

Remarque : Pour avoir accès à ifconfig, il faut installer sous Debian 11 le paquet net-tools :
sudo apt-get install net-tools

Dans le navigateur Internet, on accède à l’interface Poppy par : http://192.168.0.xxx (à adapter).

Alpha Rex 2.1

Programmation en NXC (extraits) :

// Jambe droite : Moteur B + Capteur de contact 1
#define RIGHT_MOTOR         OUT_B
#define RIGHT_TOUCH         S1
#define RIGHT_TOUCH_VAL     SENSOR_1  // Valeur de S1

// Jambe gauche : Moteur C + Capteur de contact 2
#define LEFT_MOTOR          OUT_C
#define LEFT_TOUCH          S2
#define LEFT_TOUCH_VAL      SENSOR_2  // Valeur de S2

// Les 2 jambes à la fois
#define MOTORS              OUT_BC

// Marche avant / arrière
#define FORWARDS 1
#define BACKWARDS 2

// Les autres capteurs utilisés ///////////////////////////////

// Capteur ultrasonique
#define ULTRASONIC          S4
#define ACTIVE_DISTANCE 30

// IMU (Inertial Motion Unit)
// https://www.dexterindustries.com/manual/imu-sensor/
#define IMU                 S3
#define IMU_ACC_ADDR 0x3A
#define IMU_GYR_ADDR 0xD2

// Les autres capteurs potentiels /////////////////////////////

// Capteur de couleurs
#define COLOR               S3
#define COLOR_VAL           SENSOR_3  // Valeur de S3

// Capteur de sons
#define SOUND               S4
#define SOUND_VAL           SENSOR_4  // Valeur de S4
void walkAngle (int direction, long angle) {
  
  ResetTachoCount(MOTORS);
  switch (direction) {
    case FORWARDS:
      // Les moteurs avancent synchronisés à la vitesse de 50 %
      OnFwdReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (MotorTachoCount(RIGHT_MOTOR) != angle);
      break;
    case BACKWARDS:
      // Les moteurs reculent synchronisés à la vitesse de 50 %
      OnRevReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (MotorTachoCount(RIGHT_MOTOR) != -angle);
      break;
  }
  Off(MOTORS);
}
void walkDuration (int direction, unsigned long duration) {

  unsigned long t0 = CurrentTick();  // Renvoie le temps en ms
  switch (direction) {
    case FORWARDS:
      // Les moteurs avancent synchronisés à la vitesse de 50 %
      OnFwdReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (CurrentTick () - t0 < duration);
      break;
    case BACKWARDS:
      // Les moteurs reculent synchronisés à la vitesse de 50 %
      OnRevReg(MOTORS, 50, OUT_REGMODE_SYNC);
      while (CurrentTick () - t0 < duration);
      break;
  }
  Off(MOTORS);
}

NXC et Geany sous Debian 11

NXC est un langage de programmation spécifique au robot Lego Mindstorms NXT. Il est basé sur le NBC, un langage assembleur.

Dans la console :
sudo apt-get install nbc

On va paramétrer Geany pour pouvoir compiler aussi bien des fichiers nxc que nbc. De plus on se basera sur la coloration syntaxique du langage C.

Dans ~/.config/geany, modifier le fichier filetype_extensions.conf :

#~ # Filetype extension configuration file for Geany
#~ # Insert as many items as you want, separate them with a ";".
#~ # See Geany's main documentation for details.
[Extensions]
NXC=*.nxc;*.nbc;

Dans ~/.config/geany/filedefs, créer un fichier filetypes.NXC.conf :

# For complete documentation of this file, please see Geany's main documentation

[styling=C]

[keywords=C]

[lexer_properties=C]

[settings]
lexer_filetype=C

# default extension used when saving files
extension=nxc

# single comments, like # in this file
comment_single=//
# multiline comments
comment_open=/*
comment_close=*/

[indentation]
width=2
# 0 is spaces, 1 is tabs, 2 is tab & spaces
type=0

[build-menu]
# %f will be replaced by the complete filename
# %e will be replaced by the filename without extension
# (use only one of it at one time)
FT_00_LB=Vérifier / Compiler
FT_00_CM=nbc %e.n*c
FT_00_WD=
FT_01_LB=Téléverser
FT_01_CM=nbc -S=usb -d %e.n*c
FT_01_WD=
FT_02_LB=
FT_02_CM=
FT_02_WD=
EX_00_LB=
EX_00_CM=
EX_00_WD=

Dans ~/.config/geany/templates/files, créer un fichier program.nxc :

// Lego Mindstorms NXT

Enregistrer les fichiers sources au format nxc, puis compiler (touche F8). Le téléversement sur la brique NXT se fait avec la touche F9 (ne pas oublier de vérifier que la brique NXT est allumée, sinon Geany indique « Compilation échouée »).

Remarque : Depuis que j’ai mis à jour Debian, le tiret bas (du 8) ne s’affiche plus dans Geany. La solution est de modifier la police de caractères dans Éditer > Préférences > Interface > Polices Éditeur (par exemple Liberation Mono Regular à la place de Monospace Regular).

NXC et Geany sous Debian 9

NXC est un langage de programmation spécifique au robot Lego Mindstorms NXT. Il est basé sur le NBC, un langage assembleur.

Dans la console :
sudo apt-get install nbc

Paramétrer Geany pour pouvoir compiler aussi bien des fichiers nxc que nbc (Construire > Définir les commandes de construction) :
nbc -S=usb -d %e.n*c

Enregistrer les fichiers sources au format nxc, puis compiler (touche F8). Le transfert sur la brique NXT se fait dans la foulée. Par conséquent, si la brique NXT n’est pas allumée, Geany indique « Compilation échouée », ce qui ne veut pas dire que le code est erroné : Une erreur dans le code entraîne un message d’erreur en rouge au moment de la compilation.

Poppy Ergo Jr

import random
import time
from pypot.dynamixel.conversion import XL320LEDColors

#------------------------------------------------------
# CREATION DU ROBOT
#------------------------------------------------------

from pypot.creatures import PoppyErgoJr
poppy = PoppyErgoJr()

#------------------------------------------------------
# INITIALISATION DU ROBOT
#------------------------------------------------------

for m in poppy.motors :  # Boucle sur les six moteurs
    m.compliant = False
    m.led = 'green'
position_1 = {'m1': 0, 'm2': -110, 'm3': 66, 'm4': 0, 'm5': 34, 'm6': 20}  # safe_power_up
poppy.goto_position(position_1, 2, wait=True)  # 2 secondes pour prendre la position

#------------------------------------------------------
# FONCTION animation
#------------------------------------------------------

def animation(moteur, angleMin, angleMax, forceMax) :
    moteur.goal_position = random.randint(angleMin,angleMax)
    if abs(moteur.present_load) > forceMax :
        print (moteur.present_load)
        for m in poppy.motors :
            m.compliant = True
            m.led = 'off'
        for i in range(5) :
            moteur.led = 'red'
            time.sleep(0.5)
            moteur.led = 'off'
            time.sleep(0.5)
        time.sleep(1)

#------------------------------------------------------
# BOUCLE
#------------------------------------------------------

while 1 :
    for m in poppy.motors :
        m.moving_speed = random.randint(5,20)  # 5,20 à 5,30
        m.compliant = False
        m.led = XL320LEDColors(random.randint(2,8)).name
    animation(poppy.m1,-90,90,50)
    animation(poppy.m2,-110,0,30)
    animation(poppy.m3,0,60,30)
    animation(poppy.m4,-90,90,30)
    animation(poppy.m5,-40,40,20)
    animation(poppy.m6,-60,60,10)
    if random.randrange(4) == 1 :
        time.sleep(random.randrange(5))