Mavros: Ardupilot νŽŒμ›¨μ–΄μ™€ ν•¨κ»˜ fake_gps ν”ŒλŸ¬κ·ΈμΈ 및 vision_pose_estimation ν”ŒλŸ¬κ·ΈμΈ μ‚¬μš©

에 λ§Œλ“  2018λ…„ 03μ›” 02일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: mavlink/mavros

문제 μ„ΈλΆ€ 정보

포즈 좔정을 μœ„ν•΄ μ˜¨λ³΄λ“œ 카메라λ₯Ό μ‚¬μš©ν•˜μ—¬ μ‹€λ‚΄μ—μ„œ λ“œλ‘  ( SkyViper )을 μ œμ–΄ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 사싀 μ €λŠ” λ§Žμ€ ArUco λ§ˆμ»€κ°€μžˆλŠ” μž₯면을 μ°Ύκ³  opencv의 aruco 탐지 및 포즈 μΆ”μ • μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ λ“œλ‘ μ˜ 포즈λ₯Ό μΆ”μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨νžˆ λ§ν•΄μ„œ 비전을 μ‚¬μš©ν•˜μ—¬ λ“œλ‘ μ˜ 6D 포즈λ₯Ό μΆ”μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이제이 데이터λ₯Ό FCU둜 μ „μ†‘ν•˜μ—¬ μ‹€λ‚΄μ˜ κ°€μ΄λ“œ λͺ¨λ“œμ—μ„œ λ“œλ‘ μ„ μ œμ–΄ν•˜λ €κ³ ν•©λ‹ˆλ‹€. arducopter νŽŒμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ λΆ„λͺ…νžˆ 두 가지 μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ㅏ. fake_pgs ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
λΉ„. vision_pose_estimate ν”ŒλŸ¬κ·ΈμΈ μ‚¬μš©
κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 두 가지 λͺ¨λ‘μ— λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” λ‚΄κ°€ μ–΄λ”˜κ°€μ—μ„œ 잘λͺ»λ˜μ—ˆμ„ λ•Œ λ…μžκ°€ λ‚˜λ₯Ό λ„μšΈ 수 μžˆλ„λ‘ μ•žμ„œ μ–ΈκΈ‰ ν•œ 두 가지 접근법에 λŒ€ν•΄ λ‚΄κ°€ ν•œ 일을 μ„€λͺ…ν•˜κ³  μ‹Άλ‹€.

ㅏ. fake_gps μ‚¬μš©

  1. λ‚΄ apm_config.yaml에 fake_gps ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  2. apm_pluginlists.yaml을 νŽΈμ§‘ν–ˆμœΌλ©° λ‹€μŒμ€ fake_gps λΆ€λΆ„μ˜ λͺ¨μŠ΅μž…λ‹ˆλ‹€.
# fake_gps
fake_gps:
  # select data source
  use_mocap: true       # ~mocap/pose
  mocap_transform: true   # ~mocap/tf instead of pose
  use_vision: false       # ~vision (pose)
  # origin (default: ZΓΌrich)
  geo_origin:
    lat: 30.6197674          # latitude [degrees]
    lon:  -96.3414215          # longitude [degrees]
    alt: 99.9674829152          # altitude (height over the WGS-84 ellipsoid) [meters]
  eph: 2.0
  epv: 2.0
  satellites_visible: 10   # virtual number of visible satellites
  fix_type: 3             # type of GPS fix (default: 3D)
  tf:
    listen: false
    send: false           # send TF?
    frame_id: "map"       # TF frame_id
    child_frame_id: "Quadrotor_pose" # TF child_frame_id
    rate_limit: 10.0      # TF rate
  gps_rate: 5.0           # GPS data publishing rate
  1. λ‚˜λŠ” μ•½ 4Hzμ—μ„œ rostopic / mavros / fake_gps / mocap / tfλ₯Ό 톡해 λ‘œλ΄‡ 포즈λ₯Ό κ²Œμ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ (μ΅œλŒ€ 30HzκΉŒμ§€ 늘릴 수 μžˆμ§€λ§Œ gps_rate 맀개 λ³€μˆ˜κ°€ μ œν•œν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. btw gps_rateλ₯Ό 늘릴 수 μžˆμŠ΅λ‹ˆκΉŒ?)
  2. λ‚˜λŠ” 에코 / mavros / global_position / global μ˜λ―ΈμžˆλŠ” 좜λ ₯을 λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.

λˆ„κ΅¬λ“ μ§€μ΄ 일이 μž‘λ™ν•˜λ„λ‘ μ—¬κΈ°μ—μ„œ λ‚˜λ₯Ό λ„μšΈ 수 μžˆμŠ΅λ‹ˆκΉŒ? λ‹€λ₯Έ μ‘°μΉ˜κ°€ ν•„μš”ν•©λ‹ˆκΉŒ? μ„€μ •ν•˜κ±°λ‚˜ μ„€μ • ν•΄μ œν•΄μ•Όν•˜λŠ” 맀개 λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λΉ„. vision_pose μ‚¬μš©

  1. λ‚΄ apm_config.yaml에 fake_gps ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
  2. apm_pluginlists.yaml을 νŽΈμ§‘ν–ˆμœΌλ©° λ‹€μŒμ€ vision_pose λΆ€λΆ„μ˜ λͺ¨μ–‘μž…λ‹ˆλ‹€.
