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이다.
- 지리적 위치 단거리 표현하는 경우 ENU(East North Up)를 기본으로 사용한다. (실내보다는 드론 자율주행 로봇)
- 특이한 좌표계의 경우 접미사로 _optical, _ned가 쓰인다.
- _optical은 카메라 좌표계이다. -> 로봇 좌표계로 TF를 해줘야 한다.
- _ned 도 사용한다.
Realsense | Robot vs Camera frame |
---|---|
인턴 생활 하면서 좌표계 때문에 너무 힘들었는데 드디어 정리하고 간다.
1.2 회전 표현
Quaternion, Rotation Matrix, 고정축(vector + roll & pitch & yaw, 각속도에 사용됨), Euler Angle (거의 사용 x)
관련 내용은 예전 블로그에 남아있다.
https://luckydipper.github.io/math%20physics/2022/11/20/Math-Physics-rotation-representation.html
2. 시간 표준
3가지 방법을 통해 시간을 나타낼 수 있다.
2.1 System Clock
ROS2에서 가장 많이 쓰이는 clock으로 UTC(Coordinate Universal Time)으로 표기되어 전 세계 어디에서나 사용 가능하다.
C++의 chrono, rclpy의 time 모듈을 사용한다.
2.2 ROS Time
node가 생성될 때 use_sim_time이란 파라미터를 기본으로 가지고 있다. 시뮬레이션 환경에서 시간을 조절할 때에 쓰인다. 아래와 같이 사용하면 topic이 subscribe 될 때까지 시간을 0으로 초기화 가능하다. use_sim_time 파라미터가 true이면 ROS Time이 이용된다.
ros2 run time_rclcpp_example --ros-args -p use_sim_time:=True
2.3 Steady Time
Hardware time으로, 단조증가한다.
2.4 Time API
time, duration, rate 3가지 class로 쓸 수 있다.
Time class는 시간을 다루는 clssdl이다. nanosecond와 second를 반환하며, nanosecond가 더 정확하다.
rclcpp::Time now = node->now();
now.nanoseconds();
Duration Class는 시간이 아닌 기간을 다룰 수 있다.
rclcpp::Duration duration(1,0);
msg.stamp = now + duration;
time_publisher->publish(msg);
Rate Class는 특정 주기를 유지시켜 주는 API를 제공한다. Rate는 System clock WallRate는 Steady clock을 이용한다.
rclcpp::WallRate loop_rate(1);
while(rclcpp::ok()){
loop_rate.sleep();
}
3. 코드
- std_msgs/msg/header에는 stamp와 frame_id를 포함한다.
//rcl/time.h
enum rcl_time_source_type_t{
RCL_TIME_SOURCE_UNINITALIZED = 0,
RCL_ROS_TIME,
RCL_SYSTEM_TIME,
RCL_STEADY_TIME
}
ref.
'Engineering > ROS' 카테고리의 다른 글
ROS2 Node Interface, Parameter, Namespace (0) | 2025.01.14 |
---|---|
ROS2 참고 사이트 (0) | 2025.01.10 |
ROS2 빌드, 파일 시스템 (0) | 2025.01.08 |
Docker로 ROS를 사용하면 안 되는 이유 (0) | 2025.01.06 |
ROS2, DDS와 QoS (0) | 2025.01.04 |