【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다
소개
TOPPERS 상자정원/ROS대응판・단체로봇용 시뮬레이터 에서는, ET 로보콘에 준한 라인 트레이스 로봇을 사용한 로봇 프로그래밍을 「실기리스」 「시뮬레이터 내 완결」으로 시험할 수 있습니다.
이 기사에서는 Docker를 사용하여 "환경을 더럽히지 않고"그리고 "평소 편집기를 사용하여"프로그래밍을 할 수있는 개발 환경을 준비하는 방법에 대해 설명합니다.
준비 등
단체 로봇용 시뮬레이터 도입 순서 - Unity의 설치·패키지의 임포트·통신 방식의 전환 방법 와 같이 Unity에 의한 시뮬레이션 환경을 구축합니다.
또한 다양한 방법으로 움직이는 것이 가능합니다만, 이하의 조건으로 움직이는 것으로 합니다.
단체 로봇용 시뮬레이터 도입 순서 - Unity의 설치·패키지의 임포트·통신 방식의 전환 방법 와 같이 Unity에 의한 시뮬레이션 환경을 구축합니다.
또한 다양한 방법으로 움직이는 것이 가능합니다만, 이하의 조건으로 움직이는 것으로 합니다.
UDP 버전
127.0.0.1
로 지정한다. 환경 구축
이번은 ARMv7-A
를 타겟으로 합니다.
athrill의 Docker 컨테이너 빌드
단독으로도 사용할 수 있도록, 스태틱 링크의 athrill 실행 파일을 빌드해, 멀티스테이지 빌드를 이용해 섬세한 환경에 카피하고 있습니다.
DockerfileFROM 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
DockerfileFROM 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.txtDEBUG_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-A
를 Visual 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
결론
컨테이너를 활용하면서 수중에서 소스 코드를 이지하거나 디버깅을 위화감 없게 할 수있는 환경이 완성되었습니다.
라인 트레이서 로봇은 로봇 프로그래밍의 기초가 막혀 매우 공부합니다.
꼭, 여러분 시험해 주세요.
Reference
이 문제에 관하여(【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fudekun/items/6c974a5d09d98da96045
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
$ docker build -t hako/athrill:v1.1.1 -f Dockerfile .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hako/athrill v1.1.1 02a87297b3c2 3 hours ago 69MB
$ cd ${YOUR_WORK_SPACE}
$ git clone https://github.com/toppers/ev3rt-athrill-ARMv7-A.git
$ cd ev3rt-athrill-ARMv7-A
$ vi 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
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
$ cd ev3rt-athrill-ARMv7-A
$ docker build -t hako/ev3rt:v1.0.0 -f Dockerfile .
$ 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-A
를 Visual 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
결론
컨테이너를 활용하면서 수중에서 소스 코드를 이지하거나 디버깅을 위화감 없게 할 수있는 환경이 완성되었습니다.
라인 트레이서 로봇은 로봇 프로그래밍의 기초가 막혀 매우 공부합니다.
꼭, 여러분 시험해 주세요.
Reference
이 문제에 관하여(【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fudekun/items/6c974a5d09d98da96045
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ 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-A
를 Visual 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
결론
컨테이너를 활용하면서 수중에서 소스 코드를 이지하거나 디버깅을 위화감 없게 할 수있는 환경이 완성되었습니다.
라인 트레이서 로봇은 로봇 프로그래밍의 기초가 막혀 매우 공부합니다.
꼭, 여러분 시험해 주세요.
Reference
이 문제에 관하여(【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/fudekun/items/6c974a5d09d98da96045
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ vi sdk/mros-obj/app.cpp
$ 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
컨테이너를 활용하면서 수중에서 소스 코드를 이지하거나 디버깅을 위화감 없게 할 수있는 환경이 완성되었습니다.
라인 트레이서 로봇은 로봇 프로그래밍의 기초가 막혀 매우 공부합니다.
꼭, 여러분 시험해 주세요.
Reference
이 문제에 관하여(【LEGO 로봇 프로그래밍】TOPPERS 상자정원/ROS대응판・EV3RT를 로컬 환경을 최대한 더럽히지 않고 개발한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fudekun/items/6c974a5d09d98da96045텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)