【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다



소개



TOPPERS 상자정원/ROS대응판・단체로봇용 시뮬레이터 에서는, ET 로보콘에 준한 라인 트레이스 로봇을 사용한 로봇 프로그래밍을 「실기리스」 「시뮬레이터 내 완결」으로 시험할 수 있습니다.
이 기사에서는 Docker를 사용하여 "환경을 더럽히지 않고"그리고 "평소 편집기를 사용하여"프로그래밍을 할 수있는 개발 환경을 준비하는 방법에 대해 설명합니다.

준비 등



단체 로봇용 시뮬레이터 도입 순서 - Unity의 설치·패키지의 임포트·통신 방식의 전환 방법 와 같이 Unity에 의한 시뮬레이션 환경을 구축합니다.

또한 다양한 방법으로 움직이는 것이 가능합니다만, 이하의 조건으로 움직이는 것으로 합니다.
  • 단일 로봇 용 시뮬레이터 도입 절차 (v2.0)

  • UDP 버전
  • [Io Writer]-[Host] 를 127.0.0.1 로 지정한다.
  • 함께,``


  • 환경 구축



    이번은 ARMv7-A를 타겟으로 합니다.

    athrill의 Docker 컨테이너 빌드



    단독으로도 사용할 수 있도록, 스태틱 링크의 athrill 실행 파일을 빌드해, 멀티스테이지 빌드를 이용해 섬세한 환경에 카피하고 있습니다.

    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
    

    위의 Dockerfile 저장 하 고 docker build .
    $ docker build -t hako/athrill:v1.1.1 -f Dockerfile .
    

    athrill의 컨테이너 이미지가 생성되었는지 확인할 수 있습니다.
    $ docker images
    REPOSITORY             TAG                        IMAGE ID            CREATED             SIZE
    hako/athrill          v1.1.1                     02a87297b3c2        3 hours ago         69MB
    

    ev3rt-athrill-ARMv7-A의 Docker 컨테이너 빌드



    ev3rt-athrill-ARMv7-A 을 복제하고 다음 Dockerfile을 넣습니다.
    Dockerfile에서는 방금 작성한 athrillのDockerコンテナ를 바탕으로 멀티 스테이지 빌드하고 있습니다.
    $ 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 <- プロジェクト直下に配置
    ├── extension
    ├── include
    ├── kernel
    ├── library
    ├── LICENSE.md
    ├── MANIFEST
    ├── pdic
    ├── README.md
    ├── README.txt
    ├── sdk
    ├── syssvc
    ├── target
    ├── test
    └── utils
    

    Unity에서 설정한 것처럼, Unity-athrill간 통신용의 IP 주소(DEBUG_FUNC_VDEV_TX_IPADDR)가 127.0.0.1 로 되어 있는 것을 sdk/mros-obj/device_config.txt 로 확인해 주세요.

    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
    

    올바르게 배치되었는지 확인하여 Docker 컨테이너를 빌드합니다. 이번에는 hako/ev3rt:v1.0.0로 이미지를 만듭니다.
    $ cd ev3rt-athrill-ARMv7-A
    $ docker build -t hako/ev3rt:v1.0.0 -f Dockerfile .
    

    ev3rt의 컨테이너 이미지가 생성되었는지 확인할 수 있습니다.
    $ docker images
    REPOSITORY             TAG                        IMAGE ID            CREATED             SIZE
    hako/ev3rt            v1.0.0                     84e15941698e        3 hours ago         76.7MB
    

    실행하다



    단일 로봇 용 시뮬레이터 사용 절차 (ARM 버전)의 Unity 시뮬레이터 시작 를 참고하여 Unity에서 로봇 시뮬레이터를 시작합니다.

    그런 다음 roscore를 시작합니다. roscore는 mROS로 지정된 IP 주소 환경 (sdk/mros-obj/mros_config/mros_sys_config.h)에서 실행하십시오.

    그런 다음 ev3rt-athrill-ARMv7-A 프로그램을 시작합니다. 방금 빌드로 만든 이미지를 지정하십시오.
    $ docker run -it --rm --net host --name ev3rt hako/ev3rt:v1.0.0
    

    멈추다



    기본적으로는 Ctrl-C로 멈출 것입니다만, 가끔 멈추지 않는 환경도 있는 것 같습니다. 이 경우 docker stop 명령으로 멈출 수 있습니다.
    $ docker stop ev3rt
    

    디버깅



    athrill에는 우수한 디버깅 도구가 있습니다. 디버그하고 싶을 때는 예를 들면 다음과 같이 Docker 컨테이너를 기동하면 곧바로 사용하기 시작할 수 있습니다.
    $ 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
    

    코드를 고치다



    코드 수정은 수중의 ev3rt-athrill-ARMv7-A 디렉트 부하로 할 수 있습니다.

    예를 들어, 로봇을 움직이기 위한 메인 프로그램은 sdk/mros-obj/app.cpp 에 기술되어 있습니다. 여러가지 이지라고 로봇의 거동이 변화하는 것을 관찰해 보세요.
    $ vi sdk/mros-obj/app.cpp
    
    ev3rt-athrill-ARMv7-AVisual Studio Code 등으로 열면 더 개발하기 쉽다고 생각합니다. (에디터는 어디까지나 일례, 취향에 맞게 선택해 주세요.)

    수정 후에는 다시 "빌드""실행"의 순서를 밟아 주세요.
    $ 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
    

    결론



    컨테이너를 활용하면서 수중에서 소스 코드를 이지하거나 디버깅을 위화감 없게 할 수있는 환경이 완성되었습니다.
    라인 트레이서 로봇은 로봇 프로그래밍의 기초가 막혀 매우 공부합니다.
    꼭, 여러분 시험해 주세요.

    좋은 웹페이지 즐겨찾기