ROS 2

ROS2 turtlebot4을 gazebo sim에 띄워보기

정지홍 2025. 2. 23. 14:28

apt search ros-jazzy-turtlebot4

환경 : ubuntu noble + jazzy + gazebo harmonic

 

1. 설치

sudo apt install ros-jazzy-turtlebot4-simulator


# 키보드 이동을 위해서 이것도 미리 설치
sudo apt install ros-jazzy-turtlebot4-bringup


sudp apt install ros-jazzy-turtlebot4-viz

해당 디렉토리에 설치될거임

 

 

 

2.실행

ros2 launch turtlebot4_gz_bringup sim.launch.py
ros2 launch turtlebot4_gz_bringup turtlebot4_gz.launch.py

 

 

 

 

3. 한번 토픽들을 봐보자.

ros2 topic list

 

 

  • 센서 및 상태 관련
    • /battery_state : 배터리의 현재 상태(전압, 전류 등)를 나타냄
    • /bumper_contact : 범퍼 센서가 감지한 접촉 정보를 전달함.
    • /ir_intensity , /ir_opcode: 적외선(IR) 센서의 강도나 명령 코드와 관련된 데이터.
    • /joint_states: 로봇의 각 관절의 상태(각도, 속도 등)를 제공해줌.
    • /wheel_status, /wheel_ticks, /wheel_vels: 바퀴의 상태, 엔코더 값, 속도 등 바퀴 관련 정보를 나타낸다.
    • /odom: 로봇의 이동(오도메트리) 정보를 제공.
    • /scan: 라이다나 다른 거리 측정 센서의 스캔 데이터를 포함한다.

 

  • 제어관련
    • /cmd_vel, /cmd_vel_unstamped: 로봇의 이동 명령(선속도, 각속도 등)을 전달.
    • /diffdrive_controller/cmd_vel: 차동 구동(differential drive) 로봇에 대한 속도 명령.
    • /cmd_audio, /cmd_lightring: 오디오 출력이나 라이트링(LED 등) 제어 명령을 나타냄.

 

 

  • 시뮬레이션 및 시스템 정보
    • /clock: 시뮬레이션 환경이나 특정 타이밍 정보를 제공하기 위한 토픽
    • /sim_ground_truth_pose, /sim_ground_truth_dock_pose: 시뮬레이션에서의 실제 로봇 위치나 도킹 상태의 정보를 제공.
    • /parameter_events: ROS 파라미터의 변경 이벤트를 알리는 메시지.
    • /robot_description: 로봇의 URDF(설계 모델) 같은 설명 정보를 담고 있다.

 

 

  • 인터페이스 진단
    • /diagnostics: 시스템의 진단 정보 및 오류 상태 등을 전달한다.
    • /rosout: ROS 시스템의 로그 메시지(디버깅, 정보, 경고 등)를 모니터링한다.
    • /hmi/buttons, /hmi/display, /hmi/led, /interface_buttons: 휴먼 머신 인터페이스(HMI)와 관련된 버튼, 디스플레이, LED 등의 제어 및 상태 정보이다.

 

 

  • 기타
    • /tf, /tf_static: 좌표 변환(transform) 정보를 제공하여 로봇의 각 부품 간 또는 외부 참조 좌표계와의 관계를 정의한다./
    • /hazard_detection: 로봇이 주변 위험 요소를 감지했을 때 관련 정보를 전송.
    • /joy, /mouse: 입력 장치(조이스틱, 마우스)로부터의 입력 데이터를 전달.
  • /oakd/rgb/preview/…: Oak-D 카메라와 관련된 토픽으로, RGB 이미지, 깊이 정보, 포인트 클라우드 등을 제공.

베터리에 대한 정보 읽기

 

ros2 topic echo /bumper_contact 입력시 범퍼 충돌시에 대한 정보를 얻을수있다.

 

 

 

4. 저 많은것들중 어떤게 turtlebot4를 움직일까?

--> 우선 ros2 topic list -t | grep cmd_vel을 해보자. 그러면 /cmd_vel [geometry_msgs/msg/Twist, geometry_msgs/msg/TwistStamped]이 출력될거임.

--> 저기에서  geometry_msgs/msg/TwistStamped이다.

 

 

5. 아래 명령어같이 입력하면 이동시킬수있다.

ros2 topic pub /cmd_vel geometry_msgs/msg/TwistStamped "{header: {stamp: {sec: 0, nanosec: 0}, frame_id: 'base_link'}, twist: {linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}}"
  • header: 메시지의 메타데이터를 포함하는 표준헤더이다.
    • stamp는 메시지가 생성된 시각을 의미.
    • frame_id는 데이터가 연관된 좌표계의 이름을 나타낸다.
    • twist는 로봇의 선형,각속도 정보를 담고있는 geometry_msgs/msg/Vector3 메시지이며, 3d공간에서는 x,y,z,방향의 회전 속도를 포함
      angular는 각속도를 나타냄

 

 

6. 키보드로는 다음과 같이 입력하자

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -p stamped:=true
  • stamped를 true로 하였는데 이러면 geometry_msgs/msg/TwistStamped에 메시지를 publish함.
    • 만약 false라면 geometry_msgs/msg/Twist에 메시지를 publish함.

 

 

 

 

7. turtlebot의 현재 위치를 알고 싶으면 아래의 명령어를 입력한다.

ros2 run tf2_ros tf2_echo odom base_link

  • Translation ( 위치 )
    • 각각 x,y,z축이다.
  • Rotation ( 자세 )
    • Quaterntion은 로봇의 회전을 의미한다.
      • RPY는 각각 Roll , Pitch , Yaw를 의미한다.
  • Transformation Matrix ( 변환 행렬 )
    • turtlebot의 현재 위치와 자세를 나타내는 4x4 변환 행렬이다.
      • 상위 3x3은 로봇의 회전 행렬이다. 즉, 각 축에 대한 회전 정보를 포함
      • 마지막 열( Tx , Ty , Tz )은 로봇의 위치translation를 나타냄.
[ Rxx  Rxy  Rxz  Tx ]
[ Ryx  Ryy  Ryz  Ty ]
[ Rzx  Rzy  Rzz  Tz ]
[  0    0    0    1 ]

'ROS 2' 카테고리의 다른 글

ROS 2 Tutorials : Creating custom msg and srv files  (0) 2025.02.27
gazebo tutlebot4 카메라 보기  (0) 2025.02.24
Launch file  (0) 2025.02.05
URDF : Using URDF with robot_state_publisher  (1) 2025.02.04
tf2 : Introducing tf2  (0) 2025.02.04