이 디렉터리는 UAV 제어를 위해 표준 TF 체계와 통합 상태 토픽(/uav/odom)을 제공합니다. 시뮬과 현실을 동일한 인터페이스로 다루기 위해 ENU/FLU(REP‑105) 규칙을 따릅니다.
- 컨트롤러는 오직
/uav/odom하나만 구독(nav_msgs/Odometry, ENU/FLU) - TF 의미 고정:
map(전역 기준) →odom(연속 로컬) →base_link(바디) - 소스(시뮬 GT, PX4, VIO/SLAM)는 교체 가능하되 인터페이스는 고정
- 빌드:
colcon build --packages-select gazebo_env_setup - 환경설정:
source install/setup.bash - 실행:
ros2 launch gazebo_env_setup pose_tf_broadcaster.launch.py - 확인:
ros2 topic echo /uav/odom --once
map → odom(정적 1회): 시작 포즈 기준 yaw-only 정렬 → Up 축(ENU z) 일치odom → base_link(동적): 드론의 연속 포즈(시뮬에선 GT 기반)base_link → rotor_{0..3}(정적): 모터 프레임- RViz 고정 프레임:
map
- 토픽:
/uav/odom(nav_msgs/Odometry) - 프레임:
header.frame_id=odom(ENU),child_frame_id=base_link(FLU) - 내용: pose=TF 그대로, twist=포즈 차분(바디 프레임, 저역통과 적용)
- 퍼블리셔:
state_bridge
gazebo_env_setup/pose_tf_broadcaster- 입력:
/model/x500_gimbal_0/pose,/model/x500_gimbal_0/pose_static - 출력:
map→odom(1회 yaw-only),odom→base_link(동적),base_link→rotor_*(정적) - 비고:
x500_gimbal_*프레임 재브로드캐스트 숨김(트리 단순화)
- 입력:
gazebo_env_setup/state_bridge- 기능: TF
odom→base_link를/uav/odom으로 퍼블리시 - 파라미터
rate: 퍼블리시 주기(Hz), 기본 50vel_alpha: 속도 저역통과 계수(0~1), 기본 0.3parent_frame: 기본odomchild_frame: 기본base_link
- 기능: TF
- 상태 모니터링:
/fmu/out/*(예:/fmu/out/vehicle_odometry) - 오프보드 명령:
/fmu/in/offboard_control_mode,/fmu/in/trajectory_setpoint,/fmu/in/vehicle_command - 컨트롤러 상태 입력은 항상
/uav/odom하나로 고정(소스만 교체)
- TF:
ros2 run tf2_ros tf2_echo map odom,ros2 run tf2_ros tf2_echo odom base_link - 상태:
ros2 topic echo /uav/odom --once - 트리:
ros2 run tf2_tools view_frames - 토픽 개요:
ros2 topic list,ros2 topic info /uav/odom
- 시뮬 GT →
pose_tf_broadcaster→ TF(map→odom,odom→base_link) →state_bridge→/uav/odom - 전환 전략: 나중에 VO/SLAM 또는 PX4를 도입해도 소스만 교체하고
/uav/odom은 유지
- RViz “No transform from base_link to map”
- 원인: TF 준비 전 또는 노드 미실행
- 조치: 수 초 대기,
ros2 topic list/ros2 run tf2_ros tf2_echo map base_link로 확인
/uav/odom이 비어 있음- 원인: TF 조회 실패
- 조치:
ros2 run tf2_ros tf2_echo odom base_link로 TF 유무 확인, 노드 실행 확인
- 프레임이 기울어져 보임
- 확인:
ros2 run tf2_ros tf2_echo map odom에서 roll/pitch가 0(yaw-only 정책)
- 확인:
- TF 브로드캐스터:
gazebo_env_setup/src/pose_tf_broadcaster.cpp - 상태 브리지:
gazebo_env_setup/src/state_bridge.cpp - 런치:
gazebo_env_setup/launch/pose_tf_broadcaster.launch.py - RViz 설정:
rviz/PX4_ihw.rviz
state_source:=px4|vio백엔드 추가(파라미터로 소스 전환)- VO/SLAM이
map→odom도 퍼블리시(루프클로저/전역 보정 반영)
