[DOCKER] [Programmation du robot LEGO] Version compatible TOPPERS Hakoba / ROS ・ Développez EV3RT sans polluer autant que possible l'environnement local

image.png

introduction

Dans Version / simulateur compatible TOPPERS Hakoba / ROS pour robot unique, la programmation de robot utilisant un robot de traçage de ligne basé sur ET Robocon est "réel sans machine" et "simulateur". Vous pouvez l'essayer avec "Achèvement interne". Dans cet article, je décrirai comment préparer un environnement de développement qui permette de programmer "sans polluer l'environnement" et "en utilisant l'éditeur habituel" en utilisant Docker.

Préparation etc.

Conformément à Procédure d'installation d'un simulateur pour un seul robot - Comment installer Unity, importer des packages et changer de méthode de communication, Unity Créez un environnement de simulation avec.

Il peut être utilisé de différentes manières, mais il doit être utilisé dans les conditions suivantes.

Environnement

Cette fois, nous ciblerons ʻARMv7-A`.

Construire le conteneur Docker d'Athrill

J'ai construit un fichier exécutable athrill lié statiquement et je l'ai copié dans un environnement propre en utilisant une construction en plusieurs étapes afin qu'il puisse être utilisé seul.

Dockerfile


FROM ubuntu:18.04 as athrill-builder

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
        git \
        build-essential

WORKDIR /root
RUN git clone --depth 1 https://github.com/toppers/athrill.git && \
    git clone --depth 1 https://github.com/toppers/athrill-target-ARMv7-A.git
WORKDIR /root/athrill-target-ARMv7-A/build_linux
RUN make timer32=true clean && \
    make timer32=true -f Makefile.static

FROM ubuntu:18.04
COPY --from=athrill-builder /root/athrill/bin/linux/athrill2 /usr/local/bin

Enregistrez le Dockerfile ci-dessus et faites unedocker build.

$ docker build -t hako/athrill:v1.1.1 -f Dockerfile .

Vous pouvez voir que l'image du conteneur athrill a été créée.

$ docker images
REPOSITORY             TAG                        IMAGE ID            CREATED             SIZE
hako/athrill          v1.1.1                     02a87297b3c2        3 hours ago         69MB

Construire le conteneur Docker pour ev3rt-athrill-ARMv7-A

Clonez ev3rt-athrill-ARMv7-A et placez-y le Dockerfile suivant. Le Dockerfile est une construction en plusieurs étapes basée sur le conteneur ʻathrill Docker` créé précédemment.

$ cd ${YOUR_WORK_SPACE}
$ git clone https://github.com/toppers/ev3rt-athrill-ARMv7-A.git
$ cd ev3rt-athrill-ARMv7-A
$ vi Dockerfile

Dockerfile


FROM ubuntu:18.04 as ev3rt-builder

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
        git \
        build-essential \
        gcc-arm-none-eabi

WORKDIR /root
RUN git clone --depth 1 https://github.com/toppers/athrill.git && \
    git clone --depth 1 https://github.com/toppers/athrill-target-ARMv7-A.git && \
    git clone --depth 1 https://github.com/toppers/asp-athrill-mbed.git && \
    git clone --depth 1 https://github.com/tlk-emb/mROS.git && \
    sed -i '1i#include "kernel_cfg.h"' mROS/mros-lib/mros-src/api/ros.cpp

COPY . /root/ev3rt-athrill-ARMv7-A

WORKDIR /root/ev3rt-athrill-ARMv7-A
RUN mkdir -p cfg/cfg && \
    cp cfg/cfg-linux-64 cfg/cfg/cfg && \
    chmod +x cfg/cfg/cfg
WORKDIR /root/ev3rt-athrill-ARMv7-A/sdk/mros-obj
RUN make clean; make ATHRILL_BUILD_TARGET=ubuntu18

FROM hako/athrill:v1.1.1
RUN mkdir -p /root/ev3rt
COPY --from=ev3rt-builder /root/ev3rt-athrill-ARMv7-A/sdk/mros-obj/memory.txt /root/ev3rt/memory.txt
COPY --from=ev3rt-builder /root/ev3rt-athrill-ARMv7-A/sdk/mros-obj/device_config.txt /root/ev3rt/device_config.txt
COPY --from=ev3rt-builder /root/ev3rt-athrill-ARMv7-A/sdk/asp /root/ev3rt/asp
CMD ["athrill2", "-c1", "-t", "-1", "-m", "/root/ev3rt/memory.txt", "-d", "/root/ev3rt/device_config.txt", "/root/ev3rt/asp"]
./ev3rt-athrill-ARMv7-A
├── arch
├── cfg
├── configure
├── doc
├── Dockerfile <-Placé directement sous le projet
├── extension
├── include
├── kernel
├── library
├── LICENSE.md
├── MANIFEST
├── pdic
├── README.md
├── README.txt
├── sdk
├── syssvc
├── target
├── test
└── utils

