꿈꾸는 개발자

TurtleBot3 키보드 원격 조종(docker 사용) 본문

TurtleBot3

TurtleBot3 키보드 원격 조종(docker 사용)

Anssony 2021. 12. 29. 21:58

TurtleBot3 에 docker 를 이용해 컨테이너를 생성시켜서 키보드 원격 조종을 해봤습니다.

 

docker 를 사용한 이유 : 버전 호환성 문제로 인해 충돌이 일어나는 것을 방지하고 개발 환경 구성을 편하게 하기 위해

 

 

환경

model : TurtleBot3(Raspberry pi 3 B+)
OS + docker : Raspberry pi OS(호스트) + Docker(Ubuntu 18.04 + ROS2 dashing)

SSH 접속 방식과 SSH 미접속 방식 두 가지로 설명을 했으니 참고 바랍니다.

 

1. SSH 방식

$ ssh pi@{ip_address} [SSH]

 

docker 이미지를 가져옵니다.

Raspberry pi 에서 사용하기 때문에 arm64v8 아키텍처 + Ubuntu 18.04 + ROS2 dashing 을 사용한 이미지를 사용

$ docker pull [이미지]

 

필자가 직접 만든 이미지로 https://hub.docker.com/repository/docker/ans2568/dashing 에서 사용하셔도 됩니다.

자기가 만든 이미지로 사용하셔도 무방합니다.

이미지를 다운받았으면 $ docker images 명령어를 통해 다운 받은 이미지가 보일겁니다.

 

이제 컨테이너를 생성하겠습니다.

$ docker run -d -it --name [컨테이너이름]  --privileged --network=host --device=/dev/video0:/dev/video0 [이미지]

 

여기서 docker 옵션들을 확인해보면

-d : 말 그대로 detach 입니다. -d 없이 컨테이너를 생성시키면 컨테이너 안으로 바로 들어가게 됩니다. 그 상황이 상관 없다면 안넣으셔도 됩니다.

-it : 도커 컨테이너 명령창에서 실행할 명령어를 미리 입력 가능 (저는 실행할 것을 따로 입력하진 않았습니다.)

--name [컨테이너이름] : 이름 변경

--privileged : 컨테이너에 호스트 전권을 넘겨줘서 모든 걸 제어할 수 있도록 동작

--network=host : 네트워크를 호스트와 동일한 네트워크로 설정

--device=/dev/video0:/dev/video0 : turtlebot3 카메라를 컨테이너에서도 제어할 수 있도록 설정

 

 

docker run 에서 -d 를 사용하셨다면 docker attach [컨테이너이름] 를 실행해줍니다.

(-d 를 사용하지 않았다면 생략하셔도 됩니다.)

 

컨테이너에 들어가셨다면, apt update 를 진행해줍니다.

 

저는 편집기 중 nano 를 좋아하는 편이라 nano 설치를 진행하도록 하겠습니다.

$ apt install nano

 

nano 를 이용해서 컨테이너로 들어오거나 터미널을 새로 열 때마다 파일을 소싱해주는 작업을 자동적으로 하게끔 ~/.bashrc 에 설정을 해줍니다.

$ nano ~/.bashrc

 

맨 아래로 내려가서 아래 코드를 추가해줍니다.

source /opt/ros/[ROS버전]/setup.bash    // ROS버전에는 foxy, dashing 등 버전 이름을 넣으시면 됩니다.
export TURTLEBOT3_MODEL=waffle          // 가지고 있는 TURTLEBOT3 의 모델이 waffle 인지 buger 인지 확인 후 넣어주시기 바랍니다.

 

추가한 후 ros2 launch turtlebot3_bringup robot.launch.py 를 실행해줍니다.

 

주의사항 : 만약 제가 만든 이미지를 사용하지 않으셨다면 turtlebot3_bringup 패키지가 없을 수 있습니다. 그런 경우에는 turtlebot3_bringup 패키지를 설치하고 명령어를 사용하시길 바랍니다.

 

명령어 입력하고 나면 터미널 마지막에 RUN! 이 뜨면서 TurtleBot3 에 대한 정보를 가져왔다는 문구가 뜰겁니다.

(시간이 좀 걸릴 수 있습니다.)

 

현재 터미널은 냅둔 상태로 새로운 터미널을 만듭니다.

 

다시 똑같이 SSH 접속을 합니다. [SSH]

 

컨테이너에 새로운 터미널로 들어가야하기 때문에 명령어를 실행해줍니다.

$ docker exec -it [컨테이너이름] bash //새로운 bash 창 띄워줌

 

기존에 robot.launch.py 가 실행된 컨테이너 안에 새로운 bash 창을 생성시켰습니다.

여기서도 nano ~/.bashrc 를 통해 TURTLEBOT3_MODEL=[turtlebot3 모델명] 을 넣어줍시다.

 

파일을 저장하고 나와서

$ . /opt/ros/[ROS버전]/setup.bash 를 진행해줍니다.

 

이제 설정은 다 마쳤습니다.

 

$ ros2 run turtlebot3_teleop teleop_keyboard 를 실행해줍니다.

 

키보드에서 키 입력을 하면 TurtleBot3 바퀴가 움직이는 것을 확인할 수 있습니다.

 

2. SSH 미접속 방식

 

위 SSH 방식에서 SSH 라고 나와있는 부분만 제외하고 실행하시면 됩니다.

 

 

이상 TurtleBot3 키보드 원격 조종에 대해 알아보았습니다.

 

 

궁금한 점이나 질문이 있다면 댓글 부탁드려요.

피드백은 언제나 환영입니다!

'TurtleBot3' 카테고리의 다른 글

TURTLEBOT3를 이용한 slam, navigation 예제 실행  (0) 2022.06.03