Point Cloud data에 snow 필터 적용하기

이용욱·2022년 3월 17일
1

Lidar

목록 보기
3/6
post-thumbnail

현재 라이다 포인트 클라우드에서 스노우(일종의 노이즈)를 필터링하는 분야는 CAN 워터루 대학의 WAVE Lab이 가장 뛰어나다. 다행히 해당 교수가 운영하는 깃허브에 라이다 디스노우 알고리즘을 오픈 소스로 공개해 놔서 손쉽게 다운로드가 가능했다

1. 소스 파일 다운로드

$ cd cat_sensor_ws/src
$ git clone https://github.com/nickcharron/lidar_snow_removal.git
Git hub
$ cd ..
$ catkin_make

2. launch 파일 수정

워터루에서 사용한 벨로다인과 내가 사용하는 Ouster OS1 라이다의 topic 명이 다르니 먼저 이를 수정해야 함(bag 파일 재생 후 $ rostopic list를 입력하고 $ rostopic hz [토픽명]을 통해 alive 상태 확인)
그런 다음 launch 폴더 내에 있는 모든 launch 파일 내 토픽명을 아래와 같이 변경함
/velodyne_points → /os1_cloud_node/points

  • roslaunch 실행 시 자꾸 에러가 나서 시간을 많이 허비했는데 실제 저장경로로 수정해 줘야 함
  • home 뒤 경로에 반드시 parkjiil (본인의 PC 이름)으로 수정해야 함

이 파일 외에 dynamic filter launch 파일도 all filter launch 파일과 마찬가지로 경로를 변경 (나머지 필터는 경로가 없어 변경할 필요 없음)

3. 추가 수정

1) config 폴더 내 rviz_config.rviz 수정

/velodyne_points → /os1_cloud_node/points

2) src 폴더 dynamicRadiusOutlierFilter.cpp 수정

/velodyne_points → /os1_cloud_node/points

3) script 폴더 내 calculate_rates.py 수정

bag 파일이 저장된 경로로 변경한다 (bag 파일 재생 후 토픽 명으로 받으니 수정 안해도 될 듯 한데 일단은 일치시키는게 맘이 편하니 저장된 경로로 변경했다) → 테스트 결과 변경하지 않아도 무방함

  • 검색할 때 in this repository로 선택하면 동일하게 수정할 내용을 쉽게 검색할 수 있다

4. bag 파일 재생 후 스노우 필터 적용

$ roscore
$ cd 저장 폴더
$ rosbag play *.bag (실제 파일명)

RViz visualization을 위해 아래 입력
$ roslaunch ouster_ros os1.launch replay:=True

이 상태에서 원하는 필터를 launch 해 줌
ex) all filter (rviz에서 원하는 필터 선택 가능)
$ roslaunch lidar_snow_removal filter_all.launch

1024 valid point를 사용하라는 빨간색 에러가 뜨면서 rviz가 실행되는데 여기서 [Global option]을 클릭한 뒤 [os1_lidar]를 선택하고 필터를 고르면 필터링된 결과가 visualiatoin 된다

1024 에러를 해결하기 위해 코드를 살펴봤는데 워터루에서 사용한 라이다 포인트 클라우드 데이터가 실제 눈이 왔을 때 찍은 데이타가 아니고 랜덤으로 360도 지역에 대해 노이즈를 만들어서 사용(rand() × 1024)했던 방식이라서 나오는 에러이고 실제 눈은 모든 1024(=360도)에 존재하진 않으니 결국 무시해도 되는 에러라 생각된다.

필터마다 디스플레이 시간이 달라 기다려야 하는데 여기서도 다이나믹 필터는 [add]를 눌러 DROR/output에서 나오는 pointcloud2를 선택해야 된다(딜레이가 좀 있음)

복셀그리드 필터 적용한 결과인데 포인트 크기가 크니 원거리까지 포인트클라우드 결과가 잘 나타난다

5. 그 외

이 밖에 launch 시에 자동으로 실행된 rviz 창을 닫은 뒤 새로운 터미널을 열어 $ rviz를 실행해도 visulization 가능하다 (pointcloud의 visulization에 차이 있음)

rviz 실행 후 [Display] -[fixed frame]에서 os1_lidar를 선택한 뒤에 [Add]를 선택하여 원하는 필터를 적용하여 필터링 결과를 확인했다. 이 때 dynamic 필터는 output이 저장되는 경로인 DROR 폴더에 필터링된 영상이 저장되니 필터 종류로는 찾을 수 없고 아래와 같이 DROR의 pointcloud2를 선택해야 필터링된 결과를 디스플레이 할 수 있다.

최초 launch 파일 실행 시에 나오는 rviz에서는 영상 플레이가 안되는 부분은 추후 코드수정을 통해 해결할 예정이며, 아래는 두번째 방법으로 테스트한 결과인데 첫번째 방법에 비해 원거리 포인트 클라우드가 작게 표시되었는데 이는 아래 parameter 값들을 변경하니 동일하게 디스플레이할 수 있었다

필터링 적용 전후 포인트 클라우드 이미지 비교


[출처][LiDAR] Point Cloud data에 Snow filter 적용하기|작성자 Petrus

profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다. [개인 홈페이지 : https://woogiee.wixsite.com/youngwooklee]

0개의 댓글