Vérifiez avec sdk / mros-obj / device_config.txt que l'adresse IP (DEBUG_FUNC_VDEV_TX_IPADDR) pour la communication Unity-athrill est 127.0.0.1 telle que définie dans Unity.

sdk/mros-obj/device_config.txt


DEBUG_FUNC_RESET_PC             0x18004400
DISABLE_SYMBOL_UNDERSCORE       1
DEVICE_CONFIG_TIMER_FD          400
DEBUG_FUNC_ENABLE_FT            1
DEBUG_FUNC_ENABLE_BT            1
DEBUG_FUNC_ENABLE_PROF          1
DEBUG_FUNC_ENABLE_WATCH         1
DEBUG_FUNC_ENABLE_SKIP_CLOCK    1
DEBUG_FUNC_ENABLE_SYNC_TIME     0
#DEBUG_FUNC_SHOW_SKIP_TIME      1
DEBUG_FUNC_ENABLE_VDEV          1
DEBUG_FUNC_VDEV_TX_PORTNO       54001
DEBUG_FUNC_VDEV_TX_IPADDR       127.0.0.1
DEBUG_FUNC_VDEV_RX_PORTNO       54002
DEBUG_FUNC_DISABLE_DEBUG_DATA_TYPE      1

Assurez-vous qu'il est correctement placé et créez le conteneur Docker. Cette fois, créez l'image en tant que hako / ev3rt: v1.0.0.

$ cd ev3rt-athrill-ARMv7-A
$ docker build -t hako/ev3rt:v1.0.0 -f Dockerfile .

Vous pouvez voir que l'image du conteneur ev3rt a été créée.

$ docker images
REPOSITORY             TAG                        IMAGE ID            CREATED             SIZE
hako/ev3rt            v1.0.0                     84e15941698e        3 hours ago         76.7MB

Courir

Procédure d'utilisation du simulateur pour un seul robot \ (version ARM ) Démarrez le simulateur Unity , lancez le simulateur de robot dans Unity.

Puis lancez roscore. Roscore doit être exécuté dans l'environnement d'adresse IP (sdk / mros-obj / mros_config / mros_sys_config.h) spécifié par mROS.

Ensuite, lancez le programme de ʻev3rt-athrill-ARMv7-A`. Veuillez spécifier l'image créée dans la version précédente.

$ docker run -it --rm --net host --name ev3rt hako/ev3rt:v1.0.0

Arrêtez

En gros, cela devrait s'arrêter avec Ctrl-C, mais il semble que certains environnements ne s'arrêtent pas occasionnellement. Dans ce cas, vous pouvez l'arrêter avec la commande docker stop.

$ docker stop ev3rt

Déboguer

athrill possède d'excellents outils de débogage. Si vous souhaitez déboguer, vous pouvez commencer à l'utiliser immédiatement en démarrant le conteneur Docker comme suit, par exemple.

$ docker run -it --rm --net host --name ev3rt hako/ev3rt:v1.0.0 athrill2 -c1 -i -t -1 -m /root/ev3rt/memory.txt -d /root/ev3rt/device_config.txt /root/ev3rt/asp

Code de correction

Les modifications de code peuvent être effectuées dans le répertoire ʻev3rt-athrill-ARMv7-A` à portée de main.

Par exemple, le programme principal pour déplacer un robot est décrit dans sdk / mros-obj / app.cpp. Veuillez noter que le comportement du robot change de différentes manières.

$ vi sdk/mros-obj/app.cpp

Si vous ouvrez ʻev3rt-athrill-ARMv7-AavecVisual Studio Code` etc., il sera plus facile à développer. (L'éditeur n'est qu'un exemple, veuillez le sélectionner selon vos préférences.)

Après avoir apporté des corrections, suivez les étapes de «construction» et «exécution» à nouveau.

$ cd ev3rt-athrill-ARMv7-A
$ docker build -t hako/ev3rt:v1.0.0 -f Dockerfile .                 # BUILD
$ docker run -it --rm --net host --name ev3rt hako/ev3rt:v1.0.0     # EXECUTE

en conclusion

Nous avons mis au point un environnement dans lequel vous pouvez facilement modifier et déboguer le code source à portée de main tout en utilisant le conteneur. Le robot traceur de ligne est emballé avec les bases de la programmation de robot et est très éducatif. Veuillez essayer.

Recommended Posts

[Programmation du robot LEGO] Version compatible TOPPERS Hakoba / ROS ・ Développez EV3RT sans polluer autant que possible l'environnement local