본문 바로가기

728x90

LiDAR

(17)
Unity상에서 PCA를 사용해 LiDAR Pointcloud의 바닥을 없애보자 이전 글에서 다뤘던 PCA코드를 Pointcloud 전체에 적용하는 내용입니다. Voxel grid sampling과 같이 grid를 생성하여 진행했습니다. 하지만 차이가 있다면 바닥의 경우 Unity 기준 y축의 정보가 없고, Object가 있는 경우 y축의 정보가 있을 겁니다!! 따라서 grid를 정육면체가 아닌 아래 그림과 같이 직육면체(y축으로 긴)를 grid로 설정하고 grid 내부의 point들에 대해 PCA를 적용하고 Eigen Vector를 얻는다면 Object와 바닥을 효과적으로 구분할 수 있지 않을까?? 하는 생각을 통해 코드를 제작했습니다. using UnityEngine; using OpenCvSharp; using RosMessageTypes.Sensor; using System...
Unity에서 LiDAR 정보에 PCA를 적용해보자 우선 Unity에서 OpenCV를 사용할 수 있도록 package를 Install 해야합니다. PCA를 사용하는 OpenCV코드는 아래와 같습니다!! //PCA 수행 PCA(pac진행할 행렬, 저장할 행렬, 각 데이터 표현 방법) PCA pca = new PCA(Center_mat, new Mat(), PCA.Flags.DataAsRow); 위 코드의 Center_mat의 경우 아래의 코드를 따르게 됩니다. // pca를 하기 위한 데이터 중심이동 Mat Center_mat = new Mat(pointList.Count, 3, MatType.CV_32F); for (int j = 0; j < Center_mat.Rows; j++) { // Center_mat.Set(row, column, value); ..
Unity에서 LiDAR Pointcloud에 DBScan을 해보자 using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Linq; using Unity.VisualScripting; using UnityEngine; using UnityEngine.Experimental.GlobalIllumination; using UnityEngine.UI; using static UnityEditor.Experimental.AssetDatabaseExperimental.AssetDatabaseCounters; public class DBScan : MonoBehaviour { // DBScan 파라미터 설정 public float epsilo..
Unity에서 Voxel grid sampling을 하자 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.Robotics.ROSTCPConnector; using RosMessageTypes.Sensor; public class For_points : MonoBehaviour { // 포인트 값 리스트에 저장 public List pointList = new List(); public uint total_number_of_points; // Voxel grid sampling을 위한 매개변수 public float voxelSize = 0.05f; // 격자 크기 private Dictionary voxelGrid = new Dictionary()..
LiDAR PointCloud 정보를 Unity Sphere obj에 대입해보자 using System.Collections; using System.Collections.Generic; using UnityEngine; using Unity.Robotics.ROSTCPConnector; using RosMessageTypes.Sensor; public class For_points : MonoBehaviour { // 포인트 값 리스트에 저장 public List pointList = new List(); public uint total_number_of_points; // point로 나타낼 obj를 위한 list 생성 public List pools = new List(); // Voxel grid sampling을 위한 매개변수 private Dictionary voxelGr..
Ouster LiDAR 정보를 Unity로 보내기 지난 글에서 Ouster 정보를 Rviz로 보내는 것을 성공했습니다!! 그러나 정말로 필요한 Unity에 정보를 보내는 것은 하지 못했습니다. 하지만 친구의 도움으로 이번에 성공해서 방법을 공유하고자 글을 쓰게 되었습니다!! 우선 docker환경에 필요한 것이 ROS-TCP-Endpoint 입니다!! 저는 해당 git을 이용하였습니다. 그리고 Unity에서 필요한 것은 위 두개의 패키지 입니다!! 해당 패키지는 https://github.com/Unity-Technologies/ROS-TCP-Connector GitHub - Unity-Technologies/ROS-TCP-Connector Contribute to Unity-Technologies/ROS-TCP-Connector development b..
Ouster LiDAR pointcloud를 확인해보자 이전까지 iOS LiDAR정보를 swift에서 사용하는 법에 대한 내용을 잠시 다뤘었습니다. 하지만 swift와 LiDAR에 대해 모두 공부하기에는 마감기한이 다가와서 프로젝트를 수정했습니다... ㅠㅠ 이것은 2보 전진을 위한 1보 후퇴라 볼 수 있죠!! 수정된 프로젝트 내용은 ouster LiDAR 정보를 Unity로 가져온 후 보행자에게 위험을 알리는데 필요한 최적의 범위 또는 최적의 거리에 대한 실험을 진행하는 것입니다!! 위 프로젝트를 진행하기위해 우선 해야하는 것이 ouster LiDAR를 이용하여 구성한 pointcloud를 Unity로 보내야합니다!! 일단 제 컴퓨터가 window 환경인데 docker를 이용했을 때 GUI가 나타나지 않는 문제가 발생해서 일단 Ubuntu환경인 서버에 doc..
iOS LiDAR 화면 하단 영역만 PointCloud 검출 이전 글 2024.03.03 - [LiDAR] - iOS 가로 세로 모드 설정와 연결되는 내용입니다. 화면을 세로 모드로 설정하는 것은 성공했으니 전체 영역의 pointcloud가 아닌 화면의 하단 영역만 pointcloud를 취득할 수 있는 방법에 대해 알아야했습니다. 위 링크의 코드에서 func makeGridPoints() -> [Float2] { // 카메라 이미지의 너비와 높이를 곱함 let gridArea = cameraResolution.x * cameraResolution.y // 전체 이미지 영역을 포인트 수로 나눈 후의 간격 => 이미지를 설정된 포인트 수로 나눔 let spacing = sqrt(gridArea / Float(numGridPoints)) // 가로방향의 격자 수 let..

728x90