Mavros: ์˜คํ”„ ๋ณด๋“œ ์ œ์–ด ์˜ˆ์ œ setpoint_position / global not arming

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

๋ฌธ์ œ ์„ธ๋ถ€ ์ •๋ณด

์˜คํ”„ ๋ณด๋“œ ์ œ์–ด ์˜ˆ์ œ (๊ฐ€์ œ๋ณด์—์„œ ์ž˜ ์ž‘๋™ ํ•จ)๋ฅผ ๋ณต์ œํ•˜๋ ค๊ณ ํ•˜์ง€๋งŒ ๋กœ์ปฌ x, y, z ๋Œ€์‹  ์ „์—ญ ์ขŒํ‘œ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋“œ๋ก ์ด "Offboard Enabled"๋ฃจํ”„์— ๋“ค์–ด๊ฐ€์ง€๋งŒ Vehicle Armed์— ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ ์ „ํ˜€ ์›€์ง์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>

mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
    current_state = *msg;
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "offb_node");
    ros::NodeHandle nh;

    ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
            ("mavros/state", 10, state_cb);
    //ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
    //        ("mavros/setpoint_position/local", 10);
    ros::Publisher global_pos_pub = nh.advertise<mavros_msgs::GlobalPositionTarget>
            ("mavros/setpoint_position/global", 10);
    ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
            ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
            ("mavros/set_mode");

    //the setpoint publishing rate MUST be faster than 2Hz
    ros::Rate rate(20.0);

    // wait for FCU connection
    while(ros::ok() && current_state.connected){
        ros::spinOnce();
        rate.sleep();
    }

    geometry_msgs::PoseStamped pose;
    pose.pose.position.x = 0;
    pose.pose.position.y = 0;
    pose.pose.position.z = 2;

    mavros_msgs::GlobalPositionTarget target;
    target.latitude = 42.3005867;
    target.longitude = -6.73246288;
    target.altitude = 288;

    //send a few setpoints before starting
    for(int i = 100; ros::ok() && i > 0; --i){
        //local_pos_pub.publish(pose);
        global_pos_pub.publish(target);
        ros::spinOnce();
        rate.sleep();
    }

    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.custom_mode = "OFFBOARD";

    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;

    ros::Time last_request = ros::Time::now();

    while(ros::ok()){
        if( current_state.mode != "OFFBOARD" &&
            (ros::Time::now() - last_request > ros::Duration(5.0))){
            if( set_mode_client.call(offb_set_mode) &&
                offb_set_mode.response.mode_sent){
                ROS_INFO("Offboard enabled");
            }
            last_request = ros::Time::now();
        } else {
            if( !current_state.armed &&
                (ros::Time::now() - last_request > ros::Duration(5.0))){
                if( arming_client.call(arm_cmd) &&
                    arm_cmd.response.success){
                    ROS_INFO("Vehicle armed");
                }
                last_request = ros::Time::now();
            }
        }

        //local_pos_pub.publish(pose);
        global_pos_pub.publish(target);



        ros::spinOnce();
        rate.sleep();
    }

    return 0;
}

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

๋งˆ ๋ธŒ๋กœ์Šค : 0.22
ROS : ํ‚ค๋„คํ‹ฑ
Ubuntu : 16.04

Autopilot ์œ ํ˜• ๋ฐ ๋ฒ„์ „

[] ArduPilot
[X] PX4

๋ฒ„์ „ : 1.72

๋…ธ๋“œ ๋กœ๊ทธ

[ INFO] [1513871636.932979892, 18.704000000]: Offboard enabled
[ INFO] [1513871642.007625263, 23.756000000]: Offboard enabled
[ INFO] [1513871647.086730559, 28.802000000]: Offboard enabled
[ INFO] [1513871652.230028795, 33.854000000]: Offboard enabled
[ INFO] [1513871657.324560463, 38.904000000]: Offboard enabled
[ INFO] [1513871662.405701045, 43.952000000]: Offboard enabled
[ INFO] [1513871667.482897607, 49.002000000]: Offboard enabled
[ INFO] [1513871672.582290375, 54.054000000]: Offboard enabled
[ INFO] [1513871677.688265367, 59.104000000]: Offboard enabled
[ INFO] [1513871682.756627458, 64.152000000]: Offboard enabled
[ INFO] [1513871687.861573086, 69.204000000]: Offboard enabled
[ INFO] [1513871692.928765643, 74.252000000]: Offboard enabled
[ INFO] [1513871698.006964586, 79.304000000]: Offboard enabled
[ INFO] [1513871703.113995111, 84.354000000]: Offboard enabled
[ INFO] [1513871708.205142370, 89.404000000]: Offboard enabled
[ INFO] [1513871713.332829113, 94.454000000]: Offboard enabled
[ INFO] [1513871718.443985089, 99.504000000]: Offboard enabled

