Mavros: MAVCMD๋ฅผ ํ†ตํ•ด ๊ณก ์žฌ์ƒ

์— ๋งŒ๋“  2019๋…„ 06์›” 10์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mavlink/mavros

rosrun ๋ช…๋ น์„ ํ†ตํ•ด ๊ณก์„ ์žฌ์ƒํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
rosrun mavros mavcmd 258 0 0 0 0 0 0 0

๋‚ด๊ฐ€ ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?


MAVROS ๋ฒ„์ „ ๋ฐ ํ”Œ๋žซํผ

ROS: ๋ฉœ๋กœ๋””
์šฐ๋ถ„ํˆฌ: 16.04

์ž๋™ ์กฐ์ข… ์žฅ์น˜ ์œ ํ˜• ๋ฐ ๋ฒ„์ „

[ ] ์•„๋‘ํŒŒ์ผ๋Ÿฟ
[ x] PX4

๋ฒ„์ „: 3.7.1

question

๋ชจ๋“  15 ๋Œ“๊ธ€

MAV_CMD ์—๋Š” ์ด๋Ÿฌํ•œ ๋ช…๋ น์ด ์—†์Šต๋‹ˆ๋‹ค.

PLAY_TUNE ์„ ๋ณด๋‚ด๋ ค๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๋ณด์ž ์งˆ๋ฌธ: ์ด์ œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•˜๋ฏ€๋กœ( ์ด pull request ์ฐธ์กฐ - @mortenfyhn์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค) mavros๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ๊ณก์„ ์—ฐ์ฃผํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ €๋Š” Pixhawk1์˜ ROS noetic, Ubuntu 20.04, ArduSub 4.0.2๋ฅผ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ถ€์ €๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ํ”ฝ์Šคํ˜ธํฌ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์žฌ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹œ๋„ํ–ˆ๋‹ค
roslaunch mavros apm.launch fcu_url:=udp://:[email protected]:14549
๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ํ•  ๋•Œ
rostopic echo /mavros/state
์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋ฏ€๋กœ ์—ฐ๊ฒฐ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์‹œ๋„ํ•  ๋•Œ
rostopic pub -1 /mavros/play_tune mavros_msgs/PlayTuneV2 "format: 2 tune: '>e16e8e16r16c16e8g4<g4'"
์•„๋ฌด ๋ฐ˜์‘์ด ์—†์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ธฐ๋ณธ ๋‹จ๊ณ„๋ฅผ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง๋„ ๋ฐฐ์šฐ๊ณ  ์žˆ๋‹ค.

๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ play_tune ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ๋ฟ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mavros๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ/๋ธ”๋ž™๋ฆฌ์ŠคํŠธ/์œ ์‚ฌ๋ผ๋Š” ๊ธด ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๊นŒ? ์–ด๋–ค ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค play_tune config ํŒŒ์ผ์— ํ”Œ๋Ÿฌ๊ทธ์ธ apm_pluginlists.yaml ์ฝ์„๋˜๋Š” apm.launch . ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋„ค, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค
[ INFO] [1620733606.153262125]: Plugin play_tune loaded
[ INFO] [1620733606.155413105]: Plugin play_tune initialized

apm_pluginlists.yaml ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

plugin_blacklist:
# common
- actuator_control
- ftp
- safety_area
- hil
# extras
- altitude
- debug_value
- image_pub
- px4flow
- vibration
- vision_speed_estimate
- wheel_odometry

plugin_whitelist: []
#- 'sys_*'

๊ทธ๊ฑฐ ์ด์ƒ ํ•˜๋„ค. QGroundControl ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๊นŒ? "mavlink inspector"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mavlink PLAY_TUNE_V2 ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋„ ๋‹ค๋ฅธ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๊ฒƒ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ค, ํฅ๋ฏธ๋กญ๊ฒŒ๋„ QGC์—๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

qgc_mavlink_messages

์—ฌ๊ธฐ์„œ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ๋จผ์ € ํŒŒ์•…ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ArduSub์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„ ๋‚ด์ฃผ์…”์„œ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋„ ์ž‘๋™ํ•ด๋„ QGC์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฉ”์‹œ์ง€๋Š” pixhawk๋กœ ๋ฐ”๋กœ ์ „๋‹ฌ๋˜๊ณ  pixhawk๋Š” QGC๋กœ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mortenfyhn PLAY_TUNE์€ FCU ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜๋ฏ€๋กœ ํŽŒ์›จ์–ด๊ฐ€ ๋‹ค์‹œ ๋ผ์šฐํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” GCS์—์„œ ๋ณผ ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ถˆํ–‰ํžˆ๋„ FCU์™€ MAVROS ์‚ฌ์ด์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๋„ฃ์–ด ํŒจํ‚ท์„ ์žก๋Š” ๊ฒฝ์šฐ์—๋งŒ mavros v1์—์„œ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ , Wireshark ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํŽŒ์›จ์–ด๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ArduSub๊ฐ€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜๋ฝํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

