Programmation des Robots

  • La programmation se fait soit en Python, soit sous forme de blocs de type blockly.
  • L’environnement de développement est ROBO Pro Coding

ROBO Pro Coding Getting Started

$ ROBOPro

On choisit le langage de Programmation :

robopro1_2.png

La Programmation se fait dans l’onglet Main Program:

robopro2_1.png

L’ajout d’éléments à contrôler se fait dans l’ongle Controller Configuration:

robopro3.png

REMARQUE : L’enregistrement et le chargement d’un programme se fait avec les commandes Import/Export :

robopro8.png


Connection au TXT4.0 :

Le PC et le contrôleur doivent au préalable être connectés en WIFI au Réseau e021 ( mot de passe : ROBOTROSE021 ) ou b103 ( mot de passe : robotb103 )
Si nécessaire, faire apparaitre la configuration réseau en tapant nm-applet dans un terminal.

  • Côté PC, vérifier que ce dernier a bien une adresse IP en 192.168.50.x, pour cela taper ifconfig ou ipaddr dans un terminal.
  • Côté TXT4.0, dans le menu principal, aller dans Info–>WiFi et noter l’adresse IP 192.168.50.y

Dans RoboPro, Cliquer sur Connect Controller :

robopro4.png

Renseigner l’ API Code ( disponible dans le TXT4.0 : Paramètres –> Clé API ), et remplacer txt40.local par l’adresse 192.168.50.y

robopro5.png


Ajout et initialisation d’une Variable

Pour créer une nouvelle variable, aller dans Variables –> Create Variable…

creation_variable.png

Initialisation de la variable :

init_var.png


Contrôle d’un Moteur en Boucle Fermée

Ajouter un Encodermotor dans Controller Configuration :

robopro6.png

#! /usr/bin/python3

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_motor_factory()
txt_factory.init_counter_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_M1_encodermotor = txt_factory.motor_factory.create_encodermotor(TXT_M, 1)
TXT_M_C1_motor_step_counter = txt_factory.counter_factory.create_encodermotor_counter(TXT_M, 1)
TXT_M_C1_motor_step_counter.set_motor(TXT_M_M1_encodermotor)

txt_factory.initialized()

Puis ajouter les blocs suivants dans la fenêtre Main Program :

CW/CCW = Clockwise, CounterClockWise

robopro7.png

#! /usr/bin/python3

import time
from fischertechnik.controller.Motor import Motor
from lib.controller import *

while True:
    TXT_M_M1_encodermotor.set_speed(int(512), Motor.CCW)
    TXT_M_M1_encodermotor.start_sync()
time.sleep(0.5)

Dans le cas d’une commande de 2 moteurs, afin d’éviter tout décalage de vitesse d’un moteur par rapport à l’autre, il est nécessaire d’ajouter l’option synchronisation :

robopro9.png

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_motor_factory()
txt_factory.init_counter_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_M1_encodermotor = txt_factory.motor_factory.create_encodermotor(TXT_M, 1)
TXT_M_M2_encodermotor = txt_factory.motor_factory.create_encodermotor(TXT_M, 2)
TXT_M_C1_motor_step_counter = txt_factory.counter_factory.create_encodermotor_counter(TXT_M, 1)
TXT_M_C1_motor_step_counter.set_motor(TXT_M_M1_encodermotor)
TXT_M_C2_motor_step_counter = txt_factory.counter_factory.create_encodermotor_counter(TXT_M, 2)
TXT_M_C2_motor_step_counter.set_motor(TXT_M_M2_encodermotor)

txt_factory.initialized()

robopro10.svg

#! /usr/bin/python3
import time
from fischertechnik.controller.Motor import Motor
from lib.controller import *

speed = None

speed = 500
TXT_M_M1_encodermotor.set_speed(int(speed), Motor.CW)
TXT_M_M2_encodermotor.set_speed(int(speed), Motor.CW)
TXT_M_M1_encodermotor.start_sync(TXT_M_M2_encodermotor)
time.sleep(500)

Vérification des entrées sorties avec Interface Test

Il est possible de vérifier le bon fonctionnement des différents éléments branchés sur le contrôleur avec Interface Test :

open_it.svg

interface_test.png


Mesure avec le capteur US et Affichage d’une distance sur l’écran LCD

Ajouter la fenêtre Display Configuration si elle n’est pas présente :

display_configuration.svg

Dans la fenêtre Display Configuration, ajouter un Label, avec comme nom txt_label

display_configuration2.svg

Fenêtre Controller Configuration :

mesure_distance_config.svg

import fischertechnik.factories as txt_factory

txt_factory.init()
txt_factory.init_input_factory()

TXT_M = txt_factory.controller_factory.create_graphical_controller()
TXT_M_I1_ultrasonic_distance_meter = txt_factory.input_factory.create_ultrasonic_distance_meter(TXT_M, 1)

txt_factory.initialized()

Fenêtre Main Program :

mesure_distance.svg

import time
from lib.controller import *
from lib.display import *

while True:
    display.set_attr("txt_label.text", str(TXT_M_I1_ultrasonic_distance_meter.get_distance()))
    time.sleep(0.5)