Mavros: MAVROS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PX4 ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •

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

์•ˆ๋…•ํ•˜์„ธ์š”

MAVROS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PX4 ๋น„ํ–‰ ์Šคํƒ์˜ ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ mavros๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
rosservice ํ˜ธ์ถœ /mavros/param/get MPC_LAND_SPEED

๊ทธ๋Ÿฌ๋‚˜ mavros๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ๋ฌธ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅธ๋‹ค

๋‚˜๋Š” ์‹œ๋„ํ–ˆ๋‹ค
rosservice ํ˜ธ์ถœ /mavros/param/set MPC_LAND_SPEED '0.4'
๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์„ธ๋ฐ”์Šค์ฐฌ

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด set ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ROS ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
  integer: 0
  real: 0.4" 

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

mavparam ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? rosrun mavros mavparam set MPC_LAND_SPEED 0.4 ?

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด set ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ROS ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
  integer: 0
  real: 0.4" 

@shening์˜ ๋‘ ๊ฐ€์ง€ ์ž‘์—… ์˜ต์…˜์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ์‡„

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด set ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ROS ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
rosservice ํ˜ธ์ถœ /param/set "param_id: 'MPC_LAND_SPEED'
๊ฐ’:
์ •์ˆ˜: 0
์‹ค์ œ: 0.4"

์œ„์˜ ๋ฐฉ๋ฒ•์˜ ๋„์›€์œผ๋กœ ๋” ์ •ํ™•ํ•œ ๋ฐฉ๋ฒ•์ด ์—ฌ๊ธฐ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ช…๋ น์€ ๋‚ด ์‹œ๋„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 'integer'์™€ 'real' ์•ž์— ๊ณต๋ฐฑ์ด ์ถ”๊ฐ€๋œ ํ›„์— ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  '/mavros'๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

rosservice ํ˜ธ์ถœ /mavros/param/set "param_id: 'SENS_EN_THERMAL'
๊ฐ’:
์ •์ˆ˜: 55
์‹ค์ œ: 0.0"

cf) ์ด ์ฃผ์„ ํŽธ์ง‘๊ธฐ์—์„œ ' '(๊ณต๋ฐฑ) ๋Œ€์‹    ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ณต๋ฐฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bigbellmercy ์ด ๋ฌธ์ œ๋Š” ๋ช…๋ น์ค„ ์ธ์ˆ˜์—์„œ๋งŒ ๋ช…๋ฐฑํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” roscpp๋ฅผ ํ†ตํ•ด rosservice ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๊นŒ?

@bigbellmercy ์‚ฌ์‹ค ๊ทธ๊ฒŒ 3๋…„ ์ „ ์ผ์ด๊ณ  ๊ณต๊ฐ„์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋ƒฅ ์ฃผ๋ณ€์— ```๋ฅผ ์ถ”๊ฐ€ ์˜คํƒ€๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด :์›ƒ์Œ:

@bigbellmercy ์ด ๋ฌธ์ œ๋Š” ๋ช…๋ น์ค„ ์ธ์ˆ˜์—์„œ๋งŒ ๋ช…๋ฐฑํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” roscpp๋ฅผ ํ†ตํ•ด rosservice ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๊นŒ?

@Jaeyoung-Lim ์œ„์˜ ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•˜์—ฌ 'roscpp๋ฅผ ํ†ตํ•œ rosservice ํ˜ธ์ถœ'์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์•„๋ž˜ ์ฝ”๋“œ๋Š” roscpp์˜ PX4 ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

system("rosrun mavros mavparam set SENS_EN_THERMAL 55");

@Jaeyoung-Lim ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ros ์„œ๋น„์Šค ํ˜ธ์ถœ ์„ ์‚ฌ์šฉํ•˜์—ฌ roscpp๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

@Jaeyoung-Lim ๋‚˜๋Š” ๋‚ด ์‹œํ—˜์—์„œ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

roscpp ์„œ๋น„์Šค ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ PX4 ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

[/mavros:std_plugins::ParamPlugin::get_cb]: PR: Unknown parameter to get: MPC_XY_VEL_MAX
[/mavros:std_plugins::ParamPlugin::set_cb]: PR: Unknown parameter to set: MPC_XY_VEL_MAX

๋งค๊ฐœ๋ณ€์ˆ˜ ID์— ์ถ”๊ฐ€ํ•  ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

mavparam ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
rosrun mavros mavparam -n /mavros get MPC_XY_VEL_MAX

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ROS๋กœ ๊ฐ€์ ธ์™€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ๋ชจ๋‘ ๋‹ค์‹œ ํ‘ธ์‹œํ•˜์—ฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

ServiceClient pull_client = nh.serviceClient<mavros_msgs::ParamPull>("mavros/param/pull");
pull_client.waitForExistence();
mavros_msgs::ParamPull pull;
if (pull_client.call(pull)) {
    if (pull.response.success) {
        ROS_DEBUG("Pulled %d parameters from FCU", pull.response.param_received);
        nh.setParam("mavros/param/MPC_XY_VEL_MAX", max_velocity);
        ServiceClient push_client = nh.serviceClient<mavros_msgs::ParamPush>("mavros/param/push");
        push_client.waitForExistence();
        mavros_msgs::ParamPush push;
        if (push_client.call(push)) {
            if (push.response.success)
                ROS_DEBUG("Pushed %d parameters to FCU", push.response.param_transfered);
            else
                ROS_ERROR("Failed push parameters to FCU, cannot set maximum horizontal velocity!");
        }
        else {
            ROS_ERROR("Failed to push parameters to FCU, cannot set maximum horizontal velocity!");
        }
    }
    else {
        ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
    }
}
else {
    ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
}
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