⬛ Revision History for Document
Rev | Date | Description |
---|---|---|
1.0 | 2022-04-28 | Initial Draft |
1.1 | 2024-04-04 | 8채널 지원 내용 추가 |
1.2 | 2024-09-12 | JPEG 지원, RQT 내용 추가 |
1.3 | 2024-12-17 | CLCC-G-02X 지원, 카메라 센서 정보 관련 내용 추가 |
1.4 | 2024-12-18 | 테스트 환경, 센서 별 fps 명시 |
⬛ Overview
이 문서는 CLPE-G-Series를 ROS에서 구동 시키기 위한 사용법과 카메라 영상을 보기 위한 RVIZ 및 RQT 사용법에 대해 설명한다.
⬛ 테스트 환경(PC 사양)
◻️ 주요 사양
PC 모델: Nuvo-8208GC
CPU 코어 개수: 12
CPU 클럭: 3.7Ghz
DRAM 용량: 64GB(32GB+32GB)
DRAM 타입: DDR4
◻️ 상세 사양
CPU | RAM |
---|---|
⬛ ROS 사용 방법
◻️ 시스템 요구사항
Requirements:
· CANLAB CLPE-G-Series with supplied PC running Ubuntu 20.04
PC에 Ubuntu 20.04를 설치하는 것이 좋다.
◻️ ROS 설치
http://wiki.ros.org/noetic/Installation/Ubuntu ROS 공식 설치 링크를 통해 ROS1–noetic(Recommended)를 설치한다.
설치를 무사히 진행했다면 터미널 창에 source /opt/ros/noetic/setup.bash 명령어를 통해 ROS1-noetic를 활성화시키고 rosversion -d 명령어를 통해 확인해 본다.
그림 1과 같이 noetic가 나온다면 정상적으로 설치된 걸 알 수 있다.
그림 2와 같이 나온다면 설치 과정을 다시 진행해 보거나, source /opt/ros/noetic/setup.bash 명령어를 적용시켰는지 다시 한번 확인해 준다.
◻️ ROS 설정
◾ System dependencies
프로그램을 실행하기 전 필요한 패키지들을 설치해 준다.
sudo apt update && sudo apt install git cmake wget gcc g++ libgstreamer-plugins-base1.0-dev python3-colcon* python3-rosdep python3-vcstool -y
◾ Install CLPE SDK and ROS Driver
프로그램을 실행하기 위한 저장소를 만들어 준다.
mkdir -p ~/ws_clpe/src cd ~/ws_clpe/ wget https://raw.githubusercontent.com/canlab-co/clpe_ros/noetic/clpe.repos vcs import src < clpe.repos
위 명령어를 수행하면 그림 3과 같은 폴더 구조가 생성된다.
◾ Install dependencies
프로그램을 실행하기 위한 ROS 외부 패키지들을 설치해 준다.
cd ~/ws_clpe sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro noetic -y
주의 사항
rosdep init 과정에서 그림 4와 같은 오류가 발생하면, sudo rm /etc/ros/rosdep/sources.list.d/20-default.list 명령어를 수행한 뒤 다시 sudo rosdep init을 진행하면 된다.
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list 명령어를 수행한 뒤 다시 sudo rosdep init을 진행하면 된다.
rosdep install --from-paths src --ignore-src --rosdistro noetic -y
install 과정에서 그림 5와 같은 오류가 발생하면 무시하고 진행하여도 실행하는데 지장이 없다.
하지만 이 오류로 인해 실행이 불가능할 시 sudo apt-get install <해당 package> 명령어를 통해 설치를 진행해준다.
◾ Build the driver
driver를 빌드해 준다.
cd ~/ws_clpe catkin_make install --cmake-args -DCMAKE_BUILD_TYPE=Release
⬛ 프로그램 실행 방법
◻️ Lanuch
cd ~/ws_clpe source install/setup.bash ** UYVY ** roslaunch clpe_ros clpe_ros.launch password:=<sudo-password> slave:=n encoding:=yuv422 timestamp:=xavier ** JPEG ** roslaunch clpe_ros clpe_ros.launch password:=<sudo-password> slave:=n encoding:=jpeg timestamp:=local
slave CLPE-G-Series를 장착했다면, slave 파라미터를 slave:=y 으로 입력해야 한다.
sudo_password가 숫자(예시:1)이면 password:=\'1\'로 수정해서 명령어를 적어 준다. 그림 6과 같이 나온다면 정상적으로 실행된 것을 확인할 수 있다.
CLCC-G-01X 장착 시 | CLCC-G-02X 장착 시 |
---|---|
◾ 센서 별 프레임 레이트
하단의 표는 각 센서에 대하여 encoding 방식 별로 프레임 레이트를 정리한 내용이다.
ROS1 | IMX390(8채널) | AR0233(8채널) | ||
---|---|---|---|---|
UYVY | JPEG | UYVY | JPEG | |
fps | 30 | 30 | 24 ~ 25 | 30 |
기본적으로 드라이버는 camera X당 1개의 topic을 publish한다.
/clpe_ros/cam_X/image_raw: UYVY 형식의 이미지 정보를 담고 있는 topic이다.
/clpe_ros/cam_X/compressed : JPEG 형식의 이미지 정보를 담고 있는 topic이다.
기본 인코딩은 yuv422 이다. 지원하는 인코딩 방식은 아래 https://can-lab.atlassian.net/wiki/spaces/RDC/pages/464912807/CLPE-G-Series+ROS1+User+Guide#%E2%AC%9B-Configuration을 참조하면 된다.
topic에 담겨있는 정보가 궁금하다면 다음과 같은 명령어를 통해 확인 해 볼 수 있다.
하나의 터미널을 더 실행한 뒤 ros2 topic list 명령어를 통해 publish 중인 topic들의 목록을 확인한다.
rostopic list
ros 명령어를 사용하기 위해서는 source /opt/ros/noetic/setup.bash 명령어를 통해 활성화 시켜 주어야 한다.
그 다음 원하는 topic의 정보를 확인을 하고 싶다면 rostopic echo 명령어를 통해 확인할 수 있다.
rostopic echo <topic>
예시: rostopic echo /clpe_ros/cam_0/compressed
주의 사항
Launch 과정에서 그림 7과 같은 오류가 발생하면 source /opt/ros/noetic/setup.bash 명령어를 통해 ROS noetic를 활성화시켜 주었는지 확인한다. 프로그램 실행 전 항상 활성화시켜 주어야 한다.
마찬가지로 그림 8과 같은 오류가 발생할 경우 source install/setup.bash 명령어를 적용시켰는지 확인해 준다.
*TIP
매번 이렇게 명령어를 적용 시키기는 힘들기 때문에 ~/.bashrc에 다음과 같이 적어 준다.
alias noetic="source /opt/ros/noetic/setup.bash; source ~/ws_clpe/install/setup.bash"
그리고 source ~/.bashrc 명령어를 통해 적용 시켜준다. 다음 noetic라는 명령어를 입력하면 그림과 같이 활성화된다.
⬛ Configuration
드라이버는 동작을 구성하기 위해 다음 ROS 매개변수를 지원한다. password, slave, encoding과 timestamp는 launch 과정에서 직접 사용하여 수정할 수 있다. 다른 매개변수는 config file을 통해 수정 가능하다.
Key | Description | Default |
password | sudo password | *Required* |
slave | Slave CLPE-G-Series의 존재 여부, 지원하는 인자 : y(Slave CLPE-G-Series 존재), n(Slave CLPE-G-Series 부재) | n |
encoding | Image encoding, 지원하는 포맷 : bgr8, bgra8, rgb8, rgba8, mono16, yuv422, jpeg. Defaults to yuv422. *yuv422, jpeg 이외의 인코딩은 변환하는 과정에서 오버헤드를 발생시킨다. | yuv422 |
timestamp | Image timestamp, 지원하는 포맷 : xavier, local | xavier
|
cam_{n}_enable | Enable camera | true |
cam_{n}_pose | Pose relative to the base, 6 values corresponding to [x, y, z, roll, pitch, yaw] | [0,0,0,0,0,0] |
cam_{n}_frame_id | Defines the frame_id all static transformations refers to | base_link |
cam_{n}_image_latch | Controls latching for camera image messages | false |
cam_{n}_image_queue_size | Controls queue size for camera image messages | 10 |
cam_{n}_info_latch | Controls latching for camera info messages | false |
cam_{n}_info_queue_size | Controls queue size for camera info messages | 10 |
⬛ RQT
RQT는 ROS에서 사용되는 종합 GUI 툴이다. ROS를 설치할 때 보통 함께 설치된다.
◻️ 실행 방법
터미널 창을 열어 source /opt/ros/noetic/setup.bash 명령어를 통해 noetic를 활성화시켜 준다. 그 다음 터미널 창에 rqt
명령어를 치면 실행된다.
실행됨과 동시에 RQT 창 화면이 나타나게 된다.
이렇게 창 화면이 나타나게 되면 정상적으로 RQT를 사용할 수 있게 된다.
◻️ RQT 사용 방법
그림 10과 같이 창 화면에서 드롭박스를 클릭하면 현재 publish되는 topic을 알 수 있다.
원하는 topic을 드롭박스에서 선택하면 영상이 나오는 것을 확인할 수 있다.
⬛ RVIZ
RVIZ는 ROS에서 사용되는 3차원 시각화 도구이다. ROS를 설치할 때 보통 함께 설치된다.
◻️ 실행 방법
터미널 창을 열어 source /opt/ros/noetic/setup.bash 명령어를 통해 noetic를 활성화시켜 준다. 그 다음 터미널 창에 그림 11과 같은 명령어를 치면 실행된다.
실행됨과 동시에 RVIZ 창 화면이 나타나게 된다.
이렇게 창 화면이 나타나게 되면 정상적으로 RVIZ를 사용할 수 있게 된다.
◻️ RVIZ 사용 방법
그림 12와 같이 창 화면에서 ADD → By topic을 클릭하면 현재 publish되는 topic을 알 수 있다. 이미지 정보를 담고 있는 /image_raw topic이 보이게 된다.
그림 13과 같이 원하는 cam_x의 /image_raw를 더블 클릭한 뒤 나오는 Image 항목을 더블 클릭해 준다.
그러면 그림 14와 같이 활성화되는데 하단에 있는 image 항목을 통해 카메라 영상을 확인할 수 있다. Image 항목은 마우스 클릭을 통하여 원하는 곳으로 옮길 수 있다.
unsupported image encoding [yuv422] 이라는 Status:Error가 나타나고, 카메라 화면이 안 나와 No Image 화면이 뜨게 되는데 영상을 보기 위해서는 아래 방법을 참고한다.
⬛ 참고 사항
기본적으로, 이미지 데이터들은 yuv 인코딩으로 publish된다. RVIZ는 yuv 인코딩을 지원하지 않기 때문에 다른 포맷으로 변환할 필요가 있다.
roslaunch clpe_ros clpe_ros.launch password:=<sudo-password> slave:=n encoding:=bgr8 timestamp:=xavier
주의 사항
yuv422 이외의 인코딩은 변환하는 과정에서 오버헤드를 발생시키므로 성능이 중요한 경우에는 피해야 한다.
위의 명령어로 launch 파일을 실행하면 그림 15와 같이 RVIZ에서도 정상적으로 영상이 나오는 것을 확인할 수 있다.