# vision_pose_estimate
vision_pose:
  tf:
    listen: false           # enable tf listener (disable topic subscribers)
    frame_id: "map"
    child_frame_id: "vision_estimate"
    rate_limit: 10.0
  1. λ‚˜λŠ” rostopic / mavros / vision_pose / pose μœ„μ— λ‘œλ΄‡ 포즈λ₯Ό κ²Œμ‹œν•©λ‹ˆλ‹€.
  2. vision_position_estimate.cppμ—μ„œ μ•½κ°„μ˜ μˆ˜μ •μ„ν•˜κ³  VISION_POSITION_DELTA λŒ€μ‹  VISION_POSITION_ESTIMATE ν•©λ‹ˆλ‹€.
  3. 이 μ½”λ“œκ°€ μ‹€ν–‰λ˜κ³  ν•΄λ‹Ή ν”Œλž˜κ·Έκ°€ μΈμ‡„λ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μœ„ μ½”λ“œμ—μ„œ μ μ ˆν•œ ν”Œλž˜κ·Έλ₯Ό μ„€μ • ν–ˆμœΌλ―€λ‘œ mavrosκ°€ FCU둜 데이터λ₯Ό 보내고 μžˆμ§€λ§Œ FCU λμ—μ„œ μˆ˜μ‹ μ΄ 없을 κ²ƒμœΌλ‘œ 결둠을 λ‚΄λ¦½λ‹ˆλ‹€.

이것에 λ§Žμ€ μ‹œκ°„μ„ λ³΄λƒˆμŠ΅λ‹ˆλ‹€, μ–΄λ–€ 도움이라도 λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!
μΆ”μ‹  : PX4 νŽŒμ›¨μ–΄μ—μ„œ vision_position_estimateλ₯Ό μˆ˜ν–‰ ν•  수 μžˆμ—ˆκ³  κ±°κΈ°μ—μ„œ fake_gpsλ₯Ό μ‹œλ„ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ λͺ‡ 가지 μ œμ•½μœΌλ‘œ 인해 arducopter νŽŒμ›¨μ–΄ μ—μ„œμ΄ μž‘μ—…μ„ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

MAVROS 버전 및 ν”Œλž«νΌ

마 브둜슀 : 0.18
ROS : ν‚€λ„€ν‹±
Ubuntu : 16.04

Autopilot μœ ν˜• 및 버전

[X] ArduPilot
[] PX4

버전 : 3.4.6

λ…Έλ“œ 둜그

started roslaunch server http://subodh-desktop:41065/

SUMMARY
========

CLEAR PARAMETERS
 * /mavros/

