rclpy는 ROS 2를 파이썬으로 개발하기 위한 클라이언트 라이브러리입니다.
rclpy는 ROS 2의 기본 통신 라이브러리인 rcl (ROS Client Library)를 기반으로 작성되었습니다. rclpy를 사용하면 파이썬으로 ROS 2 노드(Node)를 작성하고, 토픽(Topic) 및 서비스(Service) 메시지를 발행하고 구독할 수 있습니다.
Node는 ROS 2에서 실행되는 독립적인 프로세스로, 로봇 시스템의 구성 요소를 나타냅니다. Node는 rclpy를 사용하여 작성되며, 특정 작업을 수행하기 위해 다른 노드와 통신하고 메시지를 교환할 수 있습니다. 각 Node는 고유한 이름을 가지며, 하나 이상의 토픽에서 메시지를 발행하거나 구독할 수 있습니다.
Node는 rclpy의 Node 클래스를 상속하여 작성됩니다. Node 클래스는 ROS 2 시스템과의 상호 작용을 관리하기 위한 다양한 기능과 메서드를 제공합니다. 예를 들어, Node 클래스는 토픽과 서비스의 생성, 메시지 발행 및 구독, 타이머 및 콜백 함수의 관리 등을 담당합니다.
from geometry_msgs.msg import Twist
# Twist 메시지 생성
cmd_vel = Twist()
cmd_vel.linear.x = 0.2 # 선속도 설정
cmd_vel.angular.z = 0.5 # 각속도 설정
from geometry_msgs.msg import PoseStamped
# PoseStamped 메시지 생성
goal_pose = PoseStamped()
goal_pose.header.frame_id = 'map' # 좌표계 설정
goal_pose.pose.position.x = 1.0 # x 위치 설정
goal_pose.pose.position.y = 2.0 # y 위치 설정
goal_pose.pose.orientation.w = 1.0 # 방향 설정
from nav_msgs.msg import Odometry
# Odometry 메시지 생성
odometry = Odometry()
odometry.header.frame_id = 'odom' # 좌표계 설정
odometry.child_frame_id = 'base_link' # 자식 좌표계 설정
odometry.pose.pose.position.x = 1.0 # 로봇 위치 설정
odometry.twist.twist.linear.x = 0.2 # 선속도 설정
odometry.twist.twist.angular.z = 0.5 # 각속도 설정
📌 좌표계(Frame)와 자식 좌표계(Child Frame)의 차이
🔎 좌표계 (Frame)
- 좌표계는 3D 공간에서의 위치와 방향을 나타내는 개념입니다.
- 로봇 시스템에서는 일반적으로 전역 좌표계(Global Frame)와 로컬 좌표계(Local Frame)를 사용합니다.
- 전역 좌표계는 고정된 기준점을 기준으로 한 전체 공간을 나타내며, 일반적으로 'map'이나 'odom'과 같은 이름으로 표현됩니다.
- 로컬 좌표계는 로봇 자체를 기준으로 하는 상대적인 좌표계로, 로봇의 움직임에 따라 변합니다. 로봇의 기준 좌표계는 'base_link' 또는 'base_footprint'과 같은 이름으로 표현됩니다.
🔎 자식 좌표계 (Child Frame)- 자식 좌표계는 다른 좌표계에 상대적으로 움직이는 좌표계입니다.
로봇 시스템에서는 보통 로봇의 부품이나 센서와 같은 개체를 나타내기 위해 자식 좌표계를 사용합니다.- 자식 좌표계는 부모 좌표계에 상대적인 위치와 방향 정보를 가지며, 자식 좌표계는 부모 좌표계에 대한 변환(transform)을 통해 전역 좌표계에서의 위치와 방향을 계산합니다.
예를 들어, 로봇의 기준 좌표계인 'base_link'은 'odom' 좌표계에 상대적으로 움직이는 자식 좌표계입니다.