본문 바로가기

터틀봇 2D 라이다 LDS-01 Lidar 센서 ROS 에서 구동해보기 본문

BF 2024/ROS2

터틀봇 2D 라이다 LDS-01 Lidar 센서 ROS 에서 구동해보기

jaegomhoji 2023. 5. 9. 15:05

 LDS-01 실물 ( 분리한 상태 ) 

 

잘돌아간다. 

 

 

https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/#appendix-lds01

 

ROBOTIS e-Manual

 

emanual.robotis.com

 

공홈에서 확인해보니 ROS kinetic 버전 패키지가 있는데 이는 ROS1 willy, 20.04 이전의 리눅스에서 돌아감 

rosversion -d 로 현재 설치된 버전 확인하면, ROS1 noetic. 

 

Github 링크에서 확인해본 결과 noetic 버전 pass 받아서 실행 가능함. 

https://github.com/ROBOTIS-GIT/hls_lfcd_lds_driver

 

GitHub - ROBOTIS-GIT/hls_lfcd_lds_driver: ROS package for HLDS HLS-LFCD LDS driver

ROS package for HLDS HLS-LFCD LDS driver . Contribute to ROBOTIS-GIT/hls_lfcd_lds_driver development by creating an account on GitHub.

github.com

 

 

ROS 설치 방법 참고 ( 레포 등록 ~ 키 설정 ~ 설치 ~ 환경 셋업 = 배시 설정, 의존성 패키지 설치 ) 

http://wiki.ros.org/noetic/Installation/Ubuntu

 

noetic/Installation/Ubuntu - ROS Wiki

If you rely on these packages, please support OSRF. These packages are built and hosted on infrastructure maintained and paid for by the Open Source Robotics Foundation, a 501(c)(3) non-profit organization. If OSRF were to receive one penny for each downlo

wiki.ros.org

 

 

.bashrc에 등록한 alias noetic으로 실행  

 

alias eb='nano ~/.bashrc'
alias sb='source ~/.bashrc'
alias gs='git status'
alias gp='git pull'
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
alias noetic='source /opt/ros/noetic/setup.bash'

다운받은 패키지는 catkin_ws/src/hls_lfcd_lds_driver로 워크스페이스의 소스 폴더 안에 위치시킨다 

바로 catkin_make를 하면 다음과 같은 오류가 뜬다 

 

Could NOT find PY_em (missing: PY_EM) 
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):
  Unable to find either executable 'empy' or Python module 'em'...  try
  installing the package 'python3-empy'
Call Stack (most recent call first):
  /opt/ros/noetic/share/catkin/cmake/all.cmake:164 (include)
  /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:20 (include)
  CMakeLists.txt:58 (find_package)

-- Configuring incomplete, errors occurred!
See also "/home/----------/catkin_ws/build/CMakeFiles/CMakeOutput.log".
Invoking "cmake" failed

 

http://wiki.ros.org/ROS/Tutorials/CreatingPackage

이떄,  catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 로 다시 빌드하면 성공한다. 

 

런치 파일 실행 ( 터틀봇3 참고 )  

https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_lds_01/

 

ROBOTIS e-Manual

 

emanual.robotis.com

 

Rviz로 실행하고 확인하는 방법 

이후 term1 : roscore 

term2 : roslaunch hls_lfcd_lds_driver view_hlds_laser.launch

 

이 밖에도 링크에는 GUI 로 실행하는 다른 방법이 있음 

 Rviz로 확인한 결과 

Detection distance 120mm ~ 3,500mm
Ambient Light Resistance 10,000 lux or less
Sampling Rate 1.8kHz

 

감지거리가 대략 3m 정도 되는 것 같고, 테스트는 실내에서 진행해서 주변광 저항은 문제가 되지 않았다. 

 

거리 별 오차와 스캔율, 스캔 범위는 다음과 같다.  비교적 정확하게 검출이 되는 것 같다. 

Distance Range 120 ~ 3,500mm
Distance Accuracy (120mm ~ 499mm) ±15mm
Distance Accuracy(500mm ~ 3,500mm) ±5.0%
Distance Precision(120mm ~ 499mm) ±10mm
Distance Precision(500mm ~ 3,500mm) ±3.5%
Scan Rate 300±10 rpm
Angular Range 360°
Angular Resolution
럭스 (lux or lx) 국제 단위계의 조명도(조도, illuminance )의 단위.
국제 단위계(SI)의 조명도의 단위. 기호 ㏓. 1㎡의 넓이에 11m의 광속이 균등하게 입사했을 때의 조명도로서 광도가 1㏅인 점광원으로부터 1m의 거리에서 빛의 방향에 수직한 면의 조명도에 해당된다. 예를 들면 거실에서 30W고리모양 형광등을 2개 사용한 조명기구를 바닥에서 높이 1.8m의 위치에 달 때, 그 아래 탁자 위의 조명도는 140∼160㏓ 정도이며, 가벼운 독서나 오락은 이 이상이 바람직하다.
칸델라 (candela)  광도 단위. 국제단위계 기본단위로, 기호는 ㏅이다.
광도 단위. 국제단위계(SI) 기본단위로, 기호는 ㏅이다. 지금의 계량법으로는 <10만 1325㎩(파스칼) 압력에서 백금 응고점에 있는 흑체(黑體)의 1/60만㎡의 평평한 표면의 수직방향의 광도>라고 정의되었다. 그러나 이것은 1948년 국제도량형 총회의 정의이며, 1979년 <주파수 540×10㎐인 단색복사(單色輻射)를 방출하는 광원의 복사강도가 1/683W/㏛인 방향에서의 광도>라고 개정되었다. 또 광도의 옛 단위로 쓰인 촉(燭)은 1.0067㏅에 해당한다. 칸델라라는 이름은 수지(獸脂)로 만든 양초를 뜻하는 라틴어에서 유래한다.

