Mavros: 板外控制示例 setpoint_position/global 未启用

创建于 2017-12-21  ·  38评论  ·  资料来源: mavlink/mavros

问题详情

我正在尝试复制板外控制示例(在凉亭中工作正常),但发送全局坐标而不是本地 x、y、z。
我无法这样做,无人机进入“启用舷外”循环,但从未进入车辆武装或根本移动。

这是我正在使用的代码:

#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

自动驾驶仪类型和版本

[ ] 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主题获取数据。

我用 !
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 上获取 GPS 数据? 还有你是什么意思:

但 MAVROS 似乎无法将其转换为 PX4 的正确 MAVLINK 设定点消息

这听起来有点含糊,我们无法用这样的信息调试任何问题。

我正在使用 SITL,是的,启用了 GPS 模拟并且我能够在 ROS 中查看该主题。 至于 mavlink 的事情。 我的意思很简单,全局设置点似乎没有正确发送到 px4,因为我无法使用 Mavlink Inspector 看到它。

这不应该发布任何全局位置设置点,而是从全局转换为本地并作为本地位置设置点发布。 因此,您实际上从未看到全局设置点。

我能够推断出是的,而且我同样无法从 PX4 看到任何本地设置点。

嗯,这取决于你的节点是如何设置的,以及你发布或不发布到 MAVROS 的内容。 如果没有更多信息,就无法调试。

@eric1221bday还有什么要添加的,或者我们可以关闭它吗?

我会在我这边重新测试这个,然后回复你。

任何进展? 我遇到了同样的问题,似乎找不到解决方案。

确保您设置了 header.stamp 字段。 只有这样它才有效!

下午好! 谁能确认发布到主题 /mavros/setpoint_position/global 他们成功地控制了无人机的位置? 即使设置了 header.stamp 字段,我也遇到了同样的问题(没有得到响应,px4 似乎没有收到任何消息)

是的,它对我有用!

在这里也一样......(对我不起作用)

@tropappar你介意分享一些示例代码吗? 我正在运行类似于顶部的脚本,但在 rqt_graph 上,即使它已成功发布,我也没有看到从我的节点发布的任何主题。

干得好:

#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,
我已经在 /mavros/setpoint_raw/global 上工作了大约 4 天,但我无法通过提供纬度经度高度值来移动四轴飞行器。 你能告诉我你是怎么做的吗?
你能分享 /mavros/setpoint_raw/global 的参数吗? (坐标框架...)

很抱歉挖掘了一个旧线程,但我正在尝试做同样的事情。 我无法通过在 _mavros/setpoint_position/global_ 上发送位置设定点来控制车辆。 车辆武器,坐在地上旋转转子和超时后解除武装。 我可以确认rostopic echo /mavros/setpoint_position/global显示我的代码中的设置点正在发布。 我还可以确认在 _mavros/setpoint_position/global_ 上发送本地坐标设置点工作正常。
我应该设置除 lat、lon 和 lat 之外的任何其他字段吗?

MAVROS 版本和平台

马夫罗斯:大师
ROS:旋律
Ubuntu:18.04
自动驾驶仪类型和版本

[ ] ArduPilot
[X] PX4

版本:大师

诊断
rostopic 回声示例:
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 版本和平台

马夫罗斯:大师
ROS:动力学
Ubuntu:16.04
自动驾驶仪类型和版本

[ ] ArduPilot
[X] PX4

版本:大师

诊断
rostopic echo /mavros/global_position/global 示例:
标题:
序列:206
邮票:
秒:1286
纳秒:28000000
frame_id: "base_link"
地位:
状态:0
服务:1
纬度:47.3977421
经度:8.5455932
海拔:535.327916774
position_covariance: [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 (link) ”,并注意到 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: 假
  • /mavros/mocap/use_tf: 真
  • /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*,并将最新的 mavros git 包保存在 catkin_ws/src 文件夹中。

嫌疑人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有关吗?

有人得出结论了吗??

我尝试发布这 3 个主题,但没有运气

“/mavros/setpoint_raw/global”
“/mavros/setpoint_raw/target_global”
“/mavros/setpoint_position/global”

注意:我只做凉亭模拟

好吧,我最近发现了这个错误:

好吧,主题/mavros/setpoint_position/global终于奏效了(但有高度偏移?)。 从rostopic info /mavros/setpoint_position/global我发现我应该使用的消息类型是geography_msgs/GeoPoseStamped而不是mavros_msgs/GlobalPositionTarget我不知道为什么文档没有更新。

我也在尝试做同样的操作,即在 mavros/setpoint_raw/global 主题上发布 mavros_msgs::GlobalPositionTarget 消息,它工作正常。 无人机起飞并前往所需的航点。 我想问一下是否有人成功地将无人机导航到多个航点,我们是否需要一个逻辑来检查是否到达了航点?
我问这个的原因是我不确定凉亭如何设置它的起始位置,所以当无人机去到任何随机提供的纬度时,它会无限期地去那个航点。 有没有办法检查是否到达该航点,然后提供另一个航点?
任何建议将不胜感激。
提前致谢。

我也在尝试做同样的操作,即在 mavros/setpoint_raw/global 主题上发布 mavros_msgs::GlobalPositionTarget 消息,它工作正常。 无人机起飞并前往所需的航点。 我想问一下是否有人成功地将无人机导航到多个航点,我们是否需要一个逻辑来检查是否到达了航点?
我问这个的原因是我不确定凉亭如何设置它的起始位置,所以当无人机去到任何随机提供的纬度时,它会无限期地去那个航点。 有没有办法检查是否到达该航点,然后提供另一个航点?
任何建议将不胜感激。
提前致谢。

只需继续发布全局位置设定点,直到无人机位于可接受的区域内,例如 xy 平面约 50 厘米和 z 轴 10 厘米。 然后,发布另一点。

没跟上。 您能否发送一个简单的示例代码,以便我了解一下? 我尝试了几件事,但没有奏效。 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 等级