11-09 09:15
Notice
Recent Posts
Recent Comments
관리 메뉴

BAN2ARU

[Rasp/Lidar] 라즈베리파이에서 도커환경에서 ROS2를 통해 라이다 실행하기 본문

Linux/Raspberry pi

[Rasp/Lidar] 라즈베리파이에서 도커환경에서 ROS2를 통해 라이다 실행하기

밴나루 2023. 5. 16. 12:19
반응형

라즈베리파이4에 도커 설치하는 법

 

[Rasp/Docker] 라즈베리파이4에 도커 설치하기

라즈베리파이4에 도커를 설치해보자! 설치하고자하는 이유는 라즈베리파이 OS에 ROS2를 사용하고자 하는데, 공식홈페이지에서 docker를 활용하는 방법을 추천하여 우선 docker를 설치하고자 한다.

ban2aru.tistory.com

도커 환경에서 ROS2 설치하는 법

 

[Rasp/ROS2] 라즈베리파이4 OS에 도커를 활용하여 ROS2 설치

라즈베리파이4에 Docker 설치하기 : 도커 활용에 앞서 라즈베리파이4에 도커 설치하는 방법은 아래 링크에 있음! [Rasp/Docker] 라즈베리파이4에 도커 설치하기 라즈베리파이4에 도커를 설치해보자!

ban2aru.tistory.com

 

도커 GUI 설정하는 법

 

[Rasp/ROS2] 라즈베리파이4 OS에 도커를 활용하여 ROS2 실행 - turtlesim_node

이 글에 앞서 라즈베리파이4에 도커 설치하기는 해당 부분에서 확인할 수 있음 [Rasp/Docker] 라즈베리파이4에 도커 설치하기 라즈베리파이4에 도커를 설치해보자! 설치하고자하는 이유는 라즈베리

ban2aru.tistory.com

 

라즈베리파이4에 도커 설치 및 ROS2 설치 관련해서는 위의 포스팅을 활용해주시기 바랍니다~ 그리고 굳이 docker 환경이 아닌 local 환경에서도 활용가능하며 local 환경인 경우에는 github부분부터 따라해주시면 됩니다~

 

활용한 라이다 기종은 cyglidar d1이며, 라즈베리파이보드에 usb를 활용하여 연결시켜주었습니다.

 

이전에 만들어둔 도커컨테이너 실행하기

우선 도커 리스트를 확인해봅니다.

docker ps -a

현재 저의 docker는 다음과 같은 리스트가 있습니다. 그 중에서 GUI8 설정을 해두었던 ros_gui를 활용하여 진행해보고자 합니다. 우선 라즈베리파이에 DISPLAY 설정을 해둡니다.

export DISPLAY=:0.0
xhost +local:docker

이후에 컨테이너를 시작한 후에 실행합니다.

docker start [컨테이너ID 또는 이름]
docker attach [컨테이너ID 또는 이름]

# 실행 예시
docker start ros_gui
docker attach ros_gui

 

공식 Github 차례대로 진행해주기

cyglidar d1 기종의 경우에는 공식 github 페이지에서 원활하게 기기를 돌릴 수 있도록 공유하고 있습니다. 공식 github 페이지를 참조하여 차례대로 진행해주시면 됩니다.

경로 생성

mkdir의 -p 옵션은 존재하지 않는 중간의 디렉토리 또한 자동으로 생성해주는 옵션입니다.

mkdir -p ~/cyglidar_ws/src/

경로 접속하여 git clone 수행 후에 build 하기

cd ~/cyglidar_ws/src/
git clone -b ROS2-v0.3.0 https://github.com/CygLiDAR-ROS/cyglidar_d1.git
cd ..
colcon build

Udev 설치

cd ~/cyglidar_ws/src/cyglidar_d1/scripts
chmod +x create_udev_rules.sh
./create_udev_rules.sh

local_setup.sh 실행 (임시이므로 새롭게 터미널열면 다시 해줘야 됨)

cd ~/cyglidar_ws
. install/local_setup.bash

Cyglidar 실행

ros2 launch cyglidar_d1_ros2 cyglidar.launch.py

 

다른 터미널(라즈베리파이 터미널로 접속도 됨)로 접속하여 다음과 같이 작성해주면

docker exec ros_cyglidar /bin/bash -c ". /opt/ros/foxy/setup.bash && ~/cyglidar_ws && . install/local_setup.bash && ros2 launch cyglidar_d1_ros2 view_cyglidar.launch.py"

성공!! 사람모습으로 보이나요?

 

오류 1. An exception was thrown [open: No such file or directory]

더보기

위와 같은 오류는 현재 docker에서 host 상의 dev 정보를 공유하지 않아서이다. 이를 해결하기 위해서는 기존의 docker를 commit하고 옵션을 추가하여 run을 해주면 된다. (혹시 docker 컨테이너에 옵션 추가하여 실행하는 더 간편한 방법이 있으면 알려주시면 감사하겠습니다!)

이후에 local_setup.sh부터 다시 실행시키면 된다!

docker commit [컨테이너명 or 이미지이름] [새로운 이미지이름]
docker run --name [컨테이너 이름] -it -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY [이미지명] /bin/bash

# 예시
docker commit ros_gui ros_cyglidar
docker run --name ros_cyglidar -it -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY ros_cyglidar /bin/bash

오류 2. An exception was thrown [open: Operation not permitted]

더보기

위와 같은 오류는 docker에 권하이 없어서 생긴 문제로 보인다. 옵션에 -privileged를 추가해주며, 또한 github 내용을 참조하여 /dev/ttyUSB0에도 권한을 부여해준다.

sudo chmod 777 /dev/ttyUSB0
docker commit [컨테이너명 or 이미지이름] [새로운 이미지이름]
docker run --name [컨테이너명] -it --privileged -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY [이미지명] /bin/bash

# 예시
sudo chmod 777 /dev/ttyUSB0
docker commit ros_cyglidar ros_cyglidar
docker stop ros_cyglidar
docker rm ros_cyglidar
docker run --name ros_cyglidar -it --privileged -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY ros_cyglidar /bin/bash

 이후에 local_setup.sh부터 다시 실행시키면 된다.

 

 

 

라즈베리파이를 활용하여 라이다를 실행하는 것까지 진행해보았다. 공부한 내용을 정리하다보니 중간중간 오류부분을 애초에 처음부터 옵션에 넣어서 정리하면 어떨까라는 생각이 들어서 시간이 된다면 전체적으로 정리하여 포스팅할 수 있도록 해야겠다.

 

 

해당 내용의 경우는 개인 공부를 정리한 것으로 틀린 부분이 있을 수도 있습니다! 해당 부분에 대한 지적이나 의문은 언제나 환영입니다^^*

728x90
Comments