์๋ ํ์ธ์
MAVROS๋ฅผ ์ฌ์ฉํ์ฌ PX4 ๋นํ ์คํ์ ์ผ๋ถ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํฉ๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ mavros๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ฝ์ ์ ์์ต๋๋ค.
rosservice ํธ์ถ /mavros/param/get MPC_LAND_SPEED
๊ทธ๋ฌ๋ mavros๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ตฌ๋ฌธ์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅธ๋ค
๋๋ ์๋ํ๋ค
rosservice ํธ์ถ /mavros/param/set MPC_LAND_SPEED '0.4'
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋์๊ฒ ์ค๋ฅ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋๊ตฌ๋ ์ง ๋์ธ ์ ์๋ค๋ฉด ๋งค์ฐ ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
๊ฐ์ฌํฉ๋๋ค
์ธ๋ฐ์ค์ฐฌ
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!");
}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋น์ค๋ฅผ ํตํด set ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋น์ค๋ฅผ ํตํด ROS ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.