일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Data Packet
- Frame rate
- Alpha Prime
- PointCloud
- Multi threaded
- Single threaded
- Azimuth
- Phase Offset
- Data Race
- Smart Pointer
- Interference Pattern
- lidar
- PYTHON
- 센서셋
- object detection
- 3-sigma rule
- VLS-128
- coordinate system
- Phase Lock
- PointCloud Frame
- Veloview
- Alpha Prime(VLS-128)
- Reflectivity
- ApolloAuto
- timestamp
- Coding Test
- HDmap
- Motion compensate
- nvidia
- Quaternion 연산
- Today
- Total
목록엔지니어 설리번의 교육자료 (35)
엔지니어 동행하기

K-D Tree는 데이터를 저장하는 자료구조의 일종입니다. 3차원 Point Cloud 데이터를 K-D Tree에 저장해 놓으면, 특성상 특정 Point와 가장 가까운 Point를 빠르게 찾을 수 있습니다. 즉 Point Cloud Search 알고리즘에 사용할 수 있습니다. 또한 이를 확장해 HDMap 정보를 Load 해 변수에 저장하고 검색하는 데에 K-D Tree를 사용할 수 있습니다. K-D Tree 자료 구조 K-D Tree 자료구조를 이해하는 데 아래 블로그의 글을 참고하면 됩니다. https://haamjamie.tistory.com/31 [Data Structure] K-D Tree What is K-D Tree? K-D tree는 공간을 기반으로 partitioning하는 binary t..

Wireshark를 이용하면 장비 간 주고받는 데이터를 확인할 수 있습니다. LiDAR를 PC에 연결하고 PC에서 LiDAR의 Data Packet을 파싱해 Point Cloud 데이터를 사용합니다. 이때 이를 계산하는 일련의 과정에서 문제가 발생하면 당연히 가장 첫 번째 단에서 데이터가 PC에 잘 들어오는지를 먼저 확인해야 합니다. 즉 LiDAR의 Data Packet이 이더넷에 실리는 데이터 형태를 Wireshark로 확인해야 합니다. Robosense Ruby의 Data Packet 먼저 메뉴얼 상에 Ruby LiDAR의 Data Packet 구조를 확인해야 합니다. Robosense에서는 MSOP이라는 용어를 정의해서 사용하고 있습니다. MSOP(Main data Stream Output Poro..

Singleton Pattern은 생성 패턴 중 하나로, Process가 실행 중에 오직 하나의 Object만 생성되도록 강제하는 Design Pattern입니다. 이에 대해 자세히 알아보도록 하겠습니다. Singleton Pattern 해당 Pattern을 갖는 Class를 사용해서 여러 개의 Object를 만들어도 메모리 상에는 하나의 Object만 가리키게 됩니다. 싱글톤 패턴을 사용하는 경우는 다음과 같습니다. - 하나의 Object가 Resource를 많이 차지하는 경우 - 외부 네트워크와 연결하는 Object가 단 한 개만 있어야 하는 경우 예제 코드: Macro 함수로 구현 #define DECLARE_SINGLETON(classname) \ public: \ static classname ..

NVIDIA CUDA를 활용하여 계산을 가속화하고 결과적으로 Object Detection 컴포넌트의 출력 frame을 높일 수 있습니다. 이번 포스팅에서는 Object Detection 결과인 Bounding Box에 적용하는 NMS(Non Maximum Suppression) 알고리즘을 병렬 프로그래밍으로 작성해보겠습니다. NMS에 대한 설명보다 CUDA Programming의 전체적인 그림을 그리는데 중점을 둘 것입니다. CUDA Programming, Data Flow 핵심 아이디어는 데이터를 CPU와 GPU사이에서 옮기는 비용이 크기 때문에, 가속하고자 하는 연산은 GPU에서 모두 끝내고, 결과 데이터만 CPU로 다시 가져오는 방식으로 프로그래밍을 한다는 것입니다. Data Flow를 3가지 단..

두 벡터의 사이각(θ) 계산 v1, v2 벡터의 길이를 구하고 벡터 내적 정의를 이용해서 cosθ를 계산합니다. 마지막으로 arc cosine 함수를 이용해서 사이각을 구하면 됩니다. 벡터 길이를 구하는 구체적인 방법은 아래 블로그 글을 참고하면 됩니다. https://kukuta.tistory.com/152 벡터(vector)의 크기(길이) [이전] 포스트에서 벡터는 크기와 방향을 가진다고 했으며, 그중 크기(또는 길이)를 나타내는 것이 바로 벡터의 '길이'이다. v = 일 때, 벡터 v의 크기는 얼마인가? 대략 보면 답이 없다. 값 세 개로 kukuta.tistory.com 벡터 내적 정의는 아래와 같습니다. 코드 예제 template T CalculateTheta2DXY(const Eigen::Ma..
Floating Point 가 같은지 비교할 때, == operator를 사용하면 의도하지 않은 결과를 얻게 됩니다. 그 이유는 컴퓨터가 Floating Point를 정확히 그 값으로 가지고 있는 것이 아니라 그 값과 가장 가까운, 컴퓨터로 표현할 수 있는 값으로 가지고 있기 때문입니다. 그렇다면 Floating Point가 같은지 비교하기 위해서는 어떻게 해야 하는지에 대한 내용을 정리하도록 하겠습니다. epsilon() epsilon() 함수는 1.0과 Type T로 나타낼 수 있는 1.0보다 큰 가장 작은 값의 차이를 출력합니다. 즉, Type T로 나타낼 수 있는 0에 가장 가까운 값을 반환합니다. 예제 1 : Floating Point가 같은 값인지 판단 epsilon()함수의 반환 값을 이용하..

LiDAR를 통해 Object Detection을 하게 되면, 결과 값은 LiDAR의 Body Frame 기준의 값으로 얻어집니다. 이 값을 UTM이라는 Local Frame의 값으로 변환하기 위해서는 Coordinate Frame(= Coordinate System) 간의 변환 관계를 계산해야 합니다. 따라서 Transform에 대해 설명드리고, 어떻게 좌표계간 데이터를 변환할 수 있는지 설명드리겠습니다. (Object Detection 관점이 아니더라도 Transform에 대해 이해할 수 있도록 글을 작성하였습니다.) 먼저 Coordinate System에 대한 이해가 필요합니다. 이전 포스팅을 먼저 확인해주시길 바랍니다. (해당 포스팅에서 Frame과 Coordinate System을 혼용해서 사용..

Python을 이용하면, 실무에서 수작업으로 해야 하는 작업을 자동으로 처리할 수 있습니다. 한 가지 예로 이미 폴더 구조가 다 짜여 있는 상황에서, 일괄적으로 특정 규칙을 적용해서 폴더 이름을 바꿔야 하는 경우가 있습니다. 이번 포스팅에서는 이런 업무를 어떻게 자동화할 수 있는지에 대해 설명드리겠습니다. 폴더 이름 바꾸기 폴더의 이름을 바꾸는 코드는 다음과 같습니다. #change_folder_name.py import os os.rename("Folder", "Folder_changed") 이 때, change_folder_name.py은 바꾸고자 하는 폴더(Folder)와 같은 경로에 있어야 합니다. 같은 경로에 "Folder"이름의 폴더가 없으면 에러가 납니다. 이 상태에서 python3 chan..