์๋
ํ์ธ์,
์ ๋ ๋น์ ๊ธฐ๋ฐ ์ ์ด๋ฅผํ๊ณ ์๊ณ ์นด๋ฉ๋ผ๋ ์๋๋ฅผ ํฅํ ๋๋ก ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์์น ์ถ์ ์ ์ ์ฒด ํ๋ ์์ ์์ต๋๋ค.
/ mavros / setpoint_velocity / cmd_vel ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ๋๋ก ์ ์๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง NED ํ๋ ์์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
/ mavros / setpoint_velocity / cmd_vel๊ณผ ๊ฐ์ ์ฃผ์ ๊ฐ ์์ง๋ง body frame์ ์ฌ์ฉํฉ๋๊น?
๋๋ ๊ตฌํ์ ์ํด ์๋ ์ค์ ๊ฐ์ ๋ณธ์ฒด ํ๋ ์์์ NED ํ๋ ์์ผ๋ก ๋ณํํด์ผํฉ๋๊น?
๋ด๊ฐ ์ฌ์ฉํ ์์๋ ๊ฒ์ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์ด ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค. https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp
vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);
์ด๊ฒ์ด ์ ๊ฐ ์ฐพ์ ์์๋ ์ต๊ณ ์ ์๋ฃจ์
์ธ ๊ฒ ๊ฐ์ต๋๋ค.
Yaw๊ฐ IMU์์๋ง ์ ๊ณต๋๋์ง ์๋๋ฉด IMU์ ์๊ธฐ์ ์ตํฉ์์ ๋์จ ๊ฒ์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์๊ฒฌ์ด๋ ์์ด๋์ด๊ฐ ์์ต๋๊น?
๋ง ๋ธ๋ก์ค : 0.17.3
ROS : ์ธ๋๊ณ
Ubuntu : 14.04
APM : Copter V3.4-dev (fe724032)
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log์ ๋ก๊น
๋์คํฌ ์ฌ์ฉ๋์ ๋ํ ๋ก๊ทธ ๋๋ ํ ๋ฆฌ๋ฅผ ํ์ธํฉ๋๋ค. ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ค๋จํ๋ ค๋ฉด Ctrl-C๋ฅผ ๋๋ฅด์ธ์.
๋ก๊ทธ ํ์ผ ๋์คํฌ ์ฌ์ฉ๋ ํ์ธ์ ์๋ฃํ์ต๋๋ค. ์ฌ์ฉ๋์ 1GB ๋ฏธ๋ง์
๋๋ค.
roslaunch ์๋ฒ ์์ http : // mechatronics-990 : 45006 /
๋ช ํํ ๋งค๊ฐ ๋ณ์
๋งค๊ฐ ๋ณ์
๋
ธ๋
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
์ ๋ง์คํฐ ์๋ ์์
ํ๋ก์ธ์ค [๋ง์คํฐ] : pid๋ก ์์๋จ [28094]
ROS_MASTER_URI = http : // localhost : 11311
/ run_id๋ฅผ ca9213bc-89bf-11e7-b657-1803733b65bb๋ก ์ค์
process [rosout-1] : pid๋ก ์์๋จ [28107]
ํต์ฌ ์๋น์ค ์์ [/ rosout]
ํ๋ก์ธ์ค [mavros-2] : pid๋ก ์์๋จ [28126]
ํ๋ก์ธ์ค [spawn_erlecopter-3] : pid๋ก ์์๋จ [28133]
process [gazebo-4] : pid๋ก ์์๋จ [28134]
process [gazebo_gui-5] : pid๋ก ์์๋จ [28151]
spawn_model ์คํฌ๋ฆฝํธ ์์๋จ
[gazebo-4] ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋จ [pid 28134, ์ข
๋ฃ ์ฝ๋ 255, cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzserver -u -e ode / home / bshang2 / simulation / ros_catkin_ws / src /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name : = gazebo __log : = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo-4.log].
๋ก๊ทธ ํ์ผ : /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[์ ๋ณด] [WallTime : 1503684250.172508] [0.000000] ros ๋งค๊ฐ ๋ณ์์์ ๋ชจ๋ธ xml๋ก๋ ์ค[์ ๋ณด] [WallTime : 1503684250.176886] [0.000000] / gazebo / spawn_urdf_model ์๋น์ค ๋๊ธฐ ์ค[gazebo_gui-5] ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋์์ต๋๋ค. [pid 28151, ์ข
๋ฃ ์ฝ๋ 255, cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name : = gazebo_gui __log : = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo_gui-5.log].๋ก๊ทธ ํ์ผ : /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] ์ข
๋ฃ์ ์ข
๋ฃ
[mavros-2] ์ข
๋ฃ์ ์ด์ธ
์ญ ์ถ์ (๊ฐ์ฅ ์ต๊ทผ ํธ์ถ ๋ง์ง๋ง) :
ํ์ผ "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", ์ค 301, in
sm.callSpawnService ()
"/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model"ํ์ผ, 267 ํ, callSpawnService
initial_pose, self.reference_frame, self.gazebo_namespace)
"/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py", 28 ํ, spawn_urdf_model_client ํ์ผ
rospy.wait_for_service (gazebo_namespace + '/ spawn_urdf_model')
wait_for_service์ "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", 159 ํ ํ์ผ
ROSInterruptException ( "rospy ์ข
๋ฃ") ๋ฐ์
rospy.exceptions.ROSInterruptException : rospy ์ข
๋ฃ
^ C [rosout-1] ์ข
๋ฃ์ ๊ฐ์ ์ข
๋ฃ
^ C [๋ง์คํฐ] ์ข
๋ฃ์ ๊ฐ์ ์ข
๋ฃ
์ฒ๋ฆฌ ๋ชจ๋ํฐ ์ข
๋ฃ ์ค ...
... ์ฒ๋ฆฌ ๋ชจ๋ํฐ ์ข
๋ฃ ์๋ฃ
๋๋
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log์ ๋ก๊น
๋์คํฌ ์ฌ์ฉ๋์ ๋ํ ๋ก๊ทธ ๋๋ ํ ๋ฆฌ๋ฅผ ํ์ธํฉ๋๋ค. ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
์ค๋จํ๋ ค๋ฉด Ctrl-C๋ฅผ ๋๋ฅด์ธ์.
๋ก๊ทธ ํ์ผ ๋์คํฌ ์ฌ์ฉ๋ ํ์ธ์ ์๋ฃํ์ต๋๋ค. ์ฌ์ฉ๋์ 1GB ๋ฏธ๋ง์
๋๋ค.
roslaunch ์๋ฒ ์์ http : // mechatronics-990 : 41224 /
๋ช ํํ ๋งค๊ฐ ๋ณ์
๋งค๊ฐ ๋ณ์
๋
ธ๋
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
์ ๋ง์คํฐ ์๋ ์์
ํ๋ก์ธ์ค [๋ง์คํฐ] : pid๋ก ์์๋จ [28618]
ROS_MASTER_URI = http : // localhost : 11311
/ run_id๋ฅผ e483c856-89bf-11e7-bb61-1803733b65bb๋ก ์ค์
ํ๋ก์ธ์ค [rosout-1] : pid๋ก ์์๋จ [28631]
ํต์ฌ ์๋น์ค ์์ [/ rosout]
ํ๋ก์ธ์ค [mavros-2] : pid๋ก ์์๋จ [28656]
ํ๋ก์ธ์ค [spawn_erlecopter-3] : pid๋ก ์์๋จ [28657]
process [gazebo-4] : pid๋ก ์์๋จ [28674]
process [gazebo_gui-5] : pid๋ก ์์๋จ [28678]
spawn_model ์คํฌ๋ฆฝํธ ์์๋จ
[์ ๋ณด] [WallTime : 1503684293.653120] [0.000000] ros ๋งค๊ฐ ๋ณ์์์ ๋ชจ๋ธ xml๋ก๋ ์ค
[์ ๋ณด] [WallTime : 1503684293.657344] [0.000000] / gazebo / spawn_urdf_model ์๋น์ค ๋๊ธฐ ์ค
[์ ๋ณด] [WallTime : 1503684294.260952] [0.047500] ์ ํ ์๋น์ค / gazebo / spawn_urdf_model
[์ ๋ณด] [WallTime : 1503684294.855628] [0.445000] ์์ฑ ์ํ : SpawnModel : ์ฑ๊ณต์ ์ผ๋ก ์์ฑ ๋ ๋ชจ๋ธ
[spawn_erlecopter-3] ํ๋ก์ธ์ค๊ฐ ๊นจ๋ํ๊ฒ ์๋ฃ๋์์ต๋๋ค.
๋ก๊ทธ ํ์ผ : /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ rostopic echo -n1 / diagnostics
๋จธ๋ฆฌ๊ธ:
์ํ์ค : 6456
์ฐํ:
์ด : 6817
nsec : 500000000
frame_id : ''
์ํ:
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ rosrun mavros checkid
ํ์ธ. 1 : 1์์ ๋ฉ์์ง๋ฅผ ๋ฐ์์ต๋๋ค.
1 ๊ฐ ์ฃผ์์์ 1231 ๊ฐ์ ๋ฉ์์ง ์์
sys : comp ๋ฉ์์ง ๋ชฉ๋ก
1 : 1 0, 1, 2, 136, 152, 150, 24, 27, 29, 30, 32, 33, 162, 163, 164, 165, 42, 173, 178, 62, 193, 74, 35, 36 , 241, 116
์๋ ,
setpoint_raw๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
๋ชฉํ ์ค์ ์ ์์ ์ขํ ํ๋ ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
๋ฅผ ๋ค์ด setpoint_velocity
, ๋๋ ์ฌ์ด์ ์ ํ ํ์ฉํ๋ ์์ ์ถ๊ฐํฉ๋๋ค LOCAL_NED
์ BODY_NED
, ๊ทธ๊ฒ์ ํ์ฌ ๋ํดํธ๋ก๋ถํฐ LOCAL_NED
/ : (HTTPS๋ฅผ /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). ๊ทธ๋์ setpoint_raw
๋ฅผ ์ฌ์ฉํ๊ณ coordinate_frame
๋ฅผ FRAME_BODY_NED
๋๋ MAV_FRAME::BODY_NED
์ค์ ํ ์ ์์ต๋๋ค (๋ ๋ค ์๋ํด์ผ ํจ).
@AlexisTM ๋ฐ @ TSC21 ๊ฐ์ฌํฉ๋๋ค. ๊ทํ์ ๋ต๋ณ์ด ๋์์ด๋์์ต๋๋ค. ๋์ค์ ์๋ํ๊ฒ ์ต๋๋ค.
@ TSC21 @AlexisTM ๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ์ด์ ๋ณธ์ฒด ํ๋ ์์ ์๋๋ฅผ ์ ์ด ํ ์ ์์ต๋๋ค. ๋น๋์ค ๋ นํ : https://www.youtube.com/watch?v=dyUQfFYX3pk&feature=youtu.be
rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10
@cnpcshangbo ์์
์๋
ํ์ธ์ @cnpcshangbo , ๋น๋์ค์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ด๊ฐ ๊ฐ์ง ํผ๋์ ํด๊ฒฐํ ์ ์๋๋ก ์ด๊ฒ์ ๊ฒ์ํฉ๋๋ค.
ํ๋ ์ ๋ง์คํฌ๊ฐ FRAME_BODY_NED = 8
์ด์ง๋ง ROS ๋ช
๋ น์ ์ฌ์ ํ โโENU์ ์์ด์ผํฉ๋๋ค . ENU-> NED ๋ณํ์ mavros๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
์ค์ ๋ก ๋น๋์ค์์ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋
ํฉ,
์ค๋ช
ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ์ฃ์กํฉ๋๋ค.
๋น์ ์ ๋
ธ๋ ฅ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์ต๋๋ค.
๊ฐ์ฌ
์
ํธ์ ๋ฏผ ์ [email protected]ไบ2018ๅนด8ๆ17ๆฅๅจไบไธๅ11์ 9๋ถๅ้:
์๋ ํ์ธ์ @cnpcshangbo https://github.com/cnpcshangbo , ๋น๋์ค์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ด๊ฐ ๊ฐ์ง ํผ๋์ ํด๊ฒฐํ ์ ์๋๋ก ์ด๊ฒ์ ๊ฒ์ํฉ๋๋ค.
ํ๋ ์ ๋ง์คํฌ๊ฐ "FRAME_BODY_NED = 8"์ด์ง๋ง ROS ๋ช ๋ น์์ฌ์ ํ ENU์ ์์ด์ผํฉ๋๋ค . ENU-> NED ๋ณํ์ ๋ค์์ ์ํด ์ํ๋ฉ๋๋ค.
๋ง ๋ธ๋ก์ค.
์ค์ ๋ก ๋น๋์ค์์ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- x = 0.1 ---> ์ค๋ฅธ์ชฝ์ผ๋ก
- y = 0.1 ---> ์์ผ๋ก
๋ถ๋ช ํ ๊ทธ๊ฒ์ ์ฌ์ ํ โโENU์ ์์ต๋๋ค. ํ์ง๋ง์ด ํผ๋์ ์ผ์ฃผ์ผ์ด ๊ฑธ๋ ธ์ต๋๋ค
๋จธ๋ฆฌ์นด๋ฝ์ ์ก์ ๋น๊ธฐ๋ ๊ฒ ...โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 ๋๋ ์์๊ฑฐ
์ค
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
@Nuno ๋งต ํ๋ ์์์ BODY๋ x ์์ผ๋ก, ์ผ์ชฝ์ y, ๋์ชฝ์ x, ๋ถ์ชฝ์ y๊ฐ๋์ด์ผํ์ง ์์ต๋๊น?
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์ฌ๊ธฐ์ ์ธ ๊ฐ์ง ๊ท์น์ด ์๋ค๋ ๊ฒ์ด ๋ง์ต๋๊น?
1) NED : PX4 ์จ๋ณด๋ ์ถ์ ๋ฐ ์ ์ด
2) ENU : mavros ๋ช
๋ น ๋ฉ์์ง์ ๋ํ ํ์ค ์
๋ ฅ ํ์
3) NWU : ROS์ ์ผ๋ฐ์ ์ธ ์ขํ๊ณ
์๋์. ROS์๋ NWU๊ฐ ์์ต๋๋ค.
http://www.ros.org/reps/rep-0103.html
@AlexisTM north ๋๋ east๋ ๋ณธ๋ฌธ ๊ท์น์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉํด์๋ ์๋๋ฉฐ ์คํ๋ ค ์, ์ผ์ชฝ๊ณผ ๊ฐ์ ๋ฐฉํฅ์ ์ง์ ํฉ๋๋ค.
๊ด์ฐฎ์. ํ์ง๋ง ๋ด๊ฐ ํ๋ฆฌ์ง ์์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ธ ๊ฐ์ง ๊ด์ต์ด ์๋ค๊ณ ์๊ฐํฉ๋๊น?
1) NED : ์จ๋ณด๋ ์ ์ด
2) Right-Forward-Up : mavros๊ฐ ์์ (์๋) ์ค์ ๊ฐ์ ์ดํดํ๋ ๋ฐฉ๋ฒ
3) ์์ผ๋ก ์ผ์ชฝ ์๋ก : ROS ๊ท์น
@hmchung ์ง๋ ํ๋ ์ ๋ด์์ ์๋ ์ค์ ๊ฐ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ENU (ROS ๊ท์น)์ ๋๋ค.
๊ท์น์ 2 ๊ฐ๋ง ์์ด์ผํฉ๋๋ค! Pixhawk ๋ฐ ENU์ NED : ROS์์ ์ํํ๋ ๋ชจ๋ ์์ .
FLU (Forward-Left-Up)๋ ๋ฐ๋ ํ๋ ์์ ๋ํ ROS ๊ท์น์ ๋๋ค. ENU (East-North-Up)๋ ๋ก์ปฌ / ์๋ ํ๋ ์์ ๋ํ ROS ๊ท์น์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฅผ ๋ค์ด
setpoint_velocity
, ๋๋ ์ฌ์ด์ ์ ํ ํ์ฉํ๋ ์์ ์ถ๊ฐํฉ๋๋คLOCAL_NED
์BODY_NED
, ๊ทธ๊ฒ์ ํ์ฌ ๋ํดํธ๋ก๋ถํฐLOCAL_NED
/ : (HTTPS๋ฅผ /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). ๊ทธ๋์setpoint_raw
๋ฅผ ์ฌ์ฉํ๊ณcoordinate_frame
๋ฅผFRAME_BODY_NED
๋๋MAV_FRAME::BODY_NED
์ค์ ํ ์ ์์ต๋๋ค (๋ ๋ค ์๋ํด์ผ ํจ).