Engineering 16

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

ROS2, DDS와 QoS

1. DDS(Data Distribution Service) 정의OMG 에서 표준화한 middle ware 서비스이다. 즉, middle ware(프로세스) + 프로토콜(통신규약, API)이 DDS이다. ROS2에서는 DDS의 RTPS (Realtime Publish Subscribe)를 사용한다. Open source로는 Fast DDS와 Cyclone DDS(Eclipse Foundation)가 있고 사설 DDS를 활용하면 고성능 네트워킹이 가능하다. Gurum DDS(GurumNetwork)은 국내 자체 개발 DDS다. ROS2에서 노드들은 DDS(Data Distribution Service)에 참여한다.1.1 DDS 4가지 특징IDL(Interface Description Language)를 활..

Engineering/ROS 2025.01.04

C++ STL 정리

STL은 4가지 분류로 나뉜다.ContainersAlgorithms numeric: 난수 생성 + 최적화된 array들을 기반한 알고리즘 algorithm: [begin, end) 기반으로 range 있는 container에 쓰는 알고리즘 IteratorsFunctors0. itoaC의 memset의 c++ version이다.수학적에서 관용적으로 쓰이던 표현이다. set of number 혹은 unit vector 쓴다. 그리스어로 짧은 문자이다.templatevoid iota( ForwardIt first, ForwardIt last, T value ); // (constexpr since C++20)https://en.cppreference.com/w/cpp/algorithm/iota1. copy_n..

Engineering/C++ 2024.12.19

C++17 Class Template Argument Deduction (CTAD)

C++ 17부터는 Class Template Argument Deduction이 적용된다. 말 그대로 template argument가 생략될 수 있다는 뜻이다.적용되는 분야는 다음과 같다.template으로 선언 돼 있는 변수를 초기화 할 때 (possibly cv-qualified):std::pair p{2,2.3}; // pairstd::tuple tp{"kor",2,'a'}; // std::make tuple new 표현식templatestruct A{ A(T, T);};auto y = new A{1, 2}; // allocated type is A함수 호출auto lck = std::lock_guard(mtx); // deduces to std::lock_guardstd::copy_..

Engineering/C++ 2024.12.19

UML 언제 써야 하는가?

Clean code의 작가 밥 아저씨의 "UML 실전에선 이것만 쓰인다"의 내용을 발췌했다.소프트웨어 공학 과목을 들으면서 공감되는 부분이 많아서 가져왔다. 1. UML이란? Unified Modeling Language로 SW에서 설계할 때 쓰이는 Diagram을 만드는 언어이다.  StarUML과 Draw.io를 통해서 그릴 수 있다.  2. Diagram이란Diagram: 그래픽이나 구조로 대상을 나타내는 이다. 다이어그램으로 전달하고 시픈 것은 Concept, Specification, Implementation 3가지 이다.Concept(개념): 소스코드와 관계가 적다. 자연어 논문과 가깝다.Animal←Dog 해석이 다분함 속한다, 속박한다. 다양한 해석이 가능하다. Specification(..

Engineering/DEV-OPs 2024.10.12

C++에서 auto vs decltype vs typeid

C++를 하다 보면 타입이 맞지 않아 에러가 나는 경우가 많다. 이때마다 python의 type(class)이 부러워진다. 한편으론 생각 없이 auto와 decltype을 남발하면 되는 것이 아닌지 의구심이 든다. 하지만 C++의 장점은 이 타입을 강력하게 지켜준다는 것이다. 이 때문에 런타임에 발생할 에러를 미리 잡을 수 있고, 성능도 빨라진다.해당 포스트의 목표는 C++의 타입을 알 수 있는 세가지 방법, auto, decltype, typeid를 비교하는 것이다.1. auto와 decltype이들은 C++11에 추가된 기능이며, 근본은 generic programming에 근간을 두고 있다. template과 원리가 똑같다. 즉, user가 준 type에 맞춰서 코드를 생성해 준다. generic ..

Engineering/C++ 2024.06.10