목차

ROS 스터디 #6: 로봇,센서,모터

2021년 01월 13일 수요일 19:00
ZOOM 화상회의

1. 패키지

ROS에는 현재 다양한 패키지들이 있다. 사용할 하드웨어에 맞는 패키지들을 선택해주면 되는데 하드웨어의 카테고리에 따라 패키지들도 나눠져 있다. 크게 로봇 관련 패키지, 센서 관련 패키지, 모터 관련 패키지로 나눠져있다.

1.1. 로봇 패키지

ROS 공식 페이지: 다양한 로봇 패키지들이 나와 있다.1)

apt-cache search ros-melodic

sudo apt-get install ros-melodic-패키지명-desktop

sudo apt-get install ros-melodic-turtlebot3 ros-melodic-turtlebot3-msgs ros-kinetic-turtlebot3-simulations

cd ~/catkin_ws/src

hg clone http://code.google.com/p/amor-ros-pkg/

1.2. 센서 패키지

ROS wiki-Sensor: 다양한 센서패키지들이 나와 있다.2)

센서 패키지의 종류

1.2.1. 실습

1.2.1.1. USB 카메라

ROS 에서 지원하는 USB카메라. 패키지를 이용하여 실습을 진행해 볼 수 있다

우선 카메라를 USB포트에 연결하고 터미널 창을 연뒤 'lsusb' 명령어로 접속을 확인한다.

sudo apt-get install ros-melodic-uvc-camera

sudo apt-get install ros-melodic-image-*
sudo apt-get install ros-melodic-rqt-image-view

roscore rosrun uvc_camera uvc_camera_node

rostopic list

rosrun image_view image_view image:=/image_raw

rosrun image_view image:=/image_raw

rviz

gedit ~/.bashrc

export ROS_MASTER_URI = http://192.168.1.100:11311
export ROS-HOSTNAME = 192.168.1.100 

bashrc파일의 제일 밑으로 내려가서 위 같이 ROS_MASTER_URI와 ROS-HOSTNAME 변수를 수정한다. 자신의 IP는 ifcnofig명령어로 확인 할 수 있다.

roscore
rosrun uvc_camera uvc_camera_node

그 다음 roscore와, uvc_camera_node를 구동한다.

1.2.1.2. 원격 컴퓨터

bashrc파일의 제일 밑으로 내려가서 다음과 같이 ROS_MASTER_URI와 ROS-HOSTNAME 변수를 수정한다. 자신의 IP는 ifcnofig명령어로 확인 할 수 있다.3)

export ROS_MASTER_URI = http://192.168.1.100:11311
export ROS-HOSTNAME = 192.168.1.120 

rosun image_view image:=/image_raw

로봇에서 촬영한 이미지를 원격으로 받아 볼 수 있도록 하기 위해서는 위와 같은 기술이 필요하다. 탐사로봇, 화상회의 로봇, 웹캠 등이 이러한 기술을 활용하고 있다.

1.2.1.3. 카메라 캘리브레이션

카메라로부터 얻은 이미지 정보에서 정확한 거리 정보를 얻으려면 카메라나 다른 렌즈 특성, 렌즈와 이미지 센서 사이의 거리, 뒤틀린 각도 등의 정보가 필요하다. 투사 과정에서 카메라마다의 고유 특성으로 인해 조금씩 다른 값을 갖기 때문이다. 카메라마다 이미지 센서 사이의 거리가 다르고 렌즈와 이미지센서 종류가 다를 경우 등이 있다. 이러한 부분들을 보정하기 위하여 카메라의 고유 파라미터 값을 찾는 것이 중요한데 이를 카메라 캘리브레이션이라고 한다. ros에서 제공되는 패키지를 이용하여 카메라 캘리브레이션을 할 수 있다.

sudo apt-get install ros-kinetic-camera-calibration
rosrun uvc_camera uvc_camera_node

rostopic echo /camera_info
아직 카메라 캘리브레션에 대한 정보가 없으므로 모두 초깃값으로 표시된다.

체스보드준비: 카메라 캘리브레이션은 체스보드를 기준으로 수행한다.4)

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/image_raw camera:=/camera

캘리브레이션 gui에서 calivrate 버튼이 활성화 되면 누른다.