https://github.com/ArduPilot/ardupilot/blob/0cd97ce3d8f394e2b853b1f835abf74e6488daf5/libraries/GCS_MAVLink/GCS_Common.cpp#L3494 -L3497

๊ทธ๋ฆฌ๊ณ :

https://github.com/ArduPilot/ardupilot/blob/0cd97ce3d8f394e2b853b1f835abf74e6488daf5/libraries/AP_Notify/ToneAlarm.cpp#L450 -L469

๊ทธ๋ฆฌ๊ณ :

https://github.com/mavlink/mavros/blob/8b9a32ac323e79cef826ee5f39aeb07a1162d240/mavros_extras/src/plugins/play_tune.cpp#L28 -L31

๊ทธ๋ž˜์„œ: FW๋Š” PLAY_TUNE์„ ์›ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์€ PLAY_TUNE_V2๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
AP ์œ ํ˜•์— ๋”ฐ๋ฅธ ๋ฉ”์‹œ์ง€ ์„ ํƒ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๋„ค์š”. ์กฐ์‚ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜๋Š” (์ดˆ๋ณด์ž ์นœํ™”์ ) ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋ฌด์—‡์ด๋“  ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ณ€๊ฒฝ ์žฅ์†Œ๋Š” ์–ด๋””์ž…๋‹ˆ๊นŒ?

์ผ๋ฐ˜ PLAY_TUNE ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•˜๋„๋ก ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @vooon , API ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ •์ฑ…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ƒˆ ๊ตฌ๋…์ž๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์€ mavros_msgs/PlayTune -> mavlink PLAY_TUNE์˜ ๊ฒฝ์šฐ ~play_tune , mavros_msgs/PlayTuneV2 -> mavlink PLAY_TUNE_V2์˜ ๊ฒฝ์šฐ ~play_tune_v2 ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ v2 ๋ฉ”์‹œ์ง€์— ~play_tune ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ „ API๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋˜๋Š” ~play_tune ์—์„œ v1 ๋˜๋Š” v2 ๋ฉ”์‹œ์ง€๋ฅผ ์˜ˆ์ƒํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ์น˜ํ•˜๋Š” mavlink ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

@mortenfyhn 1.0 ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ธฐ์กด API๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์‚ฌ์šฉ์ž๋Š” ๋ฉ”์‹œ์ง€์˜ ๋งˆ๋…€ ๋ฒ„์ „์ด ์ „์†ก๋˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„์•ผ ํ•˜๋ฏ€๋กœ param๊ณผ ๊ฐ์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฒƒ :

void connection_cb() {
  int new_ver = 0
  if (nh.getParam("message_version", new_ver) {
    // check 1 vs 2
  } 
  if (new_ver == 0) {
    new_ver = m_uas->is_ardupilotmega() ? 1 : 2;
  }

  message_version = new_ver;
}

@mortenfyhn 1.0 ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ธฐ์กด API๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

:+1:

๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ๋Œ€๋กœ ๋Œ€๋žต์ ์œผ๋กœ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ๋™์ž‘์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • v1/v2๋ฅผ ์ง€์ •ํ•˜๋„๋ก ์„ค์ •๋œ ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  m_uas->is_ardupilotmega() == true ์ด๋ฉด v1์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ, ๋˜ํ•œ 0 == auto(APM์˜ ๊ฒฝ์šฐ v1 / ๊ธฐํƒ€์˜ ๊ฒฝ์šฐ v2)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„, ์—ญ์‹œ PlayTuneV2.msg๋ฅผ PLAY_TUNE์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
ํ˜•์‹ == MML(APM์˜ ๊ตฌํ˜„)์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…(์˜์‚ฌ ์ฝ”๋“œ)์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
```
PLAY_TUNE ํฌ์ธํŠธ{};

mavlink::set_string(pt.tune, tune->tune);
mavlink::set_string_z(pt.tune2, tune->tune[pt.tune.size():]);
``

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