์ง„๋‹จ

header: 
  seq: 58
  stamp: 
    secs: 53
    nsecs:         0
  frame_id: ''
status: 
  - 
    level: 0
    name: "mavros: FCU connection"
    message: "connected"
    hardware_id: "udp://:14540<strong i="17">@localhost</strong>:14557"
    values: 
      - 
        key: "Received packets:"
        value: "19548"
      - 
        key: "Dropped packets:"
        value: "0"
      - 
        key: "Buffer overruns:"
        value: "0"
      - 
        key: "Parse errors:"
        value: "0"
      - 
        key: "Rx sequence number:"
        value: "94"
      - 
        key: "Tx sequence number:"
        value: "108"
      - 
        key: "Rx total bytes:"
        value: "808043"
      - 
        key: "Tx total bytes:"
        value: "26524"
      - 
        key: "Rx speed:"
        value: "15016.000000"
      - 
        key: "Tx speed:"
        value: "510.000000"
  - 
    level: 0
    name: "mavros: GPS"
    message: "3D fix"
    hardware_id: "udp://:14540<strong i="18">@localhost</strong>:14557"
    values: 
      - 
        key: "Satellites visible"
        value: "10"
      - 
        key: "Fix type"
        value: "3"
      - 
        key: "EPH (m)"
        value: "0.00"
      - 
        key: "EPV (m)"
        value: "0.00"
  - 
    level: 0
    name: "mavros: Heartbeat"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="19">@localhost</strong>:14557"
    values: 
      - 
        key: "Heartbeats since startup"
        value: "48"
      - 
        key: "Frequency (Hz)"
        value: "0.900000"
      - 
        key: "Vehicle type"
        value: "Quadrotor"
      - 
        key: "Autopilot type"
        value: "PX4 Autopilot"
      - 
        key: "Mode"
        value: "AUTO.LOITER"
      - 
        key: "System status"
        value: "Standby"
  - 
    level: 0
    name: "mavros: System"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="20">@localhost</strong>:14557"
    values: 
      - 
        key: "Sensor present"
        value: "0x00000000"
      - 
        key: "Sensor enabled"
        value: "0x00000000"
      - 
        key: "Sensor helth"
        value: "0x00000000"
      - 
        key: "CPU Load (%)"
        value: "0.0"
      - 
        key: "Drop rate (%)"
        value: "0.0"
      - 
        key: "Errors comm"
        value: "0"
      - 
        key: "Errors count #1"
        value: "0"
      - 
        key: "Errors count #2"
        value: "0"
      - 
        key: "Errors count #3"
        value: "0"
      - 
        key: "Errors count #4"
        value: "0"
  - 
    level: 0
    name: "mavros: Battery"
    message: "Normal"
    hardware_id: "udp://:14540<strong i="21">@localhost</strong>:14557"
    values: 
      - 
        key: "Voltage"
        value: "12.15"
      - 
        key: "Current"
        value: "-1.0"
      - 
        key: "Remaining"
        value: "100.0"
  - 
    level: 2
    name: "mavros: Time Sync"
    message: "No events recorded."
    hardware_id: "udp://:14540<strong i="22">@localhost</strong>:14557"
    values: 
      - 
        key: "Timesyncs since startup"
        value: "0"
      - 
        key: "Frequency (Hz)"
        value: "0.000000"
      - 
        key: "Last dt (ms)"
        value: "-9.905652"
      - 
        key: "Mean dt (ms)"
        value: "0.000000"
      - 
        key: "Last system time (s)"
        value: "48.740659000"
      - 
        key: "Time offset (s)"
        value: "4.147428739"

์•„์ด๋”” ํ™•์ธ

OK. I got messages from 1:1.

---
Received 5370 messages, from 1 addresses
sys:comp   list of messages
  1:1     0, 1, 2, 140, 141, 147, 24, 30, 31, 32, 33, 74, 76, 77, 85, 87, 102, 230, 105, 111, 241, 242, 245

PX4 question setpoint

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

