Configuration de base d'une Odroid - PascalBauer/Notre-bon-plaisir-Pascal-Bauer GitHub Wiki

#Configuration de base d'une Odroid

1 . Écrire une image sur l'Odroid.

2. Installer ROS Groovy

3. Configuration réseau

4. Accès I/O

5. Configuration des ports séries (Serial Port)

=============================

Cette page est dédiée à la création/configuration d'une nouvelle image pour Odroid.

Note : Pour configurer une nouvelle Odroid à partir de l'image d'une Odroid existante, consulter cette page

1 . Écrire une image sur l'Odroid.

#1. Écrire une image

[Image téléchargeable]

Il faut dans un premier temps écrire une image d'ubuntu sur le module mémoire eMMC de l'odroid. Le module mémoire doit être converti en microSD avec l'adapateur fournit afin de le connecter à l'ordinateur. Une fois le module connecté, il faut l'identifier dans le dossier /dev.

Note : le module est composé de deux partitions et devrait appraraitre sous le nom sdX et les partition comme sdX1 et sdX2

On utilise pour cela la commande dd pour écrire l'image sur le module :

dd if="input_file" of="output_file"

Note : la commande dd permet également de créer une d'image (ou backup) du module. Par exemple dd if="/dev/sdb" of="mon_image.iso"

Pour écrire une image il suffit de choisir le fichier à écrire comme entrée :

sudo dd if="image.iso" of="/dev/sdb"  

si /dev/sdb est le module mémoire.

Note : Il faut démonter les partitions du module mémoire pour pouvoir écrire dessus : $sudo umount /dev/sdb1 $sudo umount /dev/sdb2

Note bis : la commande dd n'affiche pas de verbose tant tout se déroule bien.

En fonction de la façon dont a été effectuer l'image ou son écriture, il se peut que l'espace total du module mémoire ne soit pas disponible. Il faut donc vérifier avec un outil comme gparted par exemple.

Note : En cas de modification des partitions avec gparted, il ne faut pas modifier la taille de la première partition.

2. Installer ROS Groovy

(à mettre à jour pour Hydro)

La version de ROS pour l'instant utilisée est Groovy pour Ubuntu ARM.

ATTENTION : À mettre à jour, le projet est passé sous hydro Il faut dans premier temps suivre les indications données sur le wiki de ROS : Ubuntu ARM install of ROS Groovy Note : L'Odroid possède une architecture ARM, il faut donc suivre le tuto pour Archi ARM

Puis il faut configurer l'environnement ROS catkin. Pour cela suivre les indications sur cette page : Installing and Configuring Your ROS Environment.

Note : Pour Groovy et supérieur, il faut suivre la méthode catkin

Il est nécessaire d'installer les paquets suivant : ros-groovy-rospy / ros-groovy-roscpp /ros-groovy-actionlib /ros-groovy-nav_msgs

Ou copier directement la commande :

$ sudo apt-get install ros-groovy-rospy ros-groovy-roscpp ros-groovy-actionlib ros-groovy-nav_msgs

