반응형

Engineering 21

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

Engineering/C++ 2025.01.18

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

Docker로 ROS를 사용하면 안 되는 이유

container기술을 통해 개발 환경 종속성 문제를 해결할 수 있다. 그 중 가장 많이 쓰이는 것은 당연 Docker이다. ROS + Docker 조합은 강력하지만 여러 보안 이슈를 안고 있다. 그래서 Canonical은 'Snapcraft'같은 대안 기술을 제공한다. 1. 내부 자원 접근 보안 문제 embedded programming을 하다보면 GPIO와 같은 하드웨어에 접근이 필요하다. 이 때 관리자 권한이 필요하다. 컨테이너에 관리자 권한을 주면, 하드웨어 해킹의 문제가 생길 수 있다. 2. 네트워크 보안 문제docker container에서 통신은 storage를 사용한다. 결국 네트워킹이 어렵고 보안에 취약하다.3. 지속적인 보안 업데이트가 어렵다. 위의 해킹 문제를 막기 위해, 보안 업데이..

Engineering/ROS 2025.01.06
반응형