PARAMETERS
 * /mavros/cmd/use_comp_id_system_control: False
 * /mavros/conn/heartbeat_rate: 1.0
 * /mavros/conn/system_time_rate: 0.0
 * /mavros/conn/timeout: 10.0
 * /mavros/conn/timesync_rate: 0.0
 * /mavros/distance_sensor/rangefinder_pub/field_of_view: 0.0
 * /mavros/distance_sensor/rangefinder_pub/frame_id: lidar
 * /mavros/distance_sensor/rangefinder_pub/id: 0
 * /mavros/distance_sensor/rangefinder_pub/send_tf: False
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/x: 0.0
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/y: 0.0
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/z: -0.1
 * /mavros/distance_sensor/rangefinder_sub/id: 1
 * /mavros/distance_sensor/rangefinder_sub/orientation: PITCH_270
 * /mavros/distance_sensor/rangefinder_sub/subscriber: True
 * /mavros/fake_gps/eph: 2.0
 * /mavros/fake_gps/epv: 2.0
 * /mavros/fake_gps/fix_type: 3
 * /mavros/fake_gps/geo_origin/alt: 99.9674829152
 * /mavros/fake_gps/geo_origin/lat: 30.6197674
 * /mavros/fake_gps/geo_origin/lon: -96.3414215
 * /mavros/fake_gps/gps_rate: 5.0
 * /mavros/fake_gps/mocap_transform: True
 * /mavros/fake_gps/satellites_visible: 10
 * /mavros/fake_gps/tf/child_frame_id: Quadrotor_pose
 * /mavros/fake_gps/tf/frame_id: map
 * /mavros/fake_gps/tf/listen: False
 * /mavros/fake_gps/tf/rate_limit: 10.0
 * /mavros/fake_gps/tf/send: False
 * /mavros/fake_gps/use_mocap: True
 * /mavros/fake_gps/use_vision: False
 * /mavros/fcu_protocol: v2.0
 * /mavros/fcu_url: /dev/ttyACM0:57600
 * /mavros/gcs_url: 
 * /mavros/global_position/child_frame_id: base_link
 * /mavros/global_position/frame_id: map
 * /mavros/global_position/rot_covariance: 99999.0
 * /mavros/global_position/tf/child_frame_id: base_link
 * /mavros/global_position/tf/frame_id: map
 * /mavros/global_position/tf/global_frame_id: earth
 * /mavros/global_position/tf/send: False
 * /mavros/global_position/use_relative_alt: True
 * /mavros/image/frame_id: px4flow
 * /mavros/imu/angular_velocity_stdev: 0.000349065850399
 * /mavros/imu/frame_id: base_link
 * /mavros/imu/linear_acceleration_stdev: 0.0003
 * /mavros/imu/magnetic_stdev: 0.0
 * /mavros/imu/orientation_stdev: 1.0
 * /mavros/local_position/frame_id: map
 * /mavros/local_position/tf/child_frame_id: base_link
 * /mavros/local_position/tf/frame_id: map
 * /mavros/local_position/tf/send: False
 * /mavros/local_position/tf/send_fcu: False
 * /mavros/mission/pull_after_gcs: True
 * /mavros/mocap/use_pose: False
 * /mavros/mocap/use_tf: True
 * /mavros/odometry/estimator_type: 3
 * /mavros/odometry/frame_tf/desired_frame: ned
 * /mavros/plugin_blacklist: ['actuator_contro...
 * /mavros/plugin_whitelist: ['fake_gps', 'vis...
 * /mavros/px4flow/frame_id: px4flow
 * /mavros/px4flow/ranger_fov: 0.118682389136
 * /mavros/px4flow/ranger_max_range: 5.0
 * /mavros/px4flow/ranger_min_range: 0.3
 * /mavros/safety_area/p1/x: 1.0
 * /mavros/safety_area/p1/y: 1.0
 * /mavros/safety_area/p1/z: 1.0
 * /mavros/safety_area/p2/x: -1.0
 * /mavros/safety_area/p2/y: -1.0
 * /mavros/safety_area/p2/z: -1.0
 * /mavros/setpoint_accel/send_force: False
 * /mavros/setpoint_attitude/reverse_thrust: False
 * /mavros/setpoint_attitude/tf/child_frame_id: target_attitude
 * /mavros/setpoint_attitude/tf/frame_id: map
 * /mavros/setpoint_attitude/tf/listen: False
 * /mavros/setpoint_attitude/tf/rate_limit: 50.0
 * /mavros/setpoint_attitude/use_quaternion: False
 * /mavros/setpoint_position/mav_frame: LOCAL_NED
 * /mavros/setpoint_position/tf/child_frame_id: target_position
 * /mavros/setpoint_position/tf/frame_id: map
 * /mavros/setpoint_position/tf/listen: False
 * /mavros/setpoint_position/tf/rate_limit: 50.0
 * /mavros/setpoint_velocity/mav_frame: LOCAL_NED
 * /mavros/startup_px4_usb_quirk: False
 * /mavros/sys/disable_diag: False
 * /mavros/sys/min_voltage: 10.0
 * /mavros/target_component_id: 1
 * /mavros/target_system_id: 1
 * /mavros/tdr_radio/low_rssi: 40
 * /mavros/time/time_ref_source: fcu
 * /mavros/time/timesync_avg_alpha: 0.6
 * /mavros/time/timesync_mode: NONE
 * /mavros/vibration/frame_id: base_link
 * /mavros/vision_pose/tf/child_frame_id: Quadrotor_pose
 * /mavros/vision_pose/tf/frame_id: map
 * /mavros/vision_pose/tf/listen: False
 * /mavros/vision_pose/tf/rate_limit: 10.0
 * /mavros/vision_speed/listen_twist: False
 * /rosdistro: kinetic
 * /rosversion: 1.12.12

NODES
  /
    mavros (mavros/mavros_node)

auto-starting new master
process[master]: started with pid [26930]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to af2a9730-1e56-11e8-86d2-001fc69c99e7
process[rosout-1]: started with pid [26943]
started core service [/rosout]
process[mavros-2]: started with pid [26961]
[ INFO] [1520021829.553095960]: FCU URL: /dev/ttyACM0:57600
[ INFO] [1520021829.554915572]: serial0: device: /dev/ttyACM0 @ 57600 bps
[ INFO] [1520021829.555552991]: GCS bridge disabled
[ INFO] [1520021829.567142748]: Plugin 3dr_radio loaded
[ INFO] [1520021829.569320914]: Plugin 3dr_radio initialized
[ INFO] [1520021829.569349388]: Plugin actuator_control blacklisted
[ INFO] [1520021829.571809744]: Plugin adsb loaded
[ INFO] [1520021829.575769648]: Plugin adsb initialized
[ INFO] [1520021829.575794473]: Plugin altitude blacklisted
[ INFO] [1520021829.575892237]: Plugin cam_imu_sync loaded
[ INFO] [1520021829.576626653]: Plugin cam_imu_sync initialized
[ INFO] [1520021829.576772377]: Plugin command loaded
[ INFO] [1520021829.582684066]: Plugin command initialized
[ INFO] [1520021829.582712464]: Plugin debug_value blacklisted
[ INFO] [1520021829.582886299]: Plugin distance_sensor loaded
[ INFO] [1520021829.592604674]: Plugin distance_sensor initialized
[ INFO] [1520021829.592748090]: Plugin fake_gps loaded
[ INFO] [1520021829.609103603]: Plugin fake_gps initialized
[ INFO] [1520021829.609128115]: Plugin ftp blacklisted
[ INFO] [1520021829.609259829]: Plugin global_position loaded
[ INFO] [1520021829.628580110]: Plugin global_position initialized
[ INFO] [1520021829.628612736]: Plugin hil blacklisted
[ INFO] [1520021829.628766952]: Plugin home_position loaded
[ INFO] [1520021829.633001155]: Plugin home_position initialized
[ INFO] [1520021829.633140461]: Plugin imu loaded
[ INFO] [1520021829.640533947]: Plugin imu initialized
[ INFO] [1520021829.640671494]: Plugin local_position loaded
[ INFO] [1520021829.646783905]: Plugin local_position initialized
[ INFO] [1520021829.646948100]: Plugin manual_control loaded
[ INFO] [1520021829.650807807]: Plugin manual_control initialized
[ INFO] [1520021829.650943083]: Plugin mocap_pose_estimate loaded
[ INFO] [1520021829.655518964]: Plugin mocap_pose_estimate initialized
[ INFO] [1520021829.655642737]: Plugin obstacle_distance loaded
[ INFO] [1520021829.659014223]: Plugin obstacle_distance initialized
[ INFO] [1520021829.659130864]: Plugin odom loaded
[ INFO] [1520021829.663794739]: Plugin odom initialized
[ INFO] [1520021829.664012214]: Plugin param loaded
[ INFO] [1520021829.667288846]: Plugin param initialized
[ INFO] [1520021829.667312025]: Plugin px4flow blacklisted
[ INFO] [1520021829.667423654]: Plugin rangefinder loaded
[ INFO] [1520021829.668137088]: Plugin rangefinder initialized
[ INFO] [1520021829.668297342]: Plugin rc_io loaded
[ INFO] [1520021829.672569622]: Plugin rc_io initialized
[ INFO] [1520021829.672594510]: Plugin safety_area blacklisted
[ INFO] [1520021829.672725799]: Plugin setpoint_accel loaded
[ INFO] [1520021829.676462007]: Plugin setpoint_accel initialized
[ INFO] [1520021829.676710869]: Plugin setpoint_attitude loaded
[ INFO] [1520021829.689281332]: Plugin setpoint_attitude initialized
[ INFO] [1520021829.689452779]: Plugin setpoint_position loaded
[ INFO] [1520021829.705853198]: Plugin setpoint_position initialized
[ INFO] [1520021829.706010896]: Plugin setpoint_raw loaded
[ INFO] [1520021829.716862466]: Plugin setpoint_raw initialized
[ INFO] [1520021829.717029302]: Plugin setpoint_velocity loaded
[ INFO] [1520021829.723754613]: Plugin setpoint_velocity initialized
[ INFO] [1520021829.723998780]: Plugin sys_status loaded
[ INFO] [1520021829.730640327]: Plugin sys_status initialized
[ INFO] [1520021829.730800888]: Plugin sys_time loaded
[ INFO] [1520021829.734651825]: TM: Timesync mode: NONE
[ INFO] [1520021829.735319038]: Plugin sys_time initialized
[ INFO] [1520021829.735450495]: Plugin vfr_hud loaded
[ INFO] [1520021829.736911489]: Plugin vfr_hud initialized
[ INFO] [1520021829.736935514]: Plugin vibration blacklisted
[ INFO] [1520021829.737033502]: Plugin vision_pose_estimate loaded
[ INFO] [1520021829.746346315]: Plugin vision_pose_estimate initialized
[ INFO] [1520021829.746515765]: Plugin vision_speed_estimate loaded
[ INFO] [1520021829.750239950]: Plugin vision_speed_estimate initialized
[ INFO] [1520021829.750419761]: Plugin waypoint loaded
[ INFO] [1520021829.755638602]: Plugin waypoint initialized
[ INFO] [1520021829.755726057]: Built-in SIMD instructions: SSE, SSE2
[ INFO] [1520021829.755751539]: Built-in MAVLink package version: 2018.2.2
[ INFO] [1520021829.755767668]: Known MAVLink dialects: common ardupilotmega ASLUAV autoquad matrixpilot paparazzi slugs standard uAvionix ualberta
[ INFO] [1520021829.755795346]: MAVROS started. MY ID 1.240, TARGET ID 1.1
[ INFO] [1520021829.849907257]: CON: Got HEARTBEAT, connected. FCU: ArduPilotMega / ArduCopter
[ INFO] [1520021830.072218261]: IMU: Raw IMU message used.
[ INFO] [1520021830.075098601]: RC_CHANNELS message detected!
[ WARN] [1520021830.075901836]: TM: Wrong FCU time.
[ WARN] [1520021830.572875238]: GP: No GPS fix
[ INFO] [1520021830.859501557]: VER: 1.1: Capabilities         0x0000000000003bcf
[ INFO] [1520021830.859610755]: VER: 1.1: Flight software:     030406ff (e707341bde6b667d8c965992)
[ INFO] [1520021830.859692086]: VER: 1.1: Middleware software: 00000000 (de6b667d8c965992)
[ INFO] [1520021830.859811288]: VER: 1.1: OS software:         00000000 (8c965992)
[ INFO] [1520021830.859894423]: VER: 1.1: Board hardware:      00000000
[ INFO] [1520021830.859991754]: VER: 1.1: VID/PID:             0000:0000
[ INFO] [1520021830.860091685]: VER: 1.1: UID:                 0000000000000000
[ WARN] [1520021830.860457816]: CMD: Unexpected command 520, result 0
[ERROR] [1520021833.850124648]: FCU: PreArm: RC not calibrated
[ERROR] [1520021833.850282817]: FCU: PreArm: Compass offsets too high
[ INFO] [1520021839.850783561]: HP: requesting home position
[ INFO] [1520021839.853771718]: FCU: APM:Copter V3.4.6 (e707341b)
[ INFO] [1520021839.854040516]: FCU: PX4: de6b667d NuttX: 8c965992
[ INFO] [1520021839.854183948]: FCU: Frame: QUAD
[ INFO] [1520021839.854286161]: FCU: PX4v2 0034002F 31334705 39343031
[ INFO] [1520021840.469965330]: PR: parameters list received
[ INFO] [1520021844.857490824]: WP: mission received
[ INFO] [1520021849.851115121]: HP: requesting home position
[ INFO] [1520021859.850746668]: HP: requesting home position
[ WARN] [1520021860.684726116]: GP: No GPS fix
[ERROR] [1520021863.861805572]: FCU: PreArm: RC not calibrated
[ERROR] [1520021863.861953300]: FCU: PreArm: Compass offsets too high

진단

header: 
  seq: 59
  stamp: 
    secs: 1520021901
    nsecs: 257080897
  frame_id: ''
status: 
  - 
    level: 0
    name: "mavros: FCU connection"
    message: "connected"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Received packets:"
        value: "6240"
      - 
        key: "Dropped packets:"
        value: "0"
      - 
        key: "Buffer overruns:"
        value: "0"
      - 
        key: "Parse errors:"
        value: "0"
      - 
        key: "Rx sequence number:"
        value: "211"
      - 
        key: "Tx sequence number:"
        value: "82"
      - 
        key: "Rx total bytes:"
        value: "182353"
      - 
        key: "Tx total bytes:"
        value: "1883"
      - 
        key: "Rx speed:"
        value: "2106.000000"
      - 
        key: "Tx speed:"
        value: "21.000000"
  - 
    level: 2
    name: "mavros: GPS"
    message: "No satellites"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Satellites visible"
        value: "0"
      - 
        key: "Fix type"
        value: "0"
      - 
        key: "EPH (m)"
        value: "0.00"
      - 
        key: "EPV (m)"
        value: "0.00"
  - 
    level: 0
    name: "mavros: Heartbeat"
    message: "Normal"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Heartbeats since startup"
        value: "72"
      - 
        key: "Frequency (Hz)"
        value: "1.037047"
      - 
        key: "Vehicle type"
        value: "Quadrotor"
      - 
        key: "Autopilot type"
        value: "ArduPilotMega / ArduCopter"
      - 
        key: "Mode"
        value: "STABILIZE"
      - 
        key: "System status"
        value: "Standby"
  - 
    level: 0
    name: "mavros: System"
    message: "Normal"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Sensor present"
        value: "0x0160FC0F"
      - 
        key: "Sensor enabled"
        value: "0x00601C0F"
      - 
        key: "Sensor helth"
        value: "0x0160FC0F"
      - 
        key: "3D gyro"
        value: "Ok"
      - 
        key: "3D accelerometer"
        value: "Ok"
      - 
        key: "3D magnetometer"
        value: "Ok"
      - 
        key: "absolute pressure"
        value: "Ok"
      - 
        key: "3D angular rate control"
        value: "Ok"
      - 
        key: "attitude stabilization"
        value: "Ok"
      - 
        key: "yaw position"
        value: "Ok"
      - 
        key: "AHRS subsystem health"
        value: "Ok"
      - 
        key: "Terrain subsystem health"
        value: "Ok"
      - 
        key: "CPU Load (%)"
        value: "30.1"
      - 
        key: "Drop rate (%)"
        value: "0.0"
      - 
        key: "Errors comm"
        value: "0"
      - 
        key: "Errors count #1"
        value: "0"
      - 
        key: "Errors count #2"
        value: "0"
      - 
        key: "Errors count #3"
        value: "0"
      - 
        key: "Errors count #4"
        value: "0"
  - 
    level: 1
    name: "mavros: Battery"
    message: "Low voltage"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Voltage"
        value: "0.00"
      - 
        key: "Current"
        value: "-0.0"
      - 
        key: "Remaining"
        value: "-1.0"
---

아이디 확인

OK. I got messages from 1:1.

---
Received 1131 messages, from 1 addresses
sys:comp   list of messages
  1:1     0, 1, 2, 193, 152, 150, 24, 27, 29, 30, 33, 163, 36, 165, 42, 178, 182, 62, 65, 74, 77, 241, 116, 125

APM extras mocap question vision

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @SubMishMar ,

λ˜ν•œ fake_gps ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λ €κ³ ν–ˆμ§€λ§Œ μ‚¬μš© 방법을 μ•Œ 수 μ—†μ—ˆμ§€λ§Œ 여기에 λ‚΄κ°€ ν•œ 일이 μžˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

Mocap μ‹œμŠ€ν…œ (λ‚΄ κ²½μš°μ—λŠ” UWB)μ—μ„œ μœ„μΉ˜ 데이터λ₯Ό 가져와 μœ„λ„ 경도 κ°’μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ros λ…Έλ“œλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒμ΄ 값을 / mavros / hil / gps μ£Όμ œμ— κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ mavros의 GPS_TYPE 맀개 λ³€μˆ˜λ₯Ό 14둜 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€ (이둜 인해 fcuκ°€ κ°€μ§œ gps 데이터λ₯Ό ν—ˆμš© 함). μœ„μΉ˜ 데이터λ₯Ό 제곡 ν•  수 μžˆμ—ˆμ§€λ§Œ 쒋은 μœ„μΉ˜ μœ μ§€λ₯Ό λ‹¬μ„±ν•˜λŠ” 데 λͺ‡ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 더 λ‚˜μ€ κ²°κ³Όλ₯Ό μ–»κΈ° μœ„ν•΄ 값을 μ‘°μ •ν•˜λ €κ³ ν•©λ‹ˆλ‹€. 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ κ°€μ§œ gps ν”ŒλŸ¬κ·ΈμΈμ„ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” 방법을 μ„€λͺ…ν•˜λ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

μΆ”μ‹ . lat0 및 long0 값을 μ‚¬μš©μž μœ„μΉ˜λ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ ros λ…Έλ“œ μ½”λ“œμž…λ‹ˆλ‹€.

// adding x, y, z to long lat transform
// v3 - taking data from UWB and sending to APM

#include <ros/ros.h>
//#include <geometry_msgs/PoseStamped.h>
#include <cstdlib>
#include <mavros_msgs/HilGPS.h>
//#include <mavros_msgs/OverrideRCIn.h>
#include <math.h> 
#include <stdlib.h>
#include <stdio.h>
#include <array>
#include <geometry_msgs/PoseStamped.h>

std::vector <float> GPS = {0, 0}; // {long, lat}
float xPos = 0;
float yPos = 0;
float zPos = 0;

std::vector <float> CartToGPS (float x, float y, float z){ // x, y, z in [mm]

  std::vector <float> GPS = {0, 0}; // {long, lat}

  //Some constants
  float pi = 3.14159265359; // pi
  float alpha = pi / 2; // angle between x axis and North
  float r = 6371000000; // mean radius of Earh in [mm]
  float lat0 = (39.894470 * pi) / 180; // origin latitude
  float long0 = (32.777973 * pi) / 180; // origin longitude

  float dlat = (x * cos(alpha) + y * sin(alpha)) / r; // [rad]
  float dlong = (x * sin(alpha) - y * cos(alpha)) / r; // [rad]

  GPS = {((long0 + dlong) * 180) / pi, ((lat0 + dlat) * 180) / pi};

  return GPS;
}

void poseMessageReceived(const geometry_msgs::PoseStamped &msg) // callback function for pose Message
{
  xPos = msg.pose.position.x;
  yPos = msg.pose.position.y;
  zPos = msg.pose.position.z;
  //ROS_INFO_STREAM("callback");
}


int main(int argc, char **argv) {

  // if(argc<4){
  //   printf("Usage: rosrun send_pose position_sender lat long alt\n");
  //   return -1;
  // }

    //int rate = 10;

  ros::init(argc, argv, "position_sender");
  ros::NodeHandle n;

  ros::Publisher pub = n.advertise<mavros_msgs::HilGPS>("mavros/hil/gps", 1);
  ros::Subscriber subPose = n.subscribe("UWB_Pos",5,&poseMessageReceived);

  ros::Rate rate(5);

  while(ros::ok()){

        mavros_msgs::HilGPS msg;

        //msg.header.frame_id = "1";
    msg.header.stamp=ros::Time::now();

    // float x = double(atoi(argv[1]));
    // float y = double(atoi(argv[2]));
    // float z = double(atoi(argv[3]));

    GPS = CartToGPS(xPos, yPos, zPos);

    //msg.header.stamp=ros::Time::now();

    msg.fix_type = 3;

    msg.geo.longitude = GPS[0];
    msg.geo.latitude = GPS[1];
    msg.geo.altitude = zPos / 10000;

        // msg.eph = 65535;
        // msg.epv = 65535;
        // msg.vel = 65535;
  //   msg.vn = 0;
  //   msg.ve = 0;
  //   msg.vd = 0;
  //   msg.cog = 65535;
  //   msg.satellites_visible = 255;

    msg.eph = 2.0;
    msg.epv = 2.0;
    msg.vel = 65535;
    msg.vn = 0;
    msg.ve = 0;
    msg.vd = 0;
    msg.cog = 65535;
    msg.satellites_visible = 255;

    //ROS_INFO("Position data sent %f, %f, %f", msg.geo.latitude, msg.geo.longitude, msg.geo.altitude);

        pub.publish(msg);
        // rc_override_pub.publish(msg_override);

    ros::spinOnce();
        rate.sleep();
    }   
}

λͺ¨λ“  5 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” @SubMishMar ,

λ˜ν•œ fake_gps ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λ €κ³ ν–ˆμ§€λ§Œ μ‚¬μš© 방법을 μ•Œ 수 μ—†μ—ˆμ§€λ§Œ 여기에 λ‚΄κ°€ ν•œ 일이 μžˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

Mocap μ‹œμŠ€ν…œ (λ‚΄ κ²½μš°μ—λŠ” UWB)μ—μ„œ μœ„μΉ˜ 데이터λ₯Ό 가져와 μœ„λ„ 경도 κ°’μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ros λ…Έλ“œλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒμ΄ 값을 / mavros / hil / gps μ£Όμ œμ— κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ mavros의 GPS_TYPE 맀개 λ³€μˆ˜λ₯Ό 14둜 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€ (이둜 인해 fcuκ°€ κ°€μ§œ gps 데이터λ₯Ό ν—ˆμš© 함). μœ„μΉ˜ 데이터λ₯Ό 제곡 ν•  수 μžˆμ—ˆμ§€λ§Œ 쒋은 μœ„μΉ˜ μœ μ§€λ₯Ό λ‹¬μ„±ν•˜λŠ” 데 λͺ‡ 가지 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 더 λ‚˜μ€ κ²°κ³Όλ₯Ό μ–»κΈ° μœ„ν•΄ 값을 μ‘°μ •ν•˜λ €κ³ ν•©λ‹ˆλ‹€. 도움이 λ˜μ—ˆκΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ κ°€μ§œ gps ν”ŒλŸ¬κ·ΈμΈμ„ μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜λŠ” 방법을 μ„€λͺ…ν•˜λ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€ :)

μΆ”μ‹ . lat0 및 long0 값을 μ‚¬μš©μž μœ„μΉ˜λ‘œ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ ros λ…Έλ“œ μ½”λ“œμž…λ‹ˆλ‹€.

// adding x, y, z to long lat transform
// v3 - taking data from UWB and sending to APM

#include <ros/ros.h>
//#include <geometry_msgs/PoseStamped.h>
#include <cstdlib>
#include <mavros_msgs/HilGPS.h>
//#include <mavros_msgs/OverrideRCIn.h>
#include <math.h> 
#include <stdlib.h>
#include <stdio.h>
#include <array>
#include <geometry_msgs/PoseStamped.h>

std::vector <float> GPS = {0, 0}; // {long, lat}
float xPos = 0;
float yPos = 0;
float zPos = 0;

std::vector <float> CartToGPS (float x, float y, float z){ // x, y, z in [mm]

  std::vector <float> GPS = {0, 0}; // {long, lat}

  //Some constants
  float pi = 3.14159265359; // pi
  float alpha = pi / 2; // angle between x axis and North
  float r = 6371000000; // mean radius of Earh in [mm]
  float lat0 = (39.894470 * pi) / 180; // origin latitude
  float long0 = (32.777973 * pi) / 180; // origin longitude

  float dlat = (x * cos(alpha) + y * sin(alpha)) / r; // [rad]
  float dlong = (x * sin(alpha) - y * cos(alpha)) / r; // [rad]

  GPS = {((long0 + dlong) * 180) / pi, ((lat0 + dlat) * 180) / pi};

  return GPS;
}

void poseMessageReceived(const geometry_msgs::PoseStamped &msg) // callback function for pose Message
{
  xPos = msg.pose.position.x;
  yPos = msg.pose.position.y;
  zPos = msg.pose.position.z;
  //ROS_INFO_STREAM("callback");
}


int main(int argc, char **argv) {

  // if(argc<4){
  //   printf("Usage: rosrun send_pose position_sender lat long alt\n");
  //   return -1;
  // }

    //int rate = 10;

  ros::init(argc, argv, "position_sender");
  ros::NodeHandle n;

  ros::Publisher pub = n.advertise<mavros_msgs::HilGPS>("mavros/hil/gps", 1);
  ros::Subscriber subPose = n.subscribe("UWB_Pos",5,&poseMessageReceived);

  ros::Rate rate(5);

  while(ros::ok()){

        mavros_msgs::HilGPS msg;

        //msg.header.frame_id = "1";
    msg.header.stamp=ros::Time::now();

    // float x = double(atoi(argv[1]));
    // float y = double(atoi(argv[2]));
    // float z = double(atoi(argv[3]));

    GPS = CartToGPS(xPos, yPos, zPos);

    //msg.header.stamp=ros::Time::now();

    msg.fix_type = 3;

    msg.geo.longitude = GPS[0];
    msg.geo.latitude = GPS[1];
    msg.geo.altitude = zPos / 10000;

        // msg.eph = 65535;
        // msg.epv = 65535;
        // msg.vel = 65535;
  //   msg.vn = 0;
  //   msg.ve = 0;
  //   msg.vd = 0;
  //   msg.cog = 65535;
  //   msg.satellites_visible = 255;

    msg.eph = 2.0;
    msg.epv = 2.0;
    msg.vel = 65535;
    msg.vn = 0;
    msg.ve = 0;
    msg.vd = 0;
    msg.cog = 65535;
    msg.satellites_visible = 255;

    //ROS_INFO("Position data sent %f, %f, %f", msg.geo.latitude, msg.geo.longitude, msg.geo.altitude);

        pub.publish(msg);
        // rc_override_pub.publish(msg_override);

    ros::spinOnce();
        rate.sleep();
    }   
}

@mellonUAV κ°μ‚¬ν•©λ‹ˆλ‹€ .. λ‚˜λŠ” 이것을 μ‹œλ„ν•˜κ³  μ–΄λ–»κ²Œ μ§„ν–‰λ˜λŠ”μ§€ μ•Œλ €μ€„ κ²ƒμž…λ‹ˆλ‹€.

fake_gps λŒ€ν•œ @mellonUAV λŠ” APM이 맀개 λ³€μˆ˜ 등을 μ„€μ •ν•  ν•„μš”μ—†μ΄ 기본적으둜 HIL_GPS λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. λ˜λŠ” @SubMishMarκ°€ λ§ν–ˆλ“―μ΄ GPS_TYPE 을 14 둜 μ„€μ •ν•΄μ•Ό ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. VISION_POSITION_DELTA 많이 말할 μˆ˜λŠ” μ—†μ§€λ§Œ μ‹€μ œλ‘œλŠ” μžλ™ μ‘°μ’… μž₯치 μ’…λ£Œμ— 따라 λ‹€λ¦…λ‹ˆλ‹€. @khancyr 여기에 ꢌμž₯ 사항이 μžˆμŠ΅λ‹ˆκΉŒ?
@SubMishMar κ·€ν•˜μ˜ μ½”λ“œλŠ” κ°μ‚¬ν•˜μ§€λ§Œ fake_gps λŠ” ν•„μš”ν•œ λ³€ν™˜μ„ μ •ν™•ν•˜κ²Œ μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ‚¬μš©λ²•μ— λŒ€ν•΄ μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λŠ” 것은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš”! ν—‰
PX4κ°€ OFFBOARD λ˜λŠ” POSCTL λͺ¨λ“œμ—μ„œ μž‘λ™ν•˜κΈ°λ₯Ό μ›ν•©λ‹ˆλ‹€. λ‘˜ λ‹€ ν—ˆμš©λ©λ‹ˆλ‹€. mocap μ‹œμŠ€ν…œ OptiTrack이 μžˆμŠ΅λ‹ˆλ‹€. px4, mavros 및 mocap에 λŒ€ν•œ githubμ—μ„œ λ§Žμ€ 문제λ₯Ό μ½μ—ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ—¬μ „νžˆ λͺ‡ 가지 질문이 μžˆμŠ΅λ‹ˆλ‹€.

  1. λ§Žμ€ μ‚¬μš©μžκ°€ ros νŒ¨ν‚€μ§€ 'mavros'λ₯Ό μ–ΈκΈ‰ν–ˆμ§€λ§Œμ΄ 'mavros'κ°€ μ–΄λ””μ—μ„œ μ™”λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.? μ„€μΉ˜ λͺ…λ Ή "sudo apt-get install ros-kinetic-mavros"μ—μ„œ μ˜€λŠ” κ²ƒμž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ git cloneμ—μ„œ μ˜€λŠ” κ²ƒμž…λ‹ˆκΉŒ? λ‘˜ 사이에 차이점이 μžˆμŠ΅λ‹ˆκΉŒ? μ²˜μŒμ—λŠ” "apt-get install", "roslaunch mavros px4.launch"κ°€ μž‘λ™ ν•œ 후에 git을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ§€λ‚œμ£Όμ— μ €λŠ” git clone으둜 μ†ŒμŠ€ μ½”λ“œλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.이 μ†ŒμŠ€ μ½”λ“œμ—λŠ” "px4.launch"도 μžˆμŠ΅λ‹ˆλ‹€ !!
    κ·Έλž˜μ„œ μš°λ¦¬κ°€ PX4 (Set_Point_Position, Set_Point_Attitude λ“± ......)λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ mavrosλ₯Ό μ‚¬μš©ν•˜λŠ” λ™μ•ˆ μ–΄λ–€ 'mavros'λ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
  2. λ˜ν•œ 일뢀 μ‚¬μš©μžκ°€ "mocap_pose_estimate"ν”ŒλŸ¬κ·ΈμΈμ„ μ–ΈκΈ‰ ν•œ 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ§Žμ€ μ‚¬μš©μžκ°€μ΄ ν”ŒλŸ¬κ·ΈμΈμ΄ mocapμ—μ„œ PX4λ₯Ό μˆ˜μ •ν•˜λŠ” μ’Œν‘œκ³„λ‘œ 데이터λ₯Ό λ³€ν™˜ ν•  수 μžˆλ‹€κ³  λ§ν–ˆμ§€λ§Œ μ‚¬μš© 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ…Έλ“œμž…λ‹ˆκΉŒ? '/ mavros / mocap / pose'와 같은 주제? μ•„λ‹ˆλ©΄ μš°λ¦¬κ°€ 직접 μ‚¬μš©ν•  μˆ˜μžˆλŠ” λͺ‡ 가지 κΈ°λŠ₯μΌκΉŒμš”?
    κ·Έλž˜μ„œ λ‚˜λŠ” 그것이 무엇이며 μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이 "ν”ŒλŸ¬κ·ΈμΈ"을 λ‚΄ ν”„λ‘œμ νŠΈμ— μ–΄λ–»κ²Œ μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ ??

λŒ€λ‹¨νžˆ κ°μ‚¬ν•©λ‹ˆλ‹€!
졜고의 μ†Œμ› !!

λ§Žμ€ μ‚¬μš©μžκ°€ ros νŒ¨ν‚€μ§€ 'mavros'λ₯Ό μ–ΈκΈ‰ν–ˆμ§€λ§Œμ΄ 'mavros'κ°€ μ–΄λ””μ—μ„œ μ™”λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.?

λŒ“κΈ€μ„ λ‹¬κ³ μžˆλŠ” μ €μž₯μ†Œμ˜ νŒ¨ν‚€μ§€μž…λ‹ˆλ‹€.

μ„€μΉ˜ λͺ…λ Ή "sudo apt-get install ros-kinetic-mavros"μ—μ„œ μ˜€λŠ” κ²ƒμž…λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ git cloneμ—μ„œ μ˜€λŠ” κ²ƒμž…λ‹ˆκΉŒ?

릴리슀 버전 (deb의) λ˜λŠ” μ—…μŠ€νŠΈλ¦Ό 버전 (μ €μž₯μ†Œλ₯Ό λ³΅μ œν•˜λŠ” gitμ—μ„œ)을 μ‚¬μš© ν•˜λ €λŠ”μ§€ 여뢀에 따라 λ‹€λ¦…λ‹ˆλ‹€.

λ‘˜ 사이에 차이점이 μžˆμŠ΅λ‹ˆκΉŒ?

릴리슀 버전이 μ—…μŠ€νŠΈλ¦Ό λ§ˆμŠ€ν„°μ™€ λ™κΈ°ν™”λ˜λŠ”μ§€ 여뢀에 따라 λ‹€λ₯΄μ§€λ§Œ μ΄λŠ” 개발 μΈ‘λ©΄μ—μ„œ 항상 진행 μ€‘μ΄λ―€λ‘œ 일반적으둜 릴리슀 버전은 μ—…μŠ€νŠΈλ¦Ό λ§ˆμŠ€ν„° 뒀에 μžˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—λŠ” "apt-get install", "roslaunch mavros px4.launch"κ°€ μž‘λ™ ν•œ 후에 git을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ§€λ‚œμ£Όμ— μ €λŠ” git clone으둜 μ†ŒμŠ€ μ½”λ“œλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.이 μ†ŒμŠ€ μ½”λ“œμ—λŠ” "px4.launch"도 μžˆμŠ΅λ‹ˆλ‹€ !!

λ„€, μ •μƒμž…λ‹ˆλ‹€. 릴리슀 버전은 Ubuntu 배포 μ €μž₯μ†Œμ— 릴리슀 된이 μ €μž₯μ†Œμž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ μš°λ¦¬κ°€ PX4 (Set_Point_Position, Set_Point_Attitude λ“± ......)λ₯Ό μ œμ–΄ν•˜κΈ° μœ„ν•΄ mavrosλ₯Ό μ‚¬μš©ν•˜λŠ” λ™μ•ˆ μ–΄λ–€ 'mavros'λ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

λͺ¨λ‘ μž‘λ™ν•©λ‹ˆλ‹€.

λ˜ν•œ 일뢀 μ‚¬μš©μžκ°€ "mocap_pose_estimate"ν”ŒλŸ¬κ·ΈμΈμ„ μ–ΈκΈ‰ ν•œ 것을 λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ§Žμ€ μ‚¬μš©μžκ°€μ΄ ν”ŒλŸ¬κ·ΈμΈμ΄ mocapμ—μ„œ PX4λ₯Ό μˆ˜μ •ν•˜λŠ” μ’Œν‘œκ³„λ‘œ 데이터λ₯Ό λ³€ν™˜ ν•  수 μžˆλ‹€κ³  λ§ν–ˆμ§€λ§Œ μ‚¬μš© 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 뭐야? λ…Έλ“œμž…λ‹ˆκΉŒ? '/ mavros / mocap / pose'와 같은 주제? μ•„λ‹ˆλ©΄ μš°λ¦¬κ°€ 직접 μ‚¬μš©ν•  μˆ˜μžˆλŠ” λͺ‡ 가지 κΈ°λŠ₯μΌκΉŒμš”?

μ†ŒμŠ€ μ½”λ“œ λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ 닡을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 mavros_extras μ—μ„œ 찾을 μˆ˜μžˆλŠ” ν”ŒλŸ¬κ·ΈμΈμœΌλ‘œ mocap μ‹œμŠ€ν…œμ—μ„œ 데이터λ₯Ό κ°€μ Έ μ˜€λŠ” λ…Έλ“œμ—μ„œ ꡬ문 뢄석 된 ATT_POS_MOCAP Mavlink λ©”μ‹œμ§€λ₯Ό 보낼 수 μžˆμŠ΅λ‹ˆλ‹€. MAVROSμ—λŠ” ν”„λ ˆμž„ λ³€ν™˜μ„ μ²˜λ¦¬ν•˜λŠ” κΈ°λŠ₯이 μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή ν”ŒλŸ¬κ·ΈμΈμ—λ§Œ κ΅­ν•œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ λ‚˜λŠ” 그것이 무엇이며 μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이 "ν”ŒλŸ¬κ·ΈμΈ"을 λ‚΄ ν”„λ‘œμ νŠΈμ— μ–΄λ–»κ²Œ μΆ”κ°€ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ ??

이것은 MAVROS와 λ°€μ ‘ν•˜κ²Œ κ²°ν•©λ˜μ–΄ 있기 λ•Œλ¬Έμ— μžμ‹ μ˜ ν”„λ‘œμ νŠΈμ— μ—°κ²°ν•˜λŠ” ν”ŒλŸ¬κ·ΈμΈμ΄ μ•„λ‹™λ‹ˆλ‹€. 이 ν”ŒλŸ¬κ·ΈμΈμ΄ ν—ˆμš©ν•˜λŠ” 것을 μ‚¬μš©ν•˜λ €λ©΄ MAVROSλ₯Ό μ‚¬μš©ν•˜κ³  ν”„λ‘œμ νŠΈμ— μ—°κ²°ν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