반응형

Engineering 24

Graphic 포스팅 계획 [취미]

Isaac simulator나 Muzuco 등 다양한 시뮬레이터에서 그래픽스가 쓰인다. 또한 내가 만든 애플리케이션을 appimage로 패키징 해서 배포한다면, GUI가 필요하다. 또한 만화나 애니메이션 버튜버쪽에 관심이 있어서 취미로 공부해보고 싶다. 취미인 만큼, 시장성보단 재미로 하고 있다. Rust를 통해 Graphics를 공부해보려고 한다. CMU에서 들은 강의 내용도 요약할 예정이다. Rerun 비쥬얼라이저에 쓰이는 (winit egui), 요즘 뜨고 있는 WebAssembly, WebGPU 등을 공부 해보려고 한다. 1. 뭘 공부 하면 재밌을까?┌─────────────────────────────────────────┐│ Application (게임, 앱) ..

Orbit: A Unified Simulation Framework for Interactive Robot Learning Environments, 시뮬레이션 주파수는?

0. 이 글은Orbit 논문의 요약이다. 또한 시뮬레이션의 주파수 관계에 대해 생각이 들어있다. 1. 저자 및 학교 소개ETH Zurich(스위스)에서, Nvidia와 University of Toronto(캐나다)의 도움을 받아서 만든 논문이다. Marco Hutter교수님의 Robotic Systems Lab에서 나온 논문이다.2. 내용 요약Orbit은 Issac Lab 의 전신으로, 최신의 랜더링 기법과 물리 엔진을 적용한 시뮬레이터이다. 시뮬레이션에는 물리엔진과 랜더러가 사용된다.시뮬레이터의 주요 기능물리 엔진랜더링 방법론정의힘의 작용(충돌)에 대한 미분방정식을 푸는 것3D의 모양을 카메라의 픽셀 스페이스로 옮겨 오는 것핵심 기능Physx 엔진으로 구현Path tracing (Ray tracing..

Python Variable Arguments(variadic arguments,가변인자), Ellipsis(엘리프시스)

Python의 Variable Arguments와 Ellipsis를 정리한다.Python Variable Arguments 어디에 적용하고 싶은가?다른 사람의 class를 기반으로 상속받아 코딩하려고 한다. 내가 만드는 child class에서, parent class의 생성자를 그대로 호출하고 싶다. 이때 같은 내용이 반복되지 않도록 Variable Arguments(가변인자)를 쓰려고 한다.class parent(): def __init__(self, param1: int, param2:np.ndarray, ... ): self.param1 = param1 ...class OurWrapper(parent): def __init__(*args, **kwargs): ..

Engineering/Python 2025.04.10

Chapter 4. Synchronizing Concurrent Operations. (3) - Functional Programming

Functional Programming 함수형 프로그래밍을 한 줄로 요약하자면 pure function을 first class object로 보는 것이다. 이를 통해 데이터와 로직을 분리한다. pure function이란 함수 밖에 영역에 영향을 끼치지 않으며, input이 같으면 언제나 output이 같은 함수를 뜻 한다. 이를 first class object로 본다는 것은 함수를 parameter처럼 주고받을 수 있게 만들었단 뜻이다. 즉, 고차함수(Higher order function)를 만들거나 콜백(callback)을 구현할 수 있다.함수형 로직으로 프로그래밍을 설계하면 쉽게 병렬 프로그램을 짤 수 있다. 요즘 나온 언어(rust, clojure)는 함수형 프로그래밍을 염두해 두고 만들었다..

Engineering/C++ 2025.01.26

Chapter 4. Synchronizing Concurrent Operations. (2) - future

1. Future vs Shared Future뮤택스(Mutualy Exclusive)는 Race Condition(경쟁 상태)을 방지하기 위해서 공유 자원에 접근을 하나로 제한하는 것이었다.Conditional Variable(조건 변수)는 스레드 간의 순서를 맞출 때 사용했다. (Synchronizing)future 멀티 스레드에서 결과 값을 받아 올 때 쓰는 class이다. future 자체로는 Race Condition을 막을 수 없다. 그래서 Read only 함수만을 이용하면 더 편리한 멀티 스레딩이 된다. 만약 여러 개의 함수가 Read only로 결과를 내서 합친다면 shared_future를 사용할 수 있다. future는 movable 하지만 shared_future는 movable과..

Engineering/C++ 2025.01.22

Chapter3. Sharing Data Between Threads

해당 챕터는 Thread 간 데이터를 공유하는 방법에 관해 다룬다. Race Condition (경쟁 상태)란 여러 개의 Thread가 같은 데이터에 한 번에 접근해서 생기는 문제점이다. 데이터를 읽고 쓰기를 동시에 할 때 일어난다. 실행할 때마다 결과가 다르게 나오는 거지 같은 상황이 나올 수 있다.1. Race Condition해결 방법Mutex 기반Critical Section에 접근할 수 있는 Thread를 제한한다. C++에서 가장 많이 쓰는 방법이다.Lock-Free Programming자료구조를 바꿔서, 여러 과정을 통해 자료구조의 부분이 변하게 한다. (Chapter5. Memory Model, Chapter 7 Lock-Free Data structure)Update를 Data Trans..

Engineering/C++ 2025.01.20

Chapter 4. Synchronizing Concurrent Operations

스레드를 순서대로 동기화시키는 방법에 관해 다룬다.4. Waiting for Event or Other Condition하나의 thread가 끝낼 때 까지 다음 thread가 기다리는 것은 conditional varaible로 쉽게 가능하다.4.1 Waiting for a Condition with Conditional Variablebusy wait 방식 (+ sleep_for )만약 conditional variable이 없다면 busy waiting 방식을 사용해야 한다. CPU 자원도 낭비되고, 기다려야 하는 초를 계산하기 힘들다.Conditional Variable (C++11)위의 문제점을 해결하기 위해 C++11부터 Conditional Variable 도입됐다. CV를 활용하면, Thre..

Engineering/C++ 2025.01.18

ROS2 Node 스케줄링, 구조, 인터페이스 파라미터

지난 포스팅에서 Package와 Node에 관해 정리했다.요약하면, Package는 Node들의 집합과 이를 실행하는 launch file이다. Node는 ROS가 프로그램을 스케쥴링 하는 기준이다. 노드 안에 있는 기능들, ROS 2 Entities[Service, Publish, Subscribe, Action]들은 callback 함수이다. Node는 ROS 2 Entities, 자원, 상태를 들고 있는 논리적 컨테이너이다. 엔티티들은 스케쥴링의 대상이 아니라, 일감(Event)1. Node SchedulingROS1에서의 Node는 우리가 RCL(ROS Client Library)를 활용하여 만드는 Process이다. 하나의 Node안에서 publisher subscriber가 스케쥴링 돼서 돌아..

Engineering/ROS 2025.01.14

ROS2 표준 시간, 좌표계

1. 공간적 표준 (좌표, SI 단위)ROS2는 SI단위를 사용한다. meter, second, volt...1.1 좌표계정말 중요한 개념이다. 원본은 책과 rep-103을 참고하자.오른손 좌표계를 사용한다.컴퓨터 비전 분야에서는 Z forward, X right, Y down 좌표계를 사용한다. (깊이를 계산할 때 Z를 앞으로 둬야 편하게 계산 가능하기 때문이다. image plane을 x y로 두면 편하다.)오른쪽을 가르키게 손을 고정하면, 오른손 좌표계 왼손 좌표계가 나온다.윈도우 계열(DirectX 계열, 언리얼 엔진), Apple의 Metal은 왼손 좌표계를 쓴다.Khronos 의 Vulkan, Opengl은 오른손 좌표계를 쓴다. computer vision은 위아래가 바뀐 오른손 좌표계를 쓴..

Engineering/ROS 2025.01.12
반응형