야외

직사일광 : 100,000 LUX

쾌청 : 10,000 LUX

구름있는낮 : 1,000 LUX


실내

일반사무실 : 1,000 LUX

시청각실 : 200 LUX

황혼, 호텔로비 : 100 LUX
호텔의 복도 : 50 LUX

주차장, 극장 휴식중의 객석 : 10 LUX
극장의 객석 : 2 LUX

 

만월 시 맑은 밤의 지상 : 0.3 LUX
상현달의 밝기 : 0.001 LUX

별의 밝기 : 0.001 LUX

 

즉,  LDS-01로는 야외의 쾌청한 날씨정도에서 사용 가능할 것 같다. 실내용 라이다는 몇K lux밖에 되지 않는데, 그에 비해서는 조도 저항이 있는 편 같다. 

 

CygLidar 같은 비회전형 제품이 있길래 확인해보았지만, 야외에서는 사용이 불가능할 것 같다. 

https://www.devicemart.co.kr/goods/view?no=13901542 

 

2D/3D Dual 라이다 거리측정 센서 Solid-State ToF LiDAR

초소형 고성능 라이다 (고정형) / 2D(200mm~8,000mm),3D(50mm~2,000mm) 동시 인식 / 측정속도: 15Hz / FOV: 2D/3D Horizontal 120도, 3D Vertical 65도

www.devicemart.co.kr

 

테스트 ~

책상 위에 물건이 많아서 좀 어지럽게 나왔다. 

 

키보드, 사람, 책상 의자 모두 감지되고 있다. 

 

키보드를 치운 상황. ToF 방식이라 의자 앞에 서 있으니 의자는 감지되지 않는다. 

 

이걸로 사람을 감지할 수 있을까? 

cv2 match Template을 사용해서 패턴을 찾아본다. 

우선 패턴 이미지가 필요하다. 알아서 가공하자. 

 

 

import cv2
import numpy as np
path1 = '/home/ ㅁㄴㅇㄻㄴㅇㄹ /ROS2/pattern.png'
path2 = '/home/jㅁㄴㅇㄻㄴㅇㄹ/ROS2/2dlidar2.png'

pattern = cv2.imread(path1)
img = cv2.imread(path2)

# width, height, Channel
print(pattern.shape)
row, col = pattern.shape[:2]

cv2.imshow('pattern_image', pattern)
cv2.waitKey(10000)
cv2.destroyAllWindows()
methods = ['cv2.TM_CCOEFF','cv2.TM_CCOEFF_NORMED',
'cv2.TM_CCORR','cv2.TM_CCORR_NORMED',
'cv2.TM_SQDIFF','cv2.TM_SQDIFF_NORMED']
for i, name in enumerate(methods):
     temp_img = img.copy()
     temp_method = eval(name)
 
     #temp_img = cv2.blur(temp_img, (9,9), anchor=(1,-1), borderType=cv2.BORDER_DEFAULT)
     # template matching
     match = cv2.matchTemplate(pattern,img,temp_method)
 
     min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(match)
 
     print(min_val)
     print(max_val)
     print("min_loc and tuple", min_loc)
     print("max_loc and tuple", max_loc)
 
     if name in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
          top_L = min_loc
          match_value = min_val
     else:
          top_L = max_loc
          match_value = max_val
 
     # point matching , then add original pattern size
     bottom_R = (top_L[0] + col, top_L[1] + row )
     color_rgb = (0.125,255)
     cv2.rectangle(temp_img, top_L, bottom_R, color_rgb,3)
 
cv2.imshow('match_image', temp_img)
 
print("type of methods\t:", name)
 
save_root = "/home/your save root /ROS2/"
bridge_str = "lidar_match_Template"
save_path = save_root + bridge_str + name + ".png"
 
cv2.imwrite(save_path, temp_img)
cv2.waitKey(10000)
cv2.destroyAllWindows()
 
 
 

 

상관관계 매칭 결과, 위치를 잘 잡은 것 같다. 충분히 사람 인식에 써먹을 수 있을 것 같다. 

 

제곱 차이 매칭 결과, 상관관계 매칭 결과보다는 원하는 위치가 추출되지 않았다. 

Comments