Note : il faut ajouter le package move_base (`ros-hydro-move-base

Enfin, il faut ajouter les lignes suivantes .bashrc:

source /opt/ros/groovy/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_MASTER_URI=http://192.168.150.1:11311
export ROS_HOSTNAME=192.168.150.1XX 
export ROS_IP=192.168.150.1XX

Note : 192.168.150.1XX correspond à l'IP du robot XX. Exemple : 192.168.150.101 pour robot01

3. Configuration réseau

###3.1 Configurer le WiFi Il faut configurer les paramètre Wifi de l'Odroid pour qu'elle puisse se connecter correctement au réseau sans fil du serveur. Pour cela sélectionner le réseau désiré dans le menu WiFi de la barre supérieure et entrer le mot de passe. Puis ouvrer la fenêtre Connexion réseaux depuis le dashboard. Aller dans l'onglet Sans-fils, sélectionner le réseau voulu et faire Éditer/Modifier. Dans l'onglet IPv4, Changer la Méthode pour Manuelle et ajouter une adresse avec les paramètres suivants:

Adresse : 192.168.150.1XX
Masque sous-réseaux : 255.255.255.0
Passerelle : 192.168.150.1 

###3.2 NTP Le package ntp permet de synchroniser l'horloge de l'Odroid avec l'horloge du serveur. Pour cela éditer le fichier /etc/ntp.conf et ajouter les lignes suivantes :

listen on 192.168.150.1

server 192.168.150.1

disable auth
broadcastclient

###3.3 Fichiers Host La procédure est identique à celle effectuer lors de la configuration d'une nouvelle odroid : lien

###3.4 ssh-key La procédure est identique à celle effectuer lors de la configuration d'une nouvelle odroid : lien

4. Accès I/O

Il faut configurer l'Odroid pour pouvoir accéder "simplement" aux port série (Serial Port) et GPIO.

NOTE : /!\ Reminder : logic level are 1.8V / Niveau logique positif à 1,8V !!

4.1 Accès aux ports série

Une fois branchés, les port série apparaissent en tant que /dev/ttyUSBX (parfois /dev/ttyACMX) ; le numéro étant affecté suivant l'ordre d'arrivé : "/dev/ttyUSB0" pour le premier, "/dev/ttyUSB1" pour le second, etc. Leur accès est réserver au groupe dialout :

$ ls -la /dev/ttyUSB0
crw-rw---- 1 root dialout 166, 0 avril 15 10:33 /dev/ttyUSB0

Il faut donc ajouter le user (ici "odroid"), au groupe dialout. Utiliser la commande :

$ sudo usermod -a -G dialout odroid

Note : Il y a déjà 2 ports série (RX/TX ou UART) natifs sur l'Odroid qui correspondent aux fichiers : -- /dev/ttySAC0 pour celui des GPIO sur les pins 4-5-6-8 (pin 6 = RX / pin 8 = TX). -- /dev/ttySAC2 pour celui désigné comme "serial debut port" sur la board (cf doc odroid).

4.2 Accès aux GPIOs

La configuration des pins de l'Odroid est donnée ici : 30-pin header Odroid-XU

Note : L'accès est pour l'instant impossible pour les pins #14, #25 et #27

Les GPIOs sont disponibles dans le dossier /sys/class/gpio/. Pour configurer l'access aux gpios, il faut d'abord modifier le kernel afin de désactiver le driver de l'expansion board vendu par Hardkernel.

Les étapes pour modifier le Kernel sont donné ici : Kernel Odroid XU

Lors de la modifiaction du Kernel, suivre les étapes suivantes :

  • Aller dans "device driver"
  • Puis dans "Odroid Specific Hardware"
  • Enfin désactiver la ligne "Enable OdroidXU IOBOARD" (en pressant "N")

Normalement les fichiers /sys/class/gpio représentant les GPIOS sont seulement accessible en tant que root. Pour y accéder de façon "propre" (c-à-d sans avoir recours à sudo) il faut donner l'acces à l'utilisateur (ici odroid) en utilisant chmod et chown. Et ce à chaque redémarrage... ='(

Un script appelé au démarrage permet de palier à ce problème. Il export les gpios et donne l'accès pour les manipuler.

Voici le script à créer : /usr/local/bin/gpio_setup.sh :

# filename: /usr/local/bin/set_gpio_pins.sh << set as executable (chmod +x)
#
# set GPIO pins 17, 22, and 24 to be usable without root access
# In fact, make them accessible to the web-server (www-data) and
# the 'typical' user (pi). The 'chmod' allows user 'pi' to write
# This script must be run as root (sudo), in root's crontab, or
# each of the lines in the for-loop need to start with 'sudo'

####### gpio table ######
### pin | file ###
### 13  | gpio309
### 14  | gpio316 /!\NO ACCESS/!\
### 15  | gpio306
### 16  | gpio304
### 17  | gpio310
### 18  | gpio307
### 19  | gpio319
### 20  | gpio317
### 21  | gpio318
### 22  | gpio320
### 23  | gpio315
### 24  | gpio314
### 25  | gpio311 /!\NO ACCESS/!\
### 26  | gpio313
### 27  | gpio323 /!\NO ACCESS/!\

for pin in 309 316 304 306 310 307 319 317 318 320 315 314 311 313 323; do
  echo $pin > /sys/class/gpio/export
  #/usr/local/bin/gpio export $pin out
  chown -hR odroid:odroid /sys/class/gpio/gpio$pin
  chmod -R a+wr /sys/class/gpio/gpio$pin
done

Note : script .sh inspirer par cet exemple

Il faut ensuite appeler la commande crontab pour ajouter le script au démarrage :

$ sudo crontab -e

Puis ajouter à la fin du fichier le script créer au-dessus :

@reboot      /usr/local/bin/gpio_setup.sh

5. Configuration des ports séries (Serial Port)

Il est possible de donner des noms par défaut aux ports séries utilisés. Cela permet d'éviter les problèmes tels que "Le contrôleur est sur quel port déjà ? /dev/ttyUSB0 ?" ou encore "$@#&! Le lidar à planté ! il a encore changer de port !" ... Le but est donc ici de se débarrasser de cette source d'ennuie.

Le lien suivant explique assez clairement comment procédé : ici en anglais.

Ici, nous avons (pour l'instant) deux ports série, un pour le FTDI du MD25 et un pour le RPLiDAR. D'une façon générale, la procédure est la même pour chaque nouveau port.

Tout d'abord, rendez-vous dans le dossier etc/udev/rules.d et créer le fichier 99-usb-serial.rules. Ou dans un terminal :

$ sudo su
$ cd /etc/udev/rules.d && sudo echo "" > 99-usb-serial.rules
$ exit

Il suffit ensuite d'ajouter la ligne suivante dans ce fichier pour chaque port série :

SUBSYSTEM=="tty", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", ATTRS{serial}=="xxxx", SYMLINK+="mydevice"

Explication des paramètres :

  • SUBSYSTEM=="tty" : Le type de "fichier" (ici un Text-Terminal en fait, plus de doc)

  • ATTRS{idVendor}=="xxxx" et ATTRS{idProduct}=="xxxx" : Ce sont les ID du composant (aussi appelés major et minor). Ils s'obtiennent facile grâce lsusb. Exemple avec le FTDI :

$ lsusb
Bus 002 Device 005: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
  • ATTRS{serial}=="xxxx" : Permets de différencier deux composant identique. Il s'obtient en utilisant la commande suivante avec le port série associé au composant (par exemple /dev/ttyUSB1) :
$ udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1
    ATTRS{serial}=="A403IMGN"
  • SYMLINK+="mydevice" : le nom du port que vous souhaité associé au composant.

Note : Il est aussi possible d'utiliser dmesg pour obtenir la sortir du kernel arpès avoir brancher le composant et récupérer l'idVendor, l'idProduct et le Serial:

$ dmesg
[...]
[20961.968224] usb 2-1.6: new full-speed USB device number 5 using ehci-pci
[20962.067241] usb 2-1.6: New USB device found, idVendor=0403, idProduct=6001
[...]
[20962.067256] usb 2-1.6: SerialNumber: A403IMGN
[...]
[20962.067253] usb 2-1.6: Manufacturer: FTDI
[...]
[20963.175619] usb 2-1.6: FTDI USB Serial Device converter now attached to ttyUSB0

Voici le fichier créer pour le RPLidar et le FTDI associé au MD25 :

$ cat /etc/udev/rules.d/99-usb-serial.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{serial}=="0001", SYMLINK+="rplidar"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A403IO2O", SYMLINK+="md25"

Enfin, redémarrer pour que les paramètres soient pris en charge


(à réécrire)

#I2C access

forum topic

#Lecteur vidéo