최근 인텔이 리얼센스 사업을 접는다는 이야기가 나왔다. 개인적으로 Perception에 흥미가 있어서 (실력은 없다.) 포인트 클라우드를 공부하던 나에게는 아쉬운 소식이었고 그렇다면 리얼센스 대신 사용할 수 있는 카메라가 뭐가 있는지 찾던 중 페북에서 표박사님이 걸어둔 링크를 보게 됐다. https://discourse.ros.org/t/intel-cancelling-its-realsense-business-alternatives/21881 Intel Cancelling its Realsense business: Alternatives? Today it was let out that Intel is closing up shop in supporting robotics sensing with the Rea..
K-dimensional Tree는 K 차원으로 공간상의 점들을 정리하는 자료구조 중 하나이다. 이진트리(binary tree)의 종류인데, 제약조건이 추가 됐을 뿐이다. K-d Tree는 range나 nearset neighbor 탐색에 매우 유용하다. Kd tree는 그 공간의 차원에 제한 되는데, 포인트 클라우드는 일반적으로 3차원이므로 여기서 사용하는 kdTree의 차원은 3차원이다. kd tree는 기본적으로 x축을 기준으로 yz 평면에 평행하게 한번, y축 기준으로 한번, z축 기준으로 한번 나누어 이를 Tree 형식으로 만드는 원리이다. 이렇게 계속 나눠서 이진 트리 형태의 구조가 된다. 사진에서는 KdTree를 이용해서 Nearest-Neighbor 방법이 적용되는 모습을 볼 수 있..
#rangeimage #로봇공학 #pointcloud #포인트클라우드 Range image란 특정 위치에서 환경속의 특정 포인트까지의 거리를 2D 이미지로 표현한 것을 말한다. 특정 위치는 주로 센서의 위치가 되는 경우가 일반적이다. Range image는 거리에 상응하는 픽셀값들을 가지게 된다. 만약 range image를 만드는게 사용 된 센서가 픽셀값들이 잘 켈리브레이션이 되어 있다면 바로 실제 수치값으로 변환될 수 있다. ToF를 쓰는 뎁스카메라에 대해서 이야기해보자. 깊이는 RF펄스 대신 광펄스가 사용된다는 점을 제외하고 rador image와 range image는 비슷하다. ToF는 스캔방식이 아니고 single light pulse 형태로 전체 환경(scene)을 캡쳐한다는 점에서 회전 하..
conditional_filter: /build/pcl-OilVEB/pcl-1.8.1+dfsg1/search/include/pcl/search/impl/organized.hpp:57: int pcl::search::OrganizedNeighbor::radiusSearch(const PointT&, double, std::vector&, std::vector&, unsigned int) const [with PointT = pcl::PointXYZ]: Assertion `isFinite (query) && "Invalid (NaN, Inf) point coordinates given to nearestKSearch!"' failed. conditional filter 튜토리얼을 돌리던 도중에 마주한 에러이..
센서 데이터를 numpy 형태 모았을 경우 따로 point cloud 형태로 바꿔줘야한다. 가장 먼저 바꿔줄 형태는 pcd 이며 point cloud data라는 뜻이다. numpy to point cloud profile_np = np.load('/home/benlee/Desktop/pcd_data/pptk_save_2.npy') ori_pc = pcl.PointCloud(ori_pc_np) #numpy to pcl profile_np = np.load('/home/benlee/Desktop/pcd_data/pptk_save_2.npy') ori_pc = pcl.PointCloud(ori_pc_np) #numpy to pcl 먼저 np.load를 통해 저장해두었던 numpy 파일을 load 해온다...
Point cloud의 경우 실제 표면에 대한 point들의 집합을 말한다고 볼 수 있다. 따라서 Point 들의 집합으로 어떻게 표면을 나타낼 수 있는지가 중요한 요소가 된다. 표면은 작은 평면들의 집합으로 볼 수 있다. 따라서 먼저 Point set들을 평면으로 나타낼 수 있어야하고 이를 위해 중학생때 배웠던 평면방정식을 한번 되짚어보자. 평면 방정식은 점 3개의 위치만 알면 이를 평면식으로 나타낼 수 있다. 점 p1, p2, p3와 크래머의 정리를 이용해서 평면의 법선벡터와 원점과의 거리 d를 확인 할 수 있다. Pointcloud에서는 2가지 방법으로 법선 벡터를 찾을 수 있다. 1. point cloud에서 surface meshing 방법을 이용해 surface를 만들고 mesh를 바탕으로 법..
PCL의 기초인 passthrough filter랑, statistical outlier filter를 돌려봤다. 이전 글인 Point cloud 얉은 지식 1편에서(ropiens.tistory.com/59) 언급했던 필터들이다. 오리지널 이미지는 이렇게 생겼다. 이미지를 보면 경사면 부분에 노이즈가 많고, 윗부분에 노이즈가 있는 걸 알 수 있다. 이렇게 일반적인 포인트 클라우드 영역에서 벗어난 포인트들은 passthrough filter로 지워줄 수 있다. passthrough filter를 거치면 벗어난 포인트들이 사라진다. 이미지 처리에서 ROI랑 같은 원리다. 각 point.x , y, z 값에서 한 영역을 정하여 pass range 를 설정해주면 된다. 이 이미지는 statistical outl..
설치 환경 Ubuntu 20.04 ROS Noetic(에서 뭔가 문제가 있다..추후에 확인하는 걸로 개인적으로 멜로딕으로 하는 게 맞는 것 같다...) !!! 참고로 로스를 깔면 PCL이 설치되어 있다. 새로 잘못깔면 ROS를 밀어야하는 경우도 생기니 조심하자.!!! 설치 순서 1. 설치 파일 받기 https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.10.1 tar xvfz pcl-pcl-1.10.1.tar.gz tar xvfz pcl-pcl-1.10.1.tar.gz 2. 경로 이동 후 build 폴더 만들기 cd pcl-pcl-1.7.2 && mkdir build && cd build 3. CMake 하기 cmake .. 4. install 하기 ..