๋จผ์ € while(ros::ok() && current_state.connected){ ๋Š” while(ros::ok() && !current_state.connected){ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ-https: //github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69-$ global_position/global ์ฃผ์ œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

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

๋จผ์ € while(ros::ok() && current_state.connected){ ๋Š” while(ros::ok() && !current_state.connected){ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ-https: //github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69-$ global_position/global ์ฃผ์ œ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” while ๋ฃจํ”„๋ฅผ!
rostopic echo global_position / global์€ ์˜ฌ๋ฐ”๋ฅธ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

header: 
  seq: 283
  stamp: 
    secs: 193
    nsecs: 832815640
  frame_id: "base_link"
status: 
  status: 0
  service: 1
latitude: 42.3005867
longitude: -6.7324631
altitude: 2120.89452234
position_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
position_covariance_type: 1

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฌด์žฅํ•˜๊ฑฐ๋‚˜ ์˜คํ”„ ๋ณด๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๊ณ  ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
์ƒ์„ฑ๋˜๋Š” ์œ ์ผํ•œ ๊ฒฝ๊ณ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[ WARN] [1514991840.139563807, 7583.766000000]: SPG: sp not sent.
INFO  [tone_alarm] negative
[ WARN] [1514991840.303175629, 7583.928000000]: CMD: Unexpected command 176, result 1

์ „์—ญ์—์„œ ๋กœ์ปฌ๋กœ ๋ฒˆ์—ญ ํ•œ ๋‹ค์Œ mavros / setpoint_position / local๋กœ ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ถ๊ธˆํ•œ๋ฐ์ด ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฑด ๋‚˜๋ฟ์ธ๊ฐ€์š”? ๋ˆ„๊ตฐ๊ฐ€ mavros / setpoint_position / global์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ•ญ๊ณต๊ธฐ ์˜คํ”„ ๋ณด๋“œ ์˜ˆ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@mzahana ์œ„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด @danividanivi ๋ฅผ ์•ˆ๋‚ดํ•ด

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ฃผ์ œ๋กœ ๊ฒŒ์‹œํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ MAVROS๋Š” PX4์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ MAVLINK ์„ค์ • ๊ฐ’ ๋ฉ”์‹œ์ง€๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. QGroundcontrol์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•œ ๊ฒฐ๊ณผ ๋กœ์ปฌ์„ ์‚ฌ์šฉํ•  ๋•Œ PX4์— ๊ฒŒ์‹œ๋˜๋Š” ์„ค์ • ๊ฐ’ ๋ฉ”์‹œ์ง€ ๋งŒ ๋ณผ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@mzahana ๊ตฌํ˜„์„ ๋‹ค์‹œ ์„ค์ •ํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ

@ eric1221bday ๋น ๋ฅธ ์งˆ๋ฌธ :

๊ทธ๋Ÿฌ๋‚˜ MAVROS๋Š” PX4์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ MAVLINK ์„ค์ • ๊ฐ’ ๋ฉ”์‹œ์ง€๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจํ˜ธํ•˜๊ฒŒ ๋“ค๋ฆฌ๋ฉฐ ์ด์™€ ๊ฐ™์€ ์ •๋ณด๋กœ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

SITL์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, GPS ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ํ™œ์„ฑํ™”๋˜์—ˆ๊ณ  ROS์—์„œ ์ฃผ์ œ๋ฅผ ๋ณผ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. mavlink์— ๊ด€ํ•ด์„œ๋Š”. ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” Mavlink Inspector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ ์„ค์ • ์ ์ด px4๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „์†ก๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ „์—ญ ์œ„์น˜ ์„ค์ • ์ ์„ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „์—ญ์—์„œ ๋กœ์ปฌ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋กœ์ปฌ ์œ„์น˜ ์„ค์ • ์ ์œผ๋กœ ๊ฒŒ์‹œํ•˜๋„๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ์ „์—ญ ์„ค์ • ๊ฐ’์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ผ๊ณ  ์ถ”๋ก  ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ PX4์—์„œ๋„ ๋กœ์ปฌ ์„ค์ • ๊ฐ’์„ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋…ธ๋“œ๊ฐ€ ์„ค์ •๋˜๋Š” ๋ฐฉ๋ฒ•๊ณผ MAVROS์— ๊ฒŒ์‹œํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ •๋ณด ์—†์ด๋Š” ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ eric1221bday ์ถ”๊ฐ€ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‚ด ํŽธ์—์„œ ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋‹น์‹ ์—๊ฒŒ ๋Œ์•„๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์„ ์ˆ˜์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

header.stamp ํ•„๋“œ๋ฅผ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ž˜์•ผ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ˆ„๊ตฌ๋“ ์ง€ / mavros / setpoint_position / global ์ฃผ์ œ์— ๊ฒŒ์‹œํ•˜์—ฌ ๋“œ๋ก ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์„ฑ๊ณต์ ์œผ๋กœ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? header.stamp ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (์‘๋‹ต ์—†์Œ, px4๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Œ).

์˜ˆ, ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค!

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค ... (๋‚˜์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Œ)

@tropappar ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ

์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค :

#include <ros/ros.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>
#include <sensor_msgs/NavSatFix.h>

// global variables
mavros_msgs::State current_state;
sensor_msgs::NavSatFix global_position;
bool global_position_received = false;

// callback functions
void globalPosition_cb(const sensor_msgs::NavSatFix::ConstPtr& msg) {
    global_position = *msg;
    global_position_received = true;
    ROS_INFO_ONCE("Got global position: [%.2f, %.2f, %.2f]", msg->latitude, msg->longitude, msg->altitude);
}

void state_cb(const mavros_msgs::State::ConstPtr& msg) {
    current_state = *msg;
}

// main function
int main(int argc, char **argv) {
    ros::init(argc, argv, "test");
    ros::NodeHandle nh;

    ros::ServiceClient arming_client = nh.serviceClient < mavros_msgs::CommandBool > ("mavros/cmd/arming");
    ros::ServiceClient set_mode_client = nh.serviceClient < mavros_msgs::SetMode > ("mavros/set_mode");
    ros::Subscriber state_sub = nh.subscribe < mavros_msgs::State > ("mavros/state", 10, state_cb);
    ros::Subscriber global_pos_sub = nh.subscribe < sensor_msgs::NavSatFix > ("mavros/global_position/global", 1, globalPosition_cb);
    ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10);

    ros::Rate rate(10);

    // wait for fcu connection
    while (ros::ok() && !current_state.connected) {
        ROS_INFO_ONCE("Waiting for FCU connection...");
        ros::spinOnce();
        rate.sleep();
    }
    ROS_INFO("FCU connected");

    // wait for position information
    while (ros::ok() && !global_position_received) {
        ROS_INFO_ONCE("Waiting for GPS signal...");
        ros::spinOnce();
        rate.sleep();
    }
    ROS_INFO("GPS position received");

    // set target position
    mavros_msgs::GlobalPositionTarget goal_position;
    goal_position.latitude = global_position.latitude;
    goal_position.longitude = global_position.longitude;
    goal_position.altitude = global_position.altitude;

    // send a few setpoints before starting
    for (int i=0; i<20; ++i) {
        goal_position.header.stamp = ros::Time::now();
        goal_pos_pub.publish(goal_position);
        ros::spinOnce();
        rate.sleep();
    }

    // set mode
    mavros_msgs::SetMode offb_set_mode;
    offb_set_mode.request.base_mode = 0;
    offb_set_mode.request.custom_mode = "OFFBOARD";
    if (set_mode_client.call(offb_set_mode) && offb_set_mode.response.mode_sent) {
        ROS_INFO("OFFBOARD enabled");
    } else {
        ROS_ERROR("Failed to set OFFBOARD");
    }

    // arm
    mavros_msgs::CommandBool arm_cmd;
    arm_cmd.request.value = true;
    if (arming_client.call(arm_cmd) && arm_cmd.response.success) {
        ROS_INFO("Vehicle armed");
    } else {
        ROS_ERROR("Arming failed");
    }

    // take off to 5m above ground
    goal_position.altitude = goal_position.altitude + 5.0;
    while (ros::ok()) {
        goal_position.header.stamp = ros::Time::now();
        goal_pos_pub.publish(goal_position);
        ros::spinOnce();
        ROS_INFO_THROTTLE(1, "At altitude %.2f", global_position.altitude);
        rate.sleep();
    }

    return 0;
}

์•ˆ๋…•ํ•˜์„ธ์š”! ๋ˆ„๊ตฌ๋“ ์ง€ / mavros / setpoint_position / global ์ฃผ์ œ์— ๊ฒŒ์‹œํ•˜์—ฌ ๋“œ๋ก ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์„ฑ๊ณต์ ์œผ๋กœ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? header.stamp ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (์‘๋‹ต ์—†์Œ, px4๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Œ).

๋‚˜๋„ํ•˜์ง€๋งŒ / mavros / setpoint_raw / global ์ฃผ์ œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…• zxz0622,
์•ฝ 4 ์ผ ๋™์•ˆ / mavros / setpoint_raw / global์—์„œ ์ž‘์—…ํ–ˆ์ง€๋งŒ ์œ„๋„ ๊ฒฝ๋„ ๊ณ ๋„ ๊ฐ’์„ ์ œ๊ณตํ•˜์—ฌ ์ฟผ๋“œ ์ฝฅํ„ฐ๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒํ•˜๋Š”์ง€ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
/ mavros / setpoint_raw / global์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? (์ขŒํ‘œ _ ํ”„๋ ˆ์ž„ ...)

์˜ค๋ž˜๋œ ์‹ค์„ ํŒŒํ—ค์ณ ์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚˜๋„ ๋˜‘๊ฐ™์ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. _mavros / setpoint_position / global_์—์„œ ์œ„์น˜ ์„ค์ • ๊ฐ’์„ ์ „์†กํ•˜์—ฌ ์ฐจ๋Ÿ‰์„ ์ œ์–ด ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฐจ๋Ÿ‰ ํŒ”, ํšŒ์ „ํ•˜๋Š” ๋กœํ„ฐ์— ์•‰์•„ ํƒ€์ž„ ์•„์›ƒ ํ›„ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค. rostopic echo /mavros/setpoint_position/global ์—์„œ ๋‚ด ์ฝ”๋“œ์˜ ์„ค์ • ๊ฐ’์ด ๊ฒŒ์‹œ๋˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ _mavros / setpoint_position / global_์—์„œ ๋กœ์ปฌ ์ขŒํ‘œ ์„ค์ • ๊ฐ’์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์œ„๋„, ๊ฒฝ๋„ ๋ฐ ์œ„๋„ ์ด์™ธ์˜ ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

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

Mavros : ๋งˆ์Šคํ„ฐ
ROS : ๋ฉœ๋กœ๋”•
Ubuntu : 18.04
Autopilot ์œ ํ˜• ๋ฐ ๋ฒ„์ „

[] ArduPilot
[X] PX4

๋ฒ„์ „ : ๋งˆ์Šคํ„ฐ

์ง„๋‹จ
rostopic echo์˜ ์ƒ˜ํ”Œ :
header: seq: 10 stamp: secs: 1861 nsecs: 652000000 frame_id: "base_footprint" pose: position: latitude: 19.1345485 longitude: 72.9122298 altitude: -48.3160189477 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0
๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. frame_id ํ•„๋“œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ํ•ฉ๋‹ˆ๊นŒ? _local_origin_๋„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ.

๋“œ๋ก ์˜ ๊ณ ๋„๋ณด๋‹ค ๋†’์€ ์ง€์ ์„ ๊ฒŒ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด๋ฆฌ์„์€ ์ œ์•ˆ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ GPS ๊ณ ๋„๊ฐ€ ์ง€์—ญ ๊ณ ๋„๋ณด๋‹ค ํ›จ์”ฌ ๋†’์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@swaroophangal ์œ„์˜ @tropappar ์—์„œ ์ œ๊ณต ํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, "mavros / setpoint_position / global"์„ ํ†ตํ•ด ์œ„์น˜๋ฅผ ์„ค์ • ๊ฐ’์œผ๋กœ ์ „์†กํ•จ์œผ๋กœ์จ ์ฐจ๋Ÿ‰์€ ์„ฑ๊ณต์ ์œผ๋กœ ์˜คํ”„ ๋ณด๋“œ ๋ฐ ์‹ฌ์ง€์–ด ํŒ”์— ์ง„์ž…ํ•˜์ง€๋งŒ ์ง€์ƒ์— ์•‰์Šต๋‹ˆ๋‹ค.
์œ„์น˜ ์„ค์ • ๊ฐ’ "mavros / setpoint_raw / global"๋„ ๋ณด๋‚ด๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ํ˜„์ƒ์œผ๋กœ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค (์ฆ‰, ์ฐจ๋Ÿ‰์ด ์„ฑ๊ณต์ ์œผ๋กœ ์˜คํ”„ ๋ณด๋“œ์— ์ง„์ž…ํ•˜๊ณ  ์‹ฌ์ง€์–ด ํŒ”์— ์ง„์ž…ํ•˜์ง€๋งŒ์ง€๋ฉด์— ์•‰์Šต๋‹ˆ๋‹ค).

@ burak-yildizoz ๋˜ํ•œ ๊ฒŒ์‹œ ๋œ ์ง€์ ์ด ๋“œ๋ก ์˜ GPS ๊ณ ๋„ ์œ„์— ์žˆ๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค (์œ„์˜ @tropappar ์—์„œ ์ œ๊ณต ํ•œ ์ฝ”๋“œ๋Š” "goal_position.altitude = goal_position.altitude + 5.0;"์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•จ). ํŠนํžˆ "+5"๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ๋†€์•˜์ง€๋งŒ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

Mavros : ๋งˆ์Šคํ„ฐ
ROS : ํ‚ค๋„คํ‹ฑ
Ubuntu : 16.04
Autopilot ์œ ํ˜• ๋ฐ ๋ฒ„์ „

[] ArduPilot
[X] PX4

๋ฒ„์ „ : ๋งˆ์Šคํ„ฐ

์ง„๋‹จ
rostopic echo / mavros / global_position / global์˜ ์ƒ˜ํ”Œ :
๋จธ๋ฆฌ๊ธ€:
seq : 206
์šฐํ‘œ:
์ดˆ : 1286
nsec : 28000000
frame_id : "base_link"
์ƒํƒœ:
์ƒํƒœ : 0
์„œ๋น„์Šค : 1
์œ„๋„ : 47.3977421
๊ฒฝ๋„ : 8.5455932
๊ณ ๋„ : 535.327916774
์œ„์น˜ _ ๊ณต๋ถ„์‚ฐ : [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
position_covariance_type : 2

rqt_graph
rqt_graph

@ jungx148 fmu ๊ฐ€ ์ „์†ก์ค‘์ธ mavlink ์„ค์ • ๊ฐ’์„ ์ˆ˜์‹ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ Jaeyoung-Lim ์•ˆ๋…•ํ•˜์„ธ์š”, Pixhawk ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ์œ„ํ•œ ๋ชจ๋“  ๋…ธ๋ ฅ๊ณผ ๋น ๋ฅธ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋กœ์ปฌ ์˜คํ”„ ๋ณด๋“œ ์ œ์–ด๋ฅผ ์œ„ํ•ด ๋นŒ๋“œ ๋œ ์ด์ „์— ๊ฒŒ์‹œ ๋œ "modudculab_ros"ํ”„๋กœ์ ํŠธ ( ๋งํฌ) ๋ฅผ ๊ธ€๋กœ๋ฒŒ ์˜คํ”„ ๋ณด๋“œ ์ œ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ํ•˜๋Š” ๋™์•ˆ ์ด์ „์— ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

"๊ท€ํ•˜์˜ fmu๊ฐ€ ์ „์†ก์ค‘์ธ mavlink ์„ค์ • ๊ฐ’์„ ์ˆ˜์‹ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค."๋ผ๋Š” ์˜๊ฒฌ๊ณผ ๊ด€๋ จํ•˜์—ฌ QGC๋ฅผ ํ†ตํ•ด "POSITION_TARGET_GLOBAL_INT (๋งํฌ) "๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, ๋ง์”€ํ•˜์‹ ๋Œ€๋กœ fmu๊ฐ€ ์‹ค์ œ๋กœ ์ˆ˜์‹  ํ•œ mavlink ์„ค์ • ๊ฐ’์ด ์—†์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. QGC ํ™”๋ฉด์—์„œ ์บก์ฒ˜ ํ•œ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

QGC

๋˜ํ•œ ์•„๋ž˜์— roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch ์˜ ์ถœ๋ ฅ์„ ์ฒจ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

` sunghunjung2 @ gcs : ~ $ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... /home/sunghunjung2/.ros/log/c7421548-ea08-11ea-8a18-b052161d0343/roslaunch-gcs-16794.log์— ๋กœ๊น…
๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ๋กœ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ค‘๋‹จํ•˜๋ ค๋ฉด Ctrl-C๋ฅผ ๋ˆ„๋ฅด์„ธ์š”.
๋กœ๊ทธ ํŒŒ์ผ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋Ÿ‰์€ 1GB ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค.

roslaunch ์„œ๋ฒ„ http : // gcs : 35869 / ์‹œ์ž‘

์š”์•ฝ

๋งค๊ฐœ ๋ณ€์ˆ˜

  • / mavros / conn_heartbeat : 5.0
  • / mavros / conn_timeout : 5.0
  • / mavros / fcu_url : udp : // : 14540 @ 127 ....
  • / mavros / frame_id : ์„ธ๊ณ„
  • / mavros / gcs_url :
  • / mavros / mocap / use_pose : False
  • / mavros / mocap / use_tf : True
  • / mavros / startup_px4_usb_quirk : ์ฐธ
  • / mavros / target_component_id : 1
  • / mavros / target_system_id : 1
  • / rosdistro : ์šด๋™
  • / rosversion : 1.12.15

๋…ธ๋“œ
/
mavros (mavros / mavros_node)
offb_node (modudculab_ros / pub_setpoints_traj)

ROS_MASTER_URI = http : // localhost : 11311

ํ”„๋กœ์„ธ์Šค [mavros-1] : pid๋กœ ์‹œ์ž‘๋จ [16811]
ํ”„๋กœ์„ธ์Šค [offb_node-2] : pid๋กœ ์‹œ์ž‘๋จ [16812]
`

-
์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ ๋‹ค์Œ ๋‘ ๋ถ€๋ถ„์ด ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค.

์˜์‹ฌ 1 :
์ด ๋ฌธ์ œ๋Š” ๋‚ด ๋ฐ์Šคํฌํ†ฑ์— ์„ค์น˜๋œ MAVROS ๋ฒ„์ „๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
apt ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ros-kinetic-mavros *๋ฅผ ์„ค์น˜ํ•˜๊ณ  catkin_ws / src ํด๋”์— ์ตœ์‹  mavros git ํŒจํ‚ค์ง€๋ฅผ ์ €์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜์‹ฌ 2 :
๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ

ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10); ,

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

[ERROR] [1598713832.833795288, 426.168000000]: Client [/mavros] wants topic /mavros/setpoint_position/global to have datatype/md5sum [geographic_msgs/GeoPoseStamped/cc409c8ed6064d8a846fa207bf3fba6b], but our version has [mavros_msgs/GlobalPositionTarget/076ded0190b9e045f9c55264659ef102]. Dropping connection.

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„

ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("geographic_msgs/GeoPoseStamped", 10);

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋Š ์ชฝ์ด๋“  "POSITION_TARGET_GLOBAL_INT"๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” QGC mavlink ๊ฒ€์‚ฌ๊ธฐ์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ์ด ๋ฌธ์ œ๋ฅผ ๊ฒ€ํ† ํ•˜๋Š” ๋ฐ ๊ท€์ค‘ํ•œ ์‹œ๊ฐ„์„ ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— mavros_msgs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ QGC์—์„œ ์›จ์ด ํฌ์ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์™ธ๋ถ€์—์„œ ๊ณ„์‚ฐ ๋œ ์š” ๊ฐ๋„๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ๊ฒฐํ•ฉ ๋œ ์›จ์ด ํฌ์ธํŠธ (์™ธ๋ถ€์—์„œ ๊ณ„์‚ฐ ๋œ ์š” ๊ฐ๋„๋กœ QGC์—์„œ ๊ฐ€์ ธ์˜จ ์›จ์ด ํฌ์ธํŠธ)๋ฅผ ํ‘ธ์‹œํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ์›ํ•˜๋Š”๋Œ€๋กœ MAV๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ jungx148 ๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋ฉฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ „์†ก์ค‘์ธ ์„ค์ • ๊ฐ’์ด fmu์— ๋„๋‹ฌํ•˜๋Š”์ง€ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๊นŒ?

@ jungx148 ๋ฌธ์ œ๊ฐ€ # 1414์™€ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋ฌด๋„ ์•„์ง ๊ฒฐ๋ก ์— ๋„๋‹ฌ ํ–ˆ์Šต๋‹ˆ๊นŒ ??

์ด ์„ธ ๊ฐ€์ง€ ์ฃผ์ œ์— ๋Œ€ํ•ด ๊ฒŒ์‹œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

"/ mavros / setpoint_raw / global"
"/ mavros / setpoint_raw / target_global"
"/ mavros / setpoint_position / global"

NB : ๋‚˜๋Š” ์ „๋ง๋Œ€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋งŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ์—์ด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„์š” / mavros / setpoint_position / global ์ด๋ผ๋Š” ์ฃผ์ œ๊ฐ€ ๋งˆ์นจ๋‚ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ๊ณ ๋„ ์˜คํ”„์…‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?). rostopic info /mavros/setpoint_position/global ์—์„œ ์ž‘์—…ํ•ด์•ผํ•˜๋Š” ๋ฉ”์‹œ์ง€ ์œ ํ˜•์ด mavros_msgs / GlobalPositionTarget์ด ์•„๋‹Œ geographic_msgs / GeoPoseStamped ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์„œ ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ mavros / setpoint_raw / global ์ฃผ์ œ์— mavros_msgs :: GlobalPositionTarget ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋™์ผํ•œ ์กฐ์ž‘์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ก ์ด ์ด๋ฅ™ํ•˜์—ฌ ์›ํ•˜๋Š” ์›จ์ด ํฌ์ธํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ก ์„ ์—ฌ๋Ÿฌ ์›จ์ด ํฌ์ธํŠธ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋™ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ๋Š”์ง€, ์›จ์ด ํฌ์ธํŠธ์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•œ์ง€ ๋ฌผ์–ด๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๋ฌป๋Š” ์ด์œ ๋Š” ์ „๋ง๋Œ€๊ฐ€ ํ™ˆ ์œ„์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋“œ๋ก ์ด ์ œ๊ณต๋œ ์ž„์˜์˜ ์œ„๋„ ๊ณ ๋„๋กœ ์ด๋™ํ•˜๋ฉด ํ•ด๋‹น ์›จ์ด ํฌ์ธํŠธ๋กœ ๋ฌด๊ธฐํ•œ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์›จ์ด ํฌ์ธํŠธ์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ์›จ์ด ํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์–ด๋–ค ์ œ์•ˆ์ด๋ผ๋„ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ mavros / setpoint_raw / global ์ฃผ์ œ์— mavros_msgs :: GlobalPositionTarget ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋™์ผํ•œ ์กฐ์ž‘์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ก ์ด ์ด๋ฅ™ํ•˜์—ฌ ์›ํ•˜๋Š” ์›จ์ด ํฌ์ธํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ก ์„ ์—ฌ๋Ÿฌ ์›จ์ด ํฌ์ธํŠธ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋™ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ๋Š”์ง€, ์›จ์ด ํฌ์ธํŠธ์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•œ์ง€ ๋ฌผ์–ด๋ณด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ๋ฌป๋Š” ์ด์œ ๋Š” ์ „๋ง๋Œ€๊ฐ€ ํ™ˆ ์œ„์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋“œ๋ก ์ด ์ œ๊ณต๋œ ์ž„์˜์˜ ์œ„๋„ ๊ณ ๋„๋กœ ์ด๋™ํ•˜๋ฉด ํ•ด๋‹น ์›จ์ด ํฌ์ธํŠธ๋กœ ๋ฌด๊ธฐํ•œ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์›จ์ด ํฌ์ธํŠธ์— ๋„๋‹ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ์›จ์ด ํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์–ด๋–ค ์ œ์•ˆ์ด๋ผ๋„ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋“œ๋ก ์ด xy ํ‰๋ฉด์—์„œ ~ 50cm, z ์ถ•์—์„œ 10cm์™€ ๊ฐ™์ด ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์˜์—ญ ๋‚ด์—์žˆ์„ ๋•Œ๊นŒ์ง€ ์ „์—ญ ์œ„์น˜ ์„ค์ • ์ ์„ ๊ณ„์† ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค๋ฅธ ์š”์ ์„ ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค.

์ž˜ ๋”ฐ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ช‡ ๊ฐ€์ง€ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Z ์ถ• 10cm ๋˜๋Š” m?
๊ฐ์‚ฌ.

์ž˜ ๋”ฐ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ„๋‹จํ•œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ช‡ ๊ฐ€์ง€ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Z ์ถ• 10cm ๋˜๋Š” m?
๊ฐ์‚ฌ.

๋‚˜๋Š” ๋‹จ์ง€ ๋‹น์‹ ์—๊ฒŒ ์•„์ด๋””์–ด๋ฅผ์ฃผ๊ธฐ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ผ์Šต๋‹ˆ๋‹ค. ์ง๊ต ์ขŒํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋“œ๋ก ๊ณผ ์›ํ•˜๋Š” ์ง€์ ์˜ ์ฐจ์ด๊ฐ€ ์ž„๊ณ„ ๊ฐ’๋ณด๋‹ค ๋‚ฎ๋„๋ก 1e-6 ์ฃผ๋ณ€์˜ ์œ„๋„ / ๊ฒฝ๋„๋กœ ์ž„๊ณ„ ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ๊ธ€๋กœ๋ฒŒ ์œ„์น˜๋ฅผ ๊ตฌ๋…ํ•˜์‹ญ์‹œ์˜ค. ๊ณ ๋„๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฏธํ„ฐ ๋‹จ์œ„์ด๋ฏ€๋กœ ๊ณ ๋„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ก ์ด ์ƒ์ž ์•ˆ์— ์žˆ์œผ๋ฉด ์›จ์ด ํฌ์ธํŠธ์— ๋„๋‹ฌ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ €๋Š” sensor_msgs :: NavSatFix๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋“œ๋ก ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹ํŒŒ์•…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ํฌ์ง€์…˜์— ๊ตฌ๋…ํ•œ๋‹ค๊ณ  ๋งํ•  ๋•Œ์ด ๊ตฌ๋…์ž์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?
๋˜ํ•œ 0.000001 ์ฃผ๋ณ€์˜ ์œ„๋„ / ๊ฒฝ๋„๋กœ ์ž„๊ณ„ ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋“œ๋ก ์ด ์ƒ์ž ์•ˆ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๋ฉด ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋ฏธ ๊ตฌํ˜„ ํ•œ ๊ฒฝ์šฐ ์–ธ๊ธ‰ํ•˜๊ณ ์žˆ๋Š” ๋กœ์ง์˜ ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์ผ์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,
๊ธ€๋กœ๋ฒŒ ํ”„๋ ˆ์ž„์— ์—ฌ๋Ÿฌ ์›จ์ด ํฌ์ธํŠธ๊ฐ€์žˆ๋Š” ๋“œ๋ก ์˜ ๋‚ด๋น„๊ฒŒ์ด์…˜์„ ํ•ด๊ฒฐ ํ•œ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด [ https://github.com/mavlink/mavros/issues/1553 }์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ์„ธ์š”. ๋‚˜๋Š” ๋ช‡ ์ฃผ ๋™์•ˆ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. lat lon alt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์›จ์ด ํฌ์ธํŠธ๋กœ ๋“œ๋ก ์„ ํƒ์ƒ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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