Navigation
-
SRU(https://michaelfyang.github.io/sru-project-website/) 논문이 주장하는 것은 다음과 같다. 기존 LSTM/GRU같은 Recurrent memory는 시간 순서 기억은 잘 하지만, 공간적으로 누적된 기억을 보존하는 데에는 약하다. 그래서 ego-motion과 시점 변화가 있는 Navigation에서는 "과거에 봤던 장면을 공간적으로 정렬해 기억하는 능력"이 부족하며, 이를 개선하기 위해 SRU(Spatially-Enhanced Recurrent Units)를 제안한다. 이를 구현하기 위한 RSL-RL Navigation stack은 다음과 같은 세 컴포넌트로 구성되어 있다. sru-pytorch-spatial-learningSRU 자체를 검증하는 독립 PyTo..
RSL-RL Navigation Stack for SRUSRU(https://michaelfyang.github.io/sru-project-website/) 논문이 주장하는 것은 다음과 같다. 기존 LSTM/GRU같은 Recurrent memory는 시간 순서 기억은 잘 하지만, 공간적으로 누적된 기억을 보존하는 데에는 약하다. 그래서 ego-motion과 시점 변화가 있는 Navigation에서는 "과거에 봤던 장면을 공간적으로 정렬해 기억하는 능력"이 부족하며, 이를 개선하기 위해 SRU(Spatially-Enhanced Recurrent Units)를 제안한다. 이를 구현하기 위한 RSL-RL Navigation stack은 다음과 같은 세 컴포넌트로 구성되어 있다. sru-pytorch-spatial-learningSRU 자체를 검증하는 독립 PyTo..
2026.03.23 -
nvblox는 NVIDIA가 공개한 GPU 가속 3D 맵핑 라이브러리로, 로봇이 센서(LiDAR, depth camera 등)로부터 받은 데이터를 실시간으로 TSDF / ESDF 형태의 voxel 기반 지도로 통합하는 데 초점을 두고 있다. 고해상도 3D 환경에서는 CPU 기반 voxel 맵이 메모리와 연산의 병목을 유발하고, 실시간 플래닝을 위해서는 ESDF query가 많이 발생하게 된다. 따라서 Nvblox에서는 이를 모두 GPU에서 처리함으로써 대규모 3D 환경에서도 실시간으로 TSDF/ESDF를 업데이트하고 플래너가 바로 쓸 수 있는 distance field를 제공하는 것을 목표로 하고 있다. ESDFESDF(Euclidean Signed Distance Field)는 공간의 모든 지점에서 "..
nvblox : ESDF, TSDF와 이를 이용한 플래닝nvblox는 NVIDIA가 공개한 GPU 가속 3D 맵핑 라이브러리로, 로봇이 센서(LiDAR, depth camera 등)로부터 받은 데이터를 실시간으로 TSDF / ESDF 형태의 voxel 기반 지도로 통합하는 데 초점을 두고 있다. 고해상도 3D 환경에서는 CPU 기반 voxel 맵이 메모리와 연산의 병목을 유발하고, 실시간 플래닝을 위해서는 ESDF query가 많이 발생하게 된다. 따라서 Nvblox에서는 이를 모두 GPU에서 처리함으로써 대규모 3D 환경에서도 실시간으로 TSDF/ESDF를 업데이트하고 플래너가 바로 쓸 수 있는 distance field를 제공하는 것을 목표로 하고 있다. ESDFESDF(Euclidean Signed Distance Field)는 공간의 모든 지점에서 "..
2026.01.04 -
스윈님 레포에 보면 이런 식으로 브랜치가 많다. 브랜치들 네이밍 규칙이 뭐냐고 여쭤보니 {카테고리 : feature, refactor ...} / {제작자} / {애자일 할 때 그 스프린트} / {기능 세부}이런 식이라고 하셨다. 별 생각 없이 지은 거라고 하시긴 했지만 공동 작업을 많이 안 해봐서 merge request도 제대로 보내본 적 없는 나에게는 다소 신문물이었다. 그래서 url_navigation_pkg를 만들 때는 이를 적극 채택하여 나도 똑같이 따라 해 보기로 했다. Main에 깔끔하게 Merge Request / Pull Requeset 올리는 방법작업용 브랜치 생성작업 단위 잘게 나눠서 커밋 한 커밋 = 하나의 논리적 변경이 되도록 의식적으로 나누기버그 수정, 리팩토링, 신규 기능..
대형 프로젝트에서 Github 잘 활용하는 법스윈님 레포에 보면 이런 식으로 브랜치가 많다. 브랜치들 네이밍 규칙이 뭐냐고 여쭤보니 {카테고리 : feature, refactor ...} / {제작자} / {애자일 할 때 그 스프린트} / {기능 세부}이런 식이라고 하셨다. 별 생각 없이 지은 거라고 하시긴 했지만 공동 작업을 많이 안 해봐서 merge request도 제대로 보내본 적 없는 나에게는 다소 신문물이었다. 그래서 url_navigation_pkg를 만들 때는 이를 적극 채택하여 나도 똑같이 따라 해 보기로 했다. Main에 깔끔하게 Merge Request / Pull Requeset 올리는 방법작업용 브랜치 생성작업 단위 잘게 나눠서 커밋 한 커밋 = 하나의 논리적 변경이 되도록 의식적으로 나누기버그 수정, 리팩토링, 신규 기능..
2025.11.23 -
우선 시작해야 할 부분은 Terrain map (2.5D heightmap, 주로 포맷은 PCD) loader이다. 우리 랩에서는 주로 터레인 매핑 모듈의 결과물로 나온 2.5D static map에서 global path planning을 진행한다. 이 PCD 파일의 필드에는 height 뿐 아니라, 각종 collision risk, inclination risk,,... 등등과 각 과제에서 필요로 하는 요구사항에 맞는 값들이 들어가 있고 이 필드값은 계속 바뀔 수 있다. 그래서 터레인 맵 loader의 소프트웨어 요구사항은 다음과 같다. 메모리 효율성 : 필요한 필드만 선택적으로 로드동적 필드 지원 : PCD 파일의 모든 필드 자동 인식확장성 : 새로운 필드 타입 쉽게 추가 가능┌───────────..
A. Terrain Map Loader우선 시작해야 할 부분은 Terrain map (2.5D heightmap, 주로 포맷은 PCD) loader이다. 우리 랩에서는 주로 터레인 매핑 모듈의 결과물로 나온 2.5D static map에서 global path planning을 진행한다. 이 PCD 파일의 필드에는 height 뿐 아니라, 각종 collision risk, inclination risk,,... 등등과 각 과제에서 필요로 하는 요구사항에 맞는 값들이 들어가 있고 이 필드값은 계속 바뀔 수 있다. 그래서 터레인 맵 loader의 소프트웨어 요구사항은 다음과 같다. 메모리 효율성 : 필요한 필드만 선택적으로 로드동적 필드 지원 : PCD 파일의 모든 필드 자동 인식확장성 : 새로운 필드 타입 쉽게 추가 가능┌───────────..
2025.11.20 -
Naming Convention파일명 : snake_casepose.pyglobal_planner.py클래스명 : PascalCaseclass GlobalPlanner함수/메소드명 : snake_casedef plan_path()변수명 : snake_casecurrent_pose상수명 : UPPER_SNAKE_CASEMAX_VELOCITY * 코드 포맷팅 라이브러리 활용할 것
url_navigation_pkg (3) : Naming ConventionNaming Convention파일명 : snake_casepose.pyglobal_planner.py클래스명 : PascalCaseclass GlobalPlanner함수/메소드명 : snake_casedef plan_path()변수명 : snake_casecurrent_pose상수명 : UPPER_SNAKE_CASEMAX_VELOCITY * 코드 포맷팅 라이브러리 활용할 것
2025.11.20 -
Design Philosophy의존성 규칙 준수 : 도메인이 ROS에 의존하지 않음알고리즘 순수성 : 각 알고리즘은 상태를 갖지 않고 순수 함수처럼 동작state machine 분리: 상태 관리는 application layer에서 담당조립 : 런타임에 Config로 컴포넌트 조합Software Engineering도메인 (Domain)└─ Navigation (로봇 이동 문제 영역) ├─ Entity (핵심 개념들) │ ├─ Pose (위치) │ ├─ Path (경로) │ ├─ Velocity (속도) │ └─ Obstacle (장애물) │ └─ 비즈니스 로직 (Business Logic) ├─ 목표 도달 판단 ├─ 충돌 검사 ├─ 경로 유효성..
url_navigation_pkg (2) : Code structureDesign Philosophy의존성 규칙 준수 : 도메인이 ROS에 의존하지 않음알고리즘 순수성 : 각 알고리즘은 상태를 갖지 않고 순수 함수처럼 동작state machine 분리: 상태 관리는 application layer에서 담당조립 : 런타임에 Config로 컴포넌트 조합Software Engineering도메인 (Domain)└─ Navigation (로봇 이동 문제 영역) ├─ Entity (핵심 개념들) │ ├─ Pose (위치) │ ├─ Path (경로) │ ├─ Velocity (속도) │ └─ Obstacle (장애물) │ └─ 비즈니스 로직 (Business Logic) ├─ 목표 도달 판단 ├─ 충돌 검사 ├─ 경로 유효성..
2025.11.19 -
URL에 들어오고 나서 좋았던 점 중 하나는 Aswin님의 DreamWaQ Universe 소스코드를 보고 공부할 기회가 있었다는 것이다. 그 코드는 내가 이제껏 봤던 어떤 코드보다 예뻤다. 6~7월은 내내 그 코드를 뜯어보고 사용하면서 보냈다. 그전에는 딱히 클린 코드에 대한 경이로움이나 필요성을 못 느끼면서 살았고, 그 때문에 내가 만든 코드도 정말 되는대로 작성한 것이 대부분이었다. 하지만 DreamWaQ 코드를 보고 난 후에, 잘 조직된 패키지는 참 많은 사람들의 삶의 질을 향상시킨다는 것을 체감했다. 그래서 내가 향후에 만들 패키지도 이와 같이 손쉽게 유지보수되는 영리한 구조를 지녔으면 좋겠다는 생각을 처음으로 했다.클린 코드는 기술 부채를 최소화하고 가독성과 유지보수성 그리고 타인의 이해도를 ..
url_navigation_pkg (1) : 클린 코드, 소프트웨어 요구사항URL에 들어오고 나서 좋았던 점 중 하나는 Aswin님의 DreamWaQ Universe 소스코드를 보고 공부할 기회가 있었다는 것이다. 그 코드는 내가 이제껏 봤던 어떤 코드보다 예뻤다. 6~7월은 내내 그 코드를 뜯어보고 사용하면서 보냈다. 그전에는 딱히 클린 코드에 대한 경이로움이나 필요성을 못 느끼면서 살았고, 그 때문에 내가 만든 코드도 정말 되는대로 작성한 것이 대부분이었다. 하지만 DreamWaQ 코드를 보고 난 후에, 잘 조직된 패키지는 참 많은 사람들의 삶의 질을 향상시킨다는 것을 체감했다. 그래서 내가 향후에 만들 패키지도 이와 같이 손쉽게 유지보수되는 영리한 구조를 지녔으면 좋겠다는 생각을 처음으로 했다.클린 코드는 기술 부채를 최소화하고 가독성과 유지보수성 그리고 타인의 이해도를 ..
2025.11.19 -
https://zzziito.tistory.com/174 SplatNav 코드 돌려보기 (1) 제공해준 데이터로 돌려보기1. 환경 설정A. NerfStudio 설치SplatNav는 NerfStudio를 기반으로 작성되었다. https://github.com/nerfstudio-project/nerfstudio/tree/main GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFsA collaboration friendlyzzziito.tistory.com여기서 제공해 준 데이터로 돌려봤으니까 이제 내가 딴 데이터로 돌려볼 차례이다. 친절하게도 이렇게 설명해주고 있다. 대략 이런 내용. 다음과 같은 순서로 수행한다..
SplatNav 코드 돌려보기 (2) 내 데이터로 돌려보기https://zzziito.tistory.com/174 SplatNav 코드 돌려보기 (1) 제공해준 데이터로 돌려보기1. 환경 설정A. NerfStudio 설치SplatNav는 NerfStudio를 기반으로 작성되었다. https://github.com/nerfstudio-project/nerfstudio/tree/main GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFsA collaboration friendlyzzziito.tistory.com여기서 제공해 준 데이터로 돌려봤으니까 이제 내가 딴 데이터로 돌려볼 차례이다. 친절하게도 이렇게 설명해주고 있다. 대략 이런 내용. 다음과 같은 순서로 수행한다..
2025.11.04 -
Filetreesplatnav/├─ .git/├─ .gitignore├─ LICENSE├─ README.md├─ SFC/│ ├─ __pycache__/│ ├─ astar_utils.py│ ├─ corridor_utils.py│ ├─ helper_utils.py│ └─ viz_utils.py├─ SplatNav Data/ │ ├─ old_union_sfc-1.json│ └─ old_union_sfc-2.json├─ assets/ ├─ blender/│ ├─ viz_dataset.py│ ├─ viz_statistical_traj.py│ └─ viz_utils.py├─ data/│ ├─ exp_room/│ ├─ flight/│ └─ old_union2/├─ ellipsoids/│ ├..
SplatNav : 코드 아키텍쳐 분석Filetreesplatnav/├─ .git/├─ .gitignore├─ LICENSE├─ README.md├─ SFC/│ ├─ __pycache__/│ ├─ astar_utils.py│ ├─ corridor_utils.py│ ├─ helper_utils.py│ └─ viz_utils.py├─ SplatNav Data/ │ ├─ old_union_sfc-1.json│ └─ old_union_sfc-2.json├─ assets/ ├─ blender/│ ├─ viz_dataset.py│ ├─ viz_statistical_traj.py│ └─ viz_utils.py├─ data/│ ├─ exp_room/│ ├─ flight/│ └─ old_union2/├─ ellipsoids/│ ├..
2025.11.03 -
1. 환경 설정A. NerfStudio 설치SplatNav는 NerfStudio를 기반으로 작성되었다. https://github.com/nerfstudio-project/nerfstudio/tree/main GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFsA collaboration friendly studio for NeRFs. Contribute to nerfstudio-project/nerfstudio development by creating an account on GitHub.github.comconda create -n nerfstudio python=3.10conda activate nerfs..
SplatNav 코드 돌려보기 (1) 제공해준 데이터로 돌려보기1. 환경 설정A. NerfStudio 설치SplatNav는 NerfStudio를 기반으로 작성되었다. https://github.com/nerfstudio-project/nerfstudio/tree/main GitHub - nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFsA collaboration friendly studio for NeRFs. Contribute to nerfstudio-project/nerfstudio development by creating an account on GitHub.github.comconda create -n nerfstudio python=3.10conda activate nerfs..
2025.10.21 -
OMPL 설치 후 로봇이 있는 scene 만들기collision-free 경로 계산하기계획된 경로 시각화하기Open Motion Planning Library(OMPL)https://ompl.kavrakilab.org/webapp.html OMPL Web AppUsage The OMPL web app is a web front end for motion planning and benchmarking using OMPL. Basic usage is very similar to the standalone GUI. Once deployed, this may be the easiest way to try out OMPL without to compile anything. Detailed instructions ..
Open Motion Planning Library(OMPL)를 사용해 경로 계산하고 시각화하기OMPL 설치 후 로봇이 있는 scene 만들기collision-free 경로 계산하기계획된 경로 시각화하기Open Motion Planning Library(OMPL)https://ompl.kavrakilab.org/webapp.html OMPL Web AppUsage The OMPL web app is a web front end for motion planning and benchmarking using OMPL. Basic usage is very similar to the standalone GUI. Once deployed, this may be the easiest way to try out OMPL without to compile anything. Detailed instructions ..
2025.03.09 -
러닝 기반으로 waypoint를 생성하는 모델을 학습할 때 당연히 나도 처음에는 min-max normalize를 했으나 왜인지 생성되는 경로가 일관되게 방향이 이상한 것을 확인했다. 그런데 문제는 몽땅 이런 건 아니고 방향이 정상적으로 나오는 샘플들도 있기는 해서 의문이었다. 그런데 샘플들을 공통적으로 살펴보니 Goal point가 1사분면에 있을 때만 멀쩡 경로로 나오는 것 같았다. 그러니까, 경로의 흐름은 괜찮은데 denormalize과정에서 생성된 경로가 모두 1사분면으로만 나오는 게 문제였다. def normalize_waypoints(waypoints, goal_point): # 모든 점들의 좌표를 첫 번째 점(0,0)에 대한 상대 좌표로 변환 relative_waypoints = ..
Waypoint 정규화 시, 생각없는 min-max 정규화의 함정러닝 기반으로 waypoint를 생성하는 모델을 학습할 때 당연히 나도 처음에는 min-max normalize를 했으나 왜인지 생성되는 경로가 일관되게 방향이 이상한 것을 확인했다. 그런데 문제는 몽땅 이런 건 아니고 방향이 정상적으로 나오는 샘플들도 있기는 해서 의문이었다. 그런데 샘플들을 공통적으로 살펴보니 Goal point가 1사분면에 있을 때만 멀쩡 경로로 나오는 것 같았다. 그러니까, 경로의 흐름은 괜찮은데 denormalize과정에서 생성된 경로가 모두 1사분면으로만 나오는 게 문제였다. def normalize_waypoints(waypoints, goal_point): # 모든 점들의 좌표를 첫 번째 점(0,0)에 대한 상대 좌표로 변환 relative_waypoints = ..
2025.03.04