docker에서 lidar, zed camera 세팅

choonsikmom·2024년 3월 20일
0

침착한 일상

목록 보기
13/17
post-thumbnail

나는 환경설정이 정말 싫다.

별거 아닌거 같지만 생각보다 어렵고 .. (뭐 하나 잘못 건드리면 되던 것도 안됨.. 뭐 하나 안맞으면 바로 버전 충돌... 그리고 무한 굴레에 갖히게 됨) 시간 많이 잡아먹고 스트레스 받는다

어~ 그래 억까해봐~ 처음부터 다시하면 그만이야~

그래서 라이브러리 뭐 하나 툭 건들였다 호환성 꼬여서 폭망할 위험을 줄여주는 도커 환경에서 작업하는 걸 좋아한다.

아무튼.. 그래서 도커에서 zed랑 lidar 세팅을 했는데, zed 세팅에서 생각보다 삽질을 많이해서 나중에 또 그러지 말자고 세팅 일지를 정리해본다.


Devices

  • LiDAR : Hesai 128 channel
  • Stereo Camera : ZED 2

Docker env

  • ubuntu 20.04
  • cuda 11.8
  • ros-noetic

Docker run file

도커 이미지 실행 시 run file 만들어두면 편하다.

#!/bin/bash
docker run -it --rm \
  --gpus all \
  --name zed \
  --cpus=0.0 \
  --shm-size=4G \
  --net host \
  --ipc=host \
  -v ${HOME}:/mnt:rw \
  -v /media:/media:rw \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v ${HOME}/.Xauthority:/root/.Xauthority:rw \
  -v /dev/bus/usb:/dev/bus/usb \
  -v /dev/video0:/dev/video0 \
  -v /dev/video1:/dev/video1 \
  -v /dev/video2:/dev/video2 \
  -v /dev/video3:/dev/video3 \
  -v /dev/video4:/dev/video4 \
  -v /dev/video5:/dev/video5 \
  -v /dev/video6:/dev/video6 \
  -v /dev/video7:/dev/video7 \
  -e DISPLAY=$DISPLAY \
  -e QT_X11_NO_MITSHM=1 \
  --device=/dev/bus/usb/002/004 \
  --device=/dev/bus/usb/001/004 \
  --privileged stereolabs/zed:4.0-devel-cuda11.8-ubuntu20.04

--device는 lsusb 해서 나온 zed 경로 추가했고, privileged 옆에 docker image:tag--name만 수정해서 써도 된다.


Zed camera

원래 처음에는 기존에 쓰던 ROS 환경이 있어서 (melodic) 다시 환경 세팅하기는 번거로우니까 여기서 하려고 했는데, cuda 때문에 Zed sdk 깔고 ros-wrapper 빌드하는데 여러 번 실패해서 결국 cuda docker를 새로 받았다.

근데 cuda docker에서도 설치가 잘 안돼서 결국 sdk 달린 docker image를 받았다.

zed SDK가 설치된 docker image는 여기서 확인할 수 있다.

처음에 cuda-runtime-11.8 tag를 pull 받았는데 이거 함정임. 🤬🤬 cuda에 bin 파일이 없어서 ros-wrapper 빌드하다가 toolkit 못찾고 에러난다.

절.대. cuda-devel-11.x tag pull 받으시오.. 그리고 zed-ros-wrapper가 SDK 4 이상 요구하니까 SDK 4 이상 깔린 tag로 빌드해라.

나처럼 아무거나 받다가 소중한 시간 날리지 마시오................

# 참고로 내가 받은 도커 이미지는..
$ docker pull stereolabs/zed:4.0-devel-cuda11.8-ubuntu20.04

ros 는 안 깔려있으니까 따로 설치 해줘야 된다.


ROS-Noetic install

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

$ sudo apt install curl # curl이 이미 설치되어 있지 않은 경우
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

$ sudo apt update

$ sudo apt install ros-noetic-desktop-full

# < 설치 중간에 언어 설정 해주는 키보드 입력이 있다>

~/.bashrc에 source /opt/ros/noetic/setup.bash 추가하여 도커 이미지 로드할때마다 자동으로 ros 실행

$ source ~/.bashrc

$ sudo apt install python3-rosdep
$ sudo rosdep init
$ rosdep update

$ sudo apt install python3-catkin-tools -y

$ sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y

zed-ros-wrapper build

stereolabs github 에 있긴 한데 패스하면 성의 없어 보이니깐 대략적으로 정리해 봄

$ mkdir -p zed_ws/src

$ cd ~/zed_ws/src
$ git clone --recursive https://github.com/stereolabs/zed-ros-wrapper.git
$ cd ../
$ rosdep install --from-paths src --ignore-src -r -y
$ catkin_make -DCMAKE_BUILD_TYPE=Release
$ source devel/setup.bash

제대로 빌드 완료되면 런치하면 된다.

$ roslaunch zed_wrapper zed2.launch 

결국 너무 보고 싶었던 성공화면 띄움 !!

나는 삽질했지만 위에 docker image 받아서 ros 깔고 wrapper 빌드만 하면 문제없이 잘 될 것이다.


Hesai LiDAR setting

LiDAR를 PC에 연결 후, ifconfig 를 실행한다.

$ ifconfig

Lidar가 pc에 잘 연결이 됐으면 enpXs0 가 뜰텐데 IP 주소를 다음과 같이 configure 해주면 된다

$ sudo ifconfig enp5s0 192.168.1.100 

내 PC에는 enp5s0으로 떠서 숫자는 뜬대로 변경해주면 된다. 설정할 주소는 192.168.1.100 이다.

잘 연결됐는지 확인하려면, http://192.168.1.201/ 에 접속해보면 된다.

접속이 잘 되었다면 아래와 같은 lidar status가 뜬다.

추가로 데이터가 잘 들어오고 있는지 확인해 보고 싶다면, whireshark를 통해서 볼 수 있다.

# wireshark 설치
$ sudo apt install wireshark-qt

# wireshark 실행
$ wireshark 

데이터가 잘 들어오고 있다면, source는 192.168.1.201 (lidar ip)이고, UDP protocol로 설정되어 있을 것이다.

여기까지 잘 됐으면 ros에서 build를 진행하면 된다.

~64 channel은  여기의 메뉴얼을 따르면 되고, 128 channel은 여기의 메뉴얼을 따르면 된다.

나는 128채널을 사용해서 swift를 빌드했고, roslaunch 후에 rviz에서 시각화를 할 수 있었다.

$ roslaunch pandar_pointcloud PandarSwift_points.launch

이 lidar의 fixed frame은 PandarSwfit이다.

profile
춘식이랑 함께하는 개발일지.. 그런데 이제 먼작귀를 곁들인

0개의 댓글