CLPE-G-Series ROS1 User Guide
- 1 Revision History for Document
- 2 Overview
- 3 ROS ์ฌ์ฉ ๋ฐฉ๋ฒ
- 3.1 ์์คํ ์๊ตฌ์ฌํญ
- 3.2 ROS ์ค์น
- 3.3 ROS ์ค์
- 3.3.1 System dependencies
- 3.3.2 Install CLPE SDK and ROS Driver
- 3.3.3 Install dependencies
- 3.3.4 Build the driver
- 4 ํ๋ก๊ทธ๋จ ์คํ ๋ฐฉ๋ฒ
- 4.1 Lanuch
- 5 Configuration
- 6 RQT
- 6.1 ์คํ ๋ฐฉ๋ฒ
- 6.2 RQT ์ฌ์ฉ ๋ฐฉ๋ฒ
- 7 RVIZ
- 7.1 ์คํ ๋ฐฉ๋ฒ
- 7.2 RVIZ ์ฌ์ฉ ๋ฐฉ๋ฒ
- 8 ์ฐธ๊ณ ์ฌํญ
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 ๋ด์ฉ ์ถ๊ฐ |
ย
Overview
์ด ๋ฌธ์๋ ROS-noetic์ ์ค์น ๋ฐฉ๋ฒ๊ณผ CLPE-G-Series๋ฅผ ROS์์ ๊ตฌ๋ ์ํค๊ธฐ ์ํ ์ฌ์ฉ๋ฒ๊ณผ ์นด๋ฉ๋ผ ์์์ ๋ณด๊ธฐ ์ํ RVIZ ๋ฐ RQT ์ฌ์ฉ๋ฒ์ ๋ํด ์ค๋ช ํ๋ค.
ROS ์ฌ์ฉ ๋ฐฉ๋ฒ
์์คํ ์๊ตฌ์ฌํญ
Requirements:
ยทย ย ย ย ย CANLAB CLPE-G-Series with supplied PC running Ubuntu 20.04
ยทย ย ย ย ย ROS 1 Noetic
PC์ Ubuntu 20.04๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์ข๋ค.
ROS ์ค์น
noetic/Installation/Ubuntu - ROS Wiki ROS ๊ณต์ ์ค์น ๋งํฌ๋ฅผ ํตํด ROSโnoetic(Recommended)๋ฅผ ์ค์นํ๋ค.
์ค์น๋ฅผ ๋ฌด์ฌํ ์งํํ๋ค๋ฉด ํฐ๋ฏธ๋ ์ฐฝ์ source /opt/ros/noetic/setup.bash ๋ช ๋ น์ด๋ฅผ ํตํด ROS-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์ ์งํํ๋ฉด ๋๋ค.
install ๊ณผ์ ์์ ๊ทธ๋ฆผ 5์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ฌด์ํ๊ณ ์งํํ์ฌ๋ ์คํํ๋๋ฐ ์ง์ฅ์ด ์๋ค.
ํ์ง๋ง ์ด ์ค๋ฅ๋ก ์ธํด ์คํ์ด ๋ถ๊ฐ๋ฅํ ์ sudo apt-get install <ํด๋น package> ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์น๋ฅผ ์งํํด์ค๋ค.
Build the driver
driver๋ฅผ ๋น๋ํด ์ค๋ค.
ํ๋ก๊ทธ๋จ ์คํ ๋ฐฉ๋ฒ
Lanuch
sudo_password๊ฐ ์ซ์(์์:1)์ด๋ฉด password:=\'1\'๋ก ์์ ํด์ ๋ช ๋ น์ด๋ฅผ ์ ์ด ์ค๋ค. ๊ทธ๋ฆผ 6๊ณผ ๊ฐ์ด ๋์จ๋ค๋ฉด ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
slave CLPE-G-Series๋ฅผ ์ฅ์ฐฉํ์ง ์์๋ค๋ฉด, slave ํ๋ผ๋ฏธํฐ๋ฅผ slave:=n ์ผ๋ก ์ ๋ ฅํด์ผ ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ผ์ด๋ฒ๋ camera X๋น 1๊ฐ์ topic์ publishํ๋ค.
/clpe_ros/cam_X/image_raw: UYVY ํ์์ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ topic์ด๋ค.
/clpe_ros/cam_X/compressed : JPEG ํ์์ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ topic์ด๋ค.
๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ yuv422 ์ด๋ค. ์ง์ํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ ์๋ ๊ตฌ์ฑ์ ์ฐธ์กฐํ๋ฉด ๋๋ค.
topic์ ๋ด๊ฒจ์๋ ์ ๋ณด๊ฐ ๊ถ๊ธํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธ ํด ๋ณผ ์ ์๋ค.
ํ๋์ ํฐ๋ฏธ๋์ ๋ ์คํํ ๋ค ros2 topic list ๋ช ๋ น์ด๋ฅผ ํตํด publish ์ค์ธ topic๋ค์ ๋ชฉ๋ก์ ํ์ธํ๋ค.
ros ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ source /opt/ros/noetic/setup.bash ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ฑํ ์์ผ ์ฃผ์ด์ผ ํ๋ค.
๊ทธ ๋ค์ ์ํ๋ topic์ ์ ๋ณด๋ฅผ ํ์ธ์ ํ๊ณ ์ถ๋ค๋ฉด rostopic echo ๋ช ๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์๋ค.
ย ์์: 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 ์ธ์ฝ๋ฉ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํฌ๋งท์ผ๋ก ๋ณํํ ํ์๊ฐ ์๋ค.
yuv422 ์ด์ธ์ ์ธ์ฝ๋ฉ์ ๋ณํํ๋ ๊ณผ์ ์์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํค๋ฏ๋ก ์ฑ๋ฅ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ํผํด์ผ ํ๋ค.
์์ ๋ช ๋ น์ด๋ก launch ํ์ผ์ ์คํํ๋ฉด ๊ทธ๋ฆผ 15์ ๊ฐ์ด RVIZ์์๋ ์ ์์ ์ผ๋ก ์์์ด ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ย