cd /tmptar -xvzf calibrationdata.tar.gz
camera calibration 파라미터를 담은 카메라 파라미터 파일을 생성했다. calibrationdata.tar.gz의 압축을 풀면 캘리브레이션에서 사용된 이미지 파일들과 맬리브레이션 파라미터들이 저장된 ost.txt.파일을 확인 할 수 있다.

mv ost.txt ost.ini //ost.txt 파일을 ost.ini파일로 바꾸기 
rosrun camera_calibration_parsers convert ost.ini camera.yaml //camera_calibration_parsers 패키지의 convert 노드로 camera.yaml을 생성
mkdir ~/.ros/camera_info //~/.ros/camera_info/폴더에 저장
mv camera.yaml ~/.ros/camera_info

camera.yaml 파일을 열면 camera_matrix5), distortion_coefficients6)등의 값을 확인할 수 있다. 자세한 정보는 여기 참조

rosrun uvc_camera uvc_camera_node
rostopic echo /camera_info

처음엔 0이었던 D,K,R,P의 값들이 채워져있는것을 확인 할 수 있다.

1.2.1.4. 심도 카메라(Depth Camera) with RealSens

sudo apt-get instll ros-kinetic-librealsense ros-melodic-realsense-camera

roscore
roslaunch realsense_camera r200_nodelet_default.launch

Point Cloud Data의 시각화

depth camera의 3차원 거릿값은 대상체와의 거리를 한 점으로 표시하고 이들 점들의 집합체가 구름과 같다고 하여 Point Cloud Data라 부른다. GUI환경에서 Point Cloud Data를 확인하기 위해 RViz를 실행하고 다음 순서대로 디스플레이 옵션을 변경한다.

  1. Global Options → Fixed Frame 을 camera_depth_frame으로 변경한다.
  2. RViz 왼쪽 아래의 Add 버튼을 클릭한 다음 pointcloude2를 선택하여 추가한다. 세부 설정으로 Topic으로 camera/depth/points를 설정하고 원하는 형태의 크기나 색상 등을 선택한다.
  3. 모든 설정을 마쳤다면 그림 8-14처럼 PCD 값을 확인할 수 있다. 색상 기준은 X축으로 지정하였으므로 X축에서 멀어질 수록 보라색에 가깝게 나타난다.

그 이외의 다른 depth camera를 이용할 경우는 위키에 나온 사용법을 참고.

1.2.1.5. 레이저 거리 센서

LDS7)는 레이저 거리 센서이며 레이저 광원을 이용하여 물체와의 거리를 측정하는데 사용하는 센서이다. 주로 slam, 물체인식 등에 사용된다.

LDS 테스트

ros 에서 대표적인 LDS 지원 패키지로는 SICK 사의 LDS를 지원하는 sick300, sicktoolbox, sicktoolbox_wrapper 패키지, Hokuyo 사의 hokuyo_node, urg_node패키지, velodyne사의 velodyne패키지가 있다. 중저가형 가격이 싸야 동아리 수준에서 만들 수 있다 으로는 RPLIDAR를 지원하는 rplidar, 터틀봇3에서 사용하는 hls_lfcd_lds_driver이 있다.

동아리에 터틀봇이 있으므로 hls_lfcd_lds_driver관련한 실습 자료를 살펴보면

sudo apt-get install ros-melodic-hls_lfcd_lds_driver

ls -l .dev/ttyUSB* //연결되었을때 ttyUSB*로 인식됨

sudo chmod a+rw /devttyUSB0

ttyUSB0의 사용권한이 주어지지 않았으면 chmod 명령어로 권한을 설정한다.

roslaunch hls_lfcd_lds_driver hls_laser.launch

rostopic echo /scan

 rviz
roslaunch hls_lfcd_lds_driver view_hls_laser.launch

1.2.1.5. RPLIDAR

8)

ls -l /dev |grep ttyUSB
sudo chmod 666 /dev/ttyUSB0
roslaunch rplidar_ros view_rplidar.launch

1)
KAsimov 동방에도 tutlebot이 있음
2)
RGB-D cameras 중 realsense는 동방에 있음
3)
단 ROS-HOSTNAME만 원격 컴퓨터의 ip이며 ROS_MASTER_URI는 카메라가 연결된 컴퓨터의 ip이다
4)
캘리브레이션용 체스보드: 8×6
5)
카메라 내부 행렬
6)
왜곡계수
7)
Laser Distance Sensor
8)
우리 동방에 RPLIDAR가 있었다??!