Я пытаюсь воспроизвести пример внешнего управления (который отлично работает в беседке), но отправляю глобальные координаты вместо локальных 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;
}
Маврос: 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
Во-первых, 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, похоже, не может преобразовать это в правильное сообщение уставки MAVLINK для PX4. Я проверил с помощью QGroundcontrol и смог увидеть только сообщение о заданном значении, публикуемое на PX4 при использовании локального.
@mzahana, можете ли вы повторно протестировать свою реализацию и убедиться, что она работает? Спасибо
@ eric1221bday быстрый вопрос: вы получаете данные GPS на MAVROS? И что вы имеете в виду под:
но MAVROS, похоже, не может преобразовать его в правильное сообщение уставки MAVLINK для PX4
Это звучит довольно расплывчато, и мы не можем отладить какую-либо проблему с такой информацией.
Я использовал SITL, и да, было включено моделирование GPS, и я смог просмотреть эту тему в ROS. Что касается мавлинка. Я имел в виду просто то, что не было похоже, что глобальная уставка отправляется на px4 правильно, так как я не мог увидеть ее с помощью Mavlink Inspector.
Это не должно публиковать какую-либо глобальную уставку положения, а скорее преобразовывать из глобального в локальное и публиковать как локальную уставку положения. Таким образом, вы на самом деле никогда не увидите глобальной уставки.
Я смог сделать вывод, что да, и я точно так же не смог увидеть никаких локальных уставок ни с PX4.
Что ж, это зависит от того, как настроен ваш узел и что вы публикуете или нет в MAVROS. Это не может быть отлажено без дополнительной информации.
@ eric1221bday что-нибудь еще добавить или мы можем закрыть это?
Я еще раз протестирую это на своей стороне и вернусь к вам.
Какой-либо прогресс? У меня такая же проблема, и я не могу найти решения.
Убедитесь, что вы установили поле header.stamp. Только тогда это работает!
Добрый день! Может ли кто-нибудь подтвердить, что публикация в теме / mavros / setpoint_position / global, по их мнению, успешно контролировала положение дрона? У меня такая же проблема (ответ не получен, px4, похоже, не получает никаких сообщений) даже при установке поля header.stamp
Да, у меня работает!
То же самое и здесь ... (у меня не работает)
@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, по их мнению, успешно контролировала положение дрона? У меня такая же проблема (ответ не получен, px4, похоже, не получает никаких сообщений) даже при установке поля header.stamp
у меня тоже, но тема / 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?
Версия и платформа МАВРОС
Маврос: мастер
ROS: мелодичный
Ubuntu: 18.04
Тип и версия автопилота
[] ArduPilot
[X] PX4
Версия: master
Диагностика
образец ростопического эха:
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", транспортное средство успешно входит в режим offboard и даже в руки, но садится на землю.
Я также попытался отправить заданное значение положения "mavros / setpoint_raw / global", но тоже потерпел неудачу с тем же феноменом (т. Е. Транспортное средство успешно входит в положение вне борта и даже вооружается, но остается на земле).
@ burak-yildizoz Кроме того, я перепроверил, что опубликованная точка находится выше GPS-высоты дрона (код, указанный @tropappar выше, решил это с помощью "goal_position.altitude = goal_position.altitude + 5.0;"). В частности, я поигрался с «+5» с другими значениями, но безуспешно.
Может кто-нибудь помочь?
Спасибо!
-
Версия и платформа МАВРОС
Маврос: мастер
ROS: кинетическая
Ubuntu: 16.04
Тип и версия автопилота
[] ArduPilot
[X] PX4
Версия: master
Диагностика
образец rostopic echo / mavros / global_position / global:
заголовок:
seq: 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
@ jungx148 Вам необходимо проверить, получает ли ваш fmu заданные значения mavlink, которые вы отправляете.
@ Jaeyoung-Lim Здравствуйте, большое спасибо за все ваши усилия для сообщества Pixhawk, а также за быстрый ответ.
У меня возникли ранее указанные проблемы, когда я работал над преобразованием вашего ранее опубликованного проекта "modudculab_ros" ( ссылка), который был построен для локального внешнего управления, в проект глобального внешнего управления.
Что касается вашего комментария: «Вам необходимо проверить, получает ли ваш fmu заданные значения mavlink, которые вы отправляете», я проверил параметр «POSITION_TARGET_GLOBAL_INT (link) » через QGC и заметил, что fmu действительно не получил заданные значения mavlink, как вы заявили как показано на рисунке ниже, снятом с экрана 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, чтобы прервать
Завершена проверка использования диска для файла журнала. Использование <1 ГБ.
запущен сервер roslaunch http: // gcs : 35869 /
ПАРАМЕТРЫ
УЗЛЫ
/
mavros (mavros / mavros_node)
offb_node (modudculab_ros / pub_setpoints_traj)
ROS_MASTER_URI = http: // локальный : 11311
процесс [mavros-1]: запущен с pid [16811]
процесс [offb_node-2]: запущен с pid [16812]
`
-
Что касается этого вопроса, я подозреваю следующие две части.
ПОДОЗРЕНИЕ 1 :
Я подозреваю, что эта проблема связана с установленной на моем рабочем столе версией MAVROS.
Я установил ros-kinetic-mavros * с помощью команды apt, а также сохранил последний пакет 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» не отображается в инспекторе mavlink QGC.
Еще раз спасибо за ваше бесценное время, чтобы изучить этот вопрос.
Я не смог решить указанную выше проблему, поэтому я перехожу на использование 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
я узнал, что тип сообщения, с которым я должен работать, - это geographic_msgs / GeoPoseStamped, а не mavros_msgs / GlobalPositionTarget. Я не знаю, почему документация не обновляется.
Я также пытаюсь выполнить тот же маневр, то есть опубликовать сообщение mavros_msgs :: GlobalPositionTarget в теме mavros / setpoint_raw / global, и оно отлично работает. Дрон взлетает и направляется к желаемой путевой точке. Я хотел спросить, успешно ли провел дрон на нескольких путевых точках и нужна ли нам логика, чтобы проверить, достигнута ли путевая точка?
Причина, по которой я спрашиваю об этом, заключается в том, что я не уверен, как беседка устанавливает свое исходное положение, поэтому, когда дрон переходит на любую предоставленную случайную широту и высоту, он перемещается к этой путевой точке на неопределенное время. Есть ли способ проверить, достигнута ли эта путевая точка, а затем указать другую путевую точку?
Любые предложения будут очень признательны.
Заранее спасибо.
Я также пытаюсь выполнить тот же маневр, то есть опубликовать сообщение mavros_msgs :: GlobalPositionTarget в теме mavros / setpoint_raw / global, и оно отлично работает. Дрон взлетает и направляется к желаемой путевой точке. Я хотел спросить, успешно ли провел дрон на нескольких путевых точках и нужна ли нам логика, чтобы проверить, достигнута ли путевая точка?
Причина, по которой я спрашиваю об этом, заключается в том, что я не уверен, как беседка устанавливает свое исходное положение, поэтому, когда дрон переходит на любую предоставленную случайную широту и высоту, он перемещается к этой путевой точке на неопределенное время. Есть ли способ проверить, достигнута ли эта путевая точка, а затем указать другую путевую точку?
Любые предложения будут очень признательны.
Заранее спасибо.
Просто продолжайте публиковать глобальные уставки положения, пока дрон не окажется внутри приемлемой области, например, ~ 50 см в плоскости xy и 10 см по оси z. Затем опубликуйте еще одну точку.
Не совсем понял. Не могли бы вы прислать простой образец кода, чтобы я мог понять? Я попробовал пару вещей, но это не сработало. Ось Z 10см или м?
Спасибо.
Не совсем понял. Не могли бы вы прислать простой образец кода, чтобы я мог понять? Я попробовал пару вещей, но это не сработало. Ось Z 10см или м?
Спасибо.
Я написал это, чтобы дать вам представление. Подпишитесь на глобальное положение, либо конвертируйте в декартовы координаты, либо просто задайте порог в градусах широты / долготы около 1e-6, чтобы разница между дроном и желаемой точкой была меньше порогового значения. К высоте нужно относиться по-другому, потому что ее значение не в градусах, а в метрах. Если дрон находится внутри коробки, точка пути достигнута.
В настоящее время я использую sensor_msgs :: NavSatFix, чтобы получить положение дрона. Когда вы говорите, подписывайтесь на глобальную позицию, вы имеете в виду этого подписчика?
Кроме того, было бы действительно полезно, если бы вы могли немного подробнее рассказать о том, как создать порог в градусах широты / долготы около 0,000001 и как проверить, находится ли дрон внутри коробки?
Если вы уже реализовали это, не могли бы вы поделиться небольшим фрагментом логики, о которой вы говорите? Так было бы намного проще.
Большое спасибо.
Привет всем,
Если кто-то решил навигацию дрона с несколькими путевыми точками в глобальном фрейме, не могли бы вы взглянуть на [ https://github.com/mavlink/mavros/issues/1553 } и помочь мне с этой проблемой. Я пытался реализовать это в течение нескольких недель, но не могу найти решение. Я просто хочу перемещать дрон, используя широту и долготу, к нескольким путевым точкам.
Заранее спасибо.
Самый полезный комментарий
Во-первых,
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
.