======ROS 스터디 #6: 로봇,센서,모터====== 2021년 01월 13일 수요일 19:00\\ ZOOM 화상회의 {{youtube>cpIZ7mqTFZo?medium}} ======1. 패키지====== ROS에는 현재 다양한 패키지들이 있다. 사용할 하드웨어에 맞는 패키지들을 선택해주면 되는데 하드웨어의 카테고리에 따라 패키지들도 나눠져 있다. 크게 로봇 관련 패키지, 센서 관련 패키지, 모터 관련 패키지로 나눠져있다. =====1.1. 로봇 패키지===== [[http://robots.ros.org|ROS 공식 페이지]]: 다양한 로봇 패키지들이 나와 있다.((KAsimov 동방에도 tutlebot이 있음)) 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. 센서 패키지===== [[http://wiki.ros.org/Sensors|ROS wiki-Sensor]]: 다양한 센서패키지들이 나와 있다.((RGB-D cameras 중 realsense는 동방에 있음)) **센서 패키지의 종류** * **1D Range Finders**: 저가의 로봇을 만들 때 사용할만한 적외선 방식의 직선거리 센서들이다 * **2D Range Finders**: 2차 평면상의 거리를 계측할 수 있는 센서로 주로 내비게이션에 많이 사용되는 센서들이다 * **3D Range Finders**: intel사의 RealRense, Microsoft 사의 Kinect, ASUS사의 Xion과 같은 3차원 거리 측정에 사용되는 센서들이다. * **Audio/Speech Recognition**: 현재 음성인식 관련 부분은 매우 적지만, 지속해서 추가될 것으로 보인다. * **Cameras**: 물체인식, 얼굴인식, 문자판독 등에 많이 사용되는 카메라의 드라이버, 각종 응용 패키지 들을 모아두었다. * **Sensor Interfaces**: USB및 웹 프로토콜을 지원하는 센서는 매우 적다. 아직까지도 많은 센서들은 마이크로프로세서에서 정보를 쉽게 얻을 수 있는 센서가 많다. 이러한 센서는 마이크로프로세서의 UART 및 미니 PC계열에서 ROS와의 연결을 지원한다. || ====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명령어로 확인 할 수 있다.((단 ROS-HOSTNAME만 원격 컴퓨터의 ip이며 ROS_MASTER_URI는 카메라가 연결된 컴퓨터의 ip이다)) 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 아직 카메라 캘리브레션에 대한 정보가 없으므로 모두 초깃값으로 표시된다. || [[http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf|체스보드준비]]: 카메라 캘리브레이션은 체스보드를 기준으로 수행한다.((캘리브레이션용 체스보드: 8x6)) 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_matrix((카메라 내부 행렬)), distortion_coefficients((왜곡계수))등의 값을 확인할 수 있다. 자세한 정보는 [[http://http://wiki.ros.org/image_pipeline/CameraInfo|여기]] 참조 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를 실행하고 다음 순서대로 디스플레이 옵션을 변경한다. - Global Options -> Fixed Frame 을 camera_depth_frame으로 변경한다. - RViz 왼쪽 아래의 Add 버튼을 클릭한 다음 pointcloude2를 선택하여 추가한다. 세부 설정으로 Topic으로 camera/depth/points를 설정하고 원하는 형태의 크기나 색상 등을 선택한다. - 모든 설정을 마쳤다면 그림 8-14처럼 PCD 값을 확인할 수 있다. 색상 기준은 X축으로 지정하였으므로 X축에서 멀어질 수록 보라색에 가깝게 나타난다. 그 이외의 다른 depth camera를 이용할 경우는 [[http://wiki.ros.org/Sensor#A3D_Sensors_.28range_finders_.26_RGB-d_cameras.29|위키]]에 나온 사용법을 참고. || ===1.2.1.5. 레이저 거리 센서=== LDS((Laser Distance Sensor))는 레이저 거리 센서이며 레이저 광원을 이용하여 물체와의 거리를 측정하는데 사용하는 센서이다. 주로 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=== ((우리 동방에 RPLIDAR가 있었다??!)) ls -l /dev |grep ttyUSB sudo chmod 666 /dev/ttyUSB0 roslaunch rplidar_ros view_rplidar.launch