rosrun ๋ช
๋ น์ ํตํด ๊ณก์ ์ฌ์ํ๋ ค๊ณ ํฉ๋๋ค.
rosrun mavros mavcmd 258 0 0 0 0 0 0 0
๋ด๊ฐ ์ด๋ค ๋งค๊ฐ๋ณ์๋ฅผ ๋ณด๋ด์ผ ํ๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
ROS: ๋ฉ๋ก๋
์ฐ๋ถํฌ: 16.04
[ ] ์๋ํ์ผ๋ฟ
[ x] PX4
๋ฒ์ : 3.7.1
์ด๋ณด์ ์ง๋ฌธ: ์ด์ ํ๋ฌ๊ทธ์ธ์ด ์กด์ฌํ๋ฏ๋ก( ์ด 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์๋ ํ์๋์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฌด์์ด ์๋ชป๋์๋์ง ๋จผ์ ํ์ ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ง๋ ArduSub์ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค.
์ ๊ทธ๋ฆฌ๊ณ ์๊ฐ ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค :-)
๋ด๊ฐ ์๊ฐํด๋ ์๋ํด๋ QGC์ ๋ํ๋์ง ์๋๋ก ํ๊ธฐ ์ํจ์ผ ์๋ ์๋ค. ๋ฉ์์ง๋ pixhawk๋ก ๋ฐ๋ก ์ ๋ฌ๋๊ณ pixhawk๋ QGC๋ก ์ ๋ฌํ์ง ์์ ์ ์์ต๋๋ค.
@mortenfyhn PLAY_TUNE์ FCU ๋งํฌ๋ก ์ฐ๊ฒฐ๋๋ฏ๋ก ํ์จ์ด๊ฐ ๋ค์ ๋ผ์ฐํ
ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ GCS์์ ๋ณผ ์ ์์ ๊ฒ์
๋๋ค.
๋ถํํ๋ FCU์ MAVROS ์ฌ์ด์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฃ์ด ํจํท์ ์ก๋ ๊ฒฝ์ฐ์๋ง mavros v1์์ ํด๋น ๋ฉ์์ง๋ฅผ ์บก์ฒํ๋ ๊ฒ์ด ์ฝ์ง ์์ต๋๋ค.
ํ , Wireshark ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์คํ ์์ค ํ์จ์ด๋ฅผ ๋ค๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ ArduSub๊ฐ ํด๋น ๋ฉ์์ง๋ฅผ ์๋ฝํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. :)
๊ทธ๋ฆฌ๊ณ :
๊ทธ๋ฆฌ๊ณ :
๊ทธ๋์: 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:
๋๋ ๋น์ ์ด ์ ์ํ๋๋ก ๋๋ต์ ์ผ๋ก ํ ๊ฒ์ ๋๋ค :
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():]);
``