일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- OpenCV 모듈
- 부자 아빠 가난한 아빠
- KPConv
- ros2
- visual slam
- PointNet
- SLAMKR
- 코딩 테스트
- 경제 공부
- 제 6장
- Slam
- exponential mapping
- IMAGE
- TURTLEBOT3
- FeatureMatching
- 코딩테스트
- 입문 Visual SLAM
- logarithm mapping
- rigid KPConv
- deformable KPConv
- PointNet++
- C++
- 코딩테스트 공부
- 2 포인터 알고리즘
- 백준 1253번
- point cloud
- 논문 리뷰
- Docker
- OpenCV
- Raspberry Pi
- Today
- Total
꿈꾸는 개발자
TurtleBot3 키보드 원격 조종(docker 사용) 본문
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 |
---|