반응형

2025/01 13

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

진짜 하루만에 읽는 반도체 산업 리뷰

Image processor 에 관한 논문을 읽는데 아무리 봐도 이해가 안 가서 읽기 시작했다. 1.  트랜지스터 역사논리회로를 만들려면 트랜지스터가 필요하다.진공관BJT (Bipolar Junction Transistor, 바이폴라 접합 트랜지스터)MOSFET (Metal-Oxide-Semiconductor FET (Field Effect Transistor, 전계 효과 트랜지스터) )BJT는 고등학교 때 배운 PnP NpN 트랜지스터이다. 이것을 더 작게 만들도록 개발한 것이 MOSFET이다.2. 반도체 분류3. 반도체 8단계 공정웨이퍼 제조 공정(Wafering)산화 공정(Oxidation)포토 공정(Photolithography)에칭 공정(Etching)증착 공정(Deposition) 및 이온 주..

Book Review 2025.01.24

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 자원도 낭비되고, 기다려야 하는 초를 계산하기 힘들다.bool flag; std::mutex m; void waitForFlag(){ std::unique_lock lk(m); while(!flag){ lk.unlock..

Engineering/C++ 2025.01.18

강화학습 용어 정리

1. 강화학습으로 풀 수 있는 문제Markov Model로 추상화된 환경에서 Prediction과 Control 문제를 풀 수 있다. Prediction이란 Model based 또는 Planning라고 불리며, 여러 번의 시뮬레이션을 통해 해당 State와 action의 가치를 계산하는 것이다. Control은 모든 State에서 Value가 가장 크게 할 수 있는 policy를 찾는 것이다.Policy: State에서 어떤 Action을 취할지에 관한 확률 분포 함수(PDF)이다.State: Markov Model에서 노드로 추상화된 상태이다.Action: State에서 다른 노드로 이동하기 위해 할 수 있는 행동들의 집합이다.즉, State에서 Policy를 보고 어떤 Action을 할 확률을 알 ..

ROS2 Node Interface, Parameter, Namespace

지난 포스팅에서 Package와 Node에 관해 정리했다.요약하면, Package는 Node들의 집합과 이를 실행하는 launch file로 된 것이고, Node는 우리가 RCL(ROS Client Library)를 활용하여 만드는 Process이다. Node(Process) 간의 통신 방식은 3가지이다. Topic, Service, Action 관계는 아래 그림과 같다.Node InterfaceNode 간 데이터를 주고받는 형식이다. Interface에는 IDS(Interface Definition Language)와 msg, srv, action이 있다. msg는 Topic에서 주고받는 데이터, srv는 service에서 주고받는 데이터, action은 action에서 주고받는 데이터이다. 이 데이터..

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로 두면 편하다.)로봇 분야에선 X forward, Y left, Z up 좌표계를 사용한다.IMU를 살 때 NED(x North, y East, z Down)인지 ENU(x East, y North, z Up)인지 잘 확인해야 한다.RGB를 순서대로 Red:X, Green:Y, Blue:Z이다.지리적 위치 ..

Engineering/ROS 2025.01.12

ROS2 참고 사이트

1. 커뮤니티 ROS discourcehttps://discourse.ros.org/ ROS DiscourseThe ROS discussion forumdiscourse.ros.org커뮤니티 게시판, 개발 관련 소식이 올라온다.  2. 문서2.1 ROS Designhttps://design.ros2.org/ DesignROS 2 Design This site is repository of articles which are designed to inform and guide the ROS 2 design efforts. The goal of the ROS 2 project is to leverage what is great about ROS 1 and improve what isn’t. If you wou..

Engineering/ROS 2025.01.10

ROS2 빌드, 파일 시스템

1. PackagePackage = Node들의 집합(src) + 실행 방법(Launch file)src폴더 아래에 두 가지 파일이 필수적으로 들어간다.package.xml: 저자 + 패키지 설명CMakeLists.txt or setup.py 위의 파일을 수동으로 만들거나 아래 명령어로 만들 수 있다.ros2 pkg create [pkg_name] --build-type [ament_cmake ament_python] --dependencies [rclcpp rclpy std_msgs ...]2. Build System vs Build toolsBuild System = 단일 패키지를 빌드하는 것.Build Tools = 복수의 패키지를 빌드 하는 것. 각 패키지에 기술되어있는 종속 graph의 토폴로지..

Engineering/ROS 2025.01.08
반응형