분류 전체보기
-
스윈님 레포에 보면 이런 식으로 브랜치가 많다. 브랜치들 네이밍 규칙이 뭐냐고 여쭤보니 {카테고리 : 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 -
로보틱스, 특히 필드 로보틱스를 위한 AI에서 중요한 키워드를 꼽으라면 단연 "리소스 효율적"이라고 생각한다. LLM 시대가 도래하면서 로봇을 위한 AI 연구는 크게 양극단으로 분리된 것 같다. 하나는 "뭐든지 라지모델에게 물어봐~"이고 하나는 "더 가볍고 더 효율적으로!"이다. "뭐든지 라지모델에게 물어봐~" 쪽이 좀 더 요새 메인 기조이긴 하지만, 나는 에 관심이 있는 나는 후자를 열심히 보고 있다. 그래서 이번 학기에 고른 것은 라는 전산과 수업이었다. 라고 하면 GPU 메모리 뿐 아니라, AI 학습에 필요한 모든 단계에서의 리소스를 의미하며 이 수업에서는 학습 데이터 취득이나 학습 과정 자체 등 다양한 관점에서의 리소스 효율적 기법을 다룬다. 그 중에 하나가 Deep Image Prior (htt..
Text-to-Image Generation with Deep Image Prior로보틱스, 특히 필드 로보틱스를 위한 AI에서 중요한 키워드를 꼽으라면 단연 "리소스 효율적"이라고 생각한다. LLM 시대가 도래하면서 로봇을 위한 AI 연구는 크게 양극단으로 분리된 것 같다. 하나는 "뭐든지 라지모델에게 물어봐~"이고 하나는 "더 가볍고 더 효율적으로!"이다. "뭐든지 라지모델에게 물어봐~" 쪽이 좀 더 요새 메인 기조이긴 하지만, 나는 에 관심이 있는 나는 후자를 열심히 보고 있다. 그래서 이번 학기에 고른 것은 라는 전산과 수업이었다. 라고 하면 GPU 메모리 뿐 아니라, AI 학습에 필요한 모든 단계에서의 리소스를 의미하며 이 수업에서는 학습 데이터 취득이나 학습 과정 자체 등 다양한 관점에서의 리소스 효율적 기법을 다룬다. 그 중에 하나가 Deep Image Prior (htt..
2025.11.18 -
Splat-Nav: Safe Real-Time Robot Navigation in Gaussian Splatting MapsTimothy Chen and Ola Shorinwa and Joseph Bruno and Aiden Swann and Javier Yu and Weijia Zeng and Keiko Nagami and Philip Dames and Mac Schwagerhttps://chengine.github.io/splatnav/2025 T-ROAbstract우리는 Gaussian Splatting 장면에서 실시간 로봇 내비게이션을 수행하는 파이프라인인 Splat-Nav를 제안한다. Splat-Nav는 두 가지 구성 요소로 이루어진다:Splat-Plan — 안전성을 보장하는 경로 계획 모듈 S..
Splat-Nav: Safe Real-Time Robot Navigation in Gaussian Splatting MapsSplat-Nav: Safe Real-Time Robot Navigation in Gaussian Splatting MapsTimothy Chen and Ola Shorinwa and Joseph Bruno and Aiden Swann and Javier Yu and Weijia Zeng and Keiko Nagami and Philip Dames and Mac Schwagerhttps://chengine.github.io/splatnav/2025 T-ROAbstract우리는 Gaussian Splatting 장면에서 실시간 로봇 내비게이션을 수행하는 파이프라인인 Splat-Nav를 제안한다. Splat-Nav는 두 가지 구성 요소로 이루어진다:Splat-Plan — 안전성을 보장하는 경로 계획 모듈 S..
2025.11.17 -
SplatNav에서는 SFC-1, SFC-2라는 두 가지 옵션을 제공한다. 둘의 차이점을 비교하면 다음과 같다. SFC-1SFC-2코드 분기점 (1) SFC/corridor_utils.pyPointCloudCollisionSet을 기본 옵션으로 생성PointCloudCollisionSet(sample_surface=20)으로 생성코드 분기점 (2) polytopes/collision_set.pypoint_cloud = self.means (가우시안 중심만 사용)충돌 집합 계산은 “점”들에 대해 Ax fibonacci_ellipsoid(...)로 각 가우시안의 “표면”을 샘플링ellipsoid_samples = fibonacci_ellipsoid(self.means, self.rots, self.scal..
SplatNav 코드 뜯어보기 : SFC-1과 SFC-2의 차이점SplatNav에서는 SFC-1, SFC-2라는 두 가지 옵션을 제공한다. 둘의 차이점을 비교하면 다음과 같다. SFC-1SFC-2코드 분기점 (1) SFC/corridor_utils.pyPointCloudCollisionSet을 기본 옵션으로 생성PointCloudCollisionSet(sample_surface=20)으로 생성코드 분기점 (2) polytopes/collision_set.pypoint_cloud = self.means (가우시안 중심만 사용)충돌 집합 계산은 “점”들에 대해 Ax fibonacci_ellipsoid(...)로 각 가우시안의 “표면”을 샘플링ellipsoid_samples = fibonacci_ellipsoid(self.means, self.rots, self.scal..
2025.11.06 -
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 -
나는 연구실에서 KEIT 사족보행이라는 과제에 참여하고 있는데, 이 과제는 올해부터 알고리즘 평가를 충북 옥천군에 있는 한 복숭아 농가에서 진행하게 되어 있다. 작년 겨울부터 여기 방문할 기회가 생겨서 부지를 탐색하곤 했다. 예전부터 농사 로봇에 관심이 있기는 했지만 농사에 대해서는 1도 아는 것이 없어서 개인적으로는 이 출장이 참 흥미로웠다. 실제 농가에서는 어떤 로봇을 요구하시는지도 어깨 너머로 조금씩 배울 수 있었다. 우선 복숭아 농가는 여름철에 무척 바쁘셔서 두 가지 요구를 하셨다.수확이 끝난 8월 이후에 올 것나무의 뿌리 부근을 밟지 말 것우리 연구실의 플래너는 기본적으로 가장 평평한 곳을 디디도록 하고 있기 때문에 나무 뿌리를 밟는 경우는 잘 없어서 이 부분은 크게 신경 쓸 것은 없었다. 다만..
사족보행로봇 for 농사 : 옥천군 농장 방문 후기 (1)나는 연구실에서 KEIT 사족보행이라는 과제에 참여하고 있는데, 이 과제는 올해부터 알고리즘 평가를 충북 옥천군에 있는 한 복숭아 농가에서 진행하게 되어 있다. 작년 겨울부터 여기 방문할 기회가 생겨서 부지를 탐색하곤 했다. 예전부터 농사 로봇에 관심이 있기는 했지만 농사에 대해서는 1도 아는 것이 없어서 개인적으로는 이 출장이 참 흥미로웠다. 실제 농가에서는 어떤 로봇을 요구하시는지도 어깨 너머로 조금씩 배울 수 있었다. 우선 복숭아 농가는 여름철에 무척 바쁘셔서 두 가지 요구를 하셨다.수확이 끝난 8월 이후에 올 것나무의 뿌리 부근을 밟지 말 것우리 연구실의 플래너는 기본적으로 가장 평평한 곳을 디디도록 하고 있기 때문에 나무 뿌리를 밟는 경우는 잘 없어서 이 부분은 크게 신경 쓸 것은 없었다. 다만..
2025.10.20