I’m trying to send mission items between two apps both using mavsdk.
Sending segment:
void sendMission()
{
mavsdk::MissionRaw mission{system};
std::vector<mavsdk::MissionRaw::MissionItem> mission_plan{};
mavsdk::MissionRaw::MissionItem new_item;
new_item.x = 47;
new_item.y = 8;
mission_plan.push_back(new_item);
mavsdk::MissionRaw::MissionItem new_item2;
new_item2.x = 47;
new_item2.y = 8;
mission_plan.push_back(new_item2);
const mavsdk::MissionRaw::Result result = mission->upload_mission(mission_plan);
switch (result)
{
case mavsdk::MissionRaw::Result::Error:
addMessage("upload_mission()->Error");
break;
case mavsdk::MissionRaw::Result::Busy:
addMessage("upload_mission()->Busy");
break;
case mavsdk::MissionRaw::Result::InvalidArgument:
addMessage("upload_mission()->InvalidArgument");
break;
case mavsdk::MissionRaw::Result::NoMissionAvailable:
addMessage("upload_mission()->NoMissionAvailable");
break;
case mavsdk::MissionRaw::Result::NoSystem:
addMessage("upload_mission()->NoSystem");
break;
case mavsdk::MissionRaw::Result::Success:
addMessage("upload_mission()->Success");
break;
case mavsdk::MissionRaw::Result::Timeout:
addMessage("upload_mission()->Timeout");
break;
case mavsdk::MissionRaw::Result::TooManyMissionItems:
addMessage("upload_mission()->TooManyMissionItems");
break;
case mavsdk::MissionRaw::Result::TransferCancelled:
addMessage("upload_mission()->TransferCancelled");
break;
case mavsdk::MissionRaw::Result::Unknown:
addMessage("upload_mission()->Unknown");
break;
case mavsdk::MissionRaw::Result::Unsupported:
addMessage("upload_mission()->Unsupported");
break;
default:
addMessage("upload_mission()->?");
break;
}
}
Receiving segment:
Mavsdk mavsdk;
Mavsdk::Configuration configuration(
Mavsdk::Configuration::UsageType::Autopilot);
mavsdk.set_configuration(configuration);
mavsdk.add_any_connection("udp://127.0.0.1:14550");
auto gcs_system = mavsdk.systems().back();
MissionRawServer mission_server = MissionRawServer{gcs_system};
mission_server.subscribe_incoming_mission(
[&](mavsdk::MissionRawServer::Result result, mavsdk::MissionRawServer::MissionPlan plan){
cout << "Mission plan received!" << endl;
result = mavsdk::MissionRawServer::Result::Success;
}
);
Receive segment callback is never triggered.
Send segment returns Unsupported
.
The console reports following error message:
[12:10:04|Error] Int messages are not supported. (mavlink_mission_transfer.cpp:34)
P.S. I got the same error using Mission
plugin instead MissionRaw
.
Following mavlink_mission_transfer.cpp
trail I got here:
void SystemImpl::process_autopilot_version(const mavlink_message_t& message)
{
mavlink_autopilot_version_t autopilot_version;
mavlink_msg_autopilot_version_decode(&message, &autopilot_version);
_mission_transfer.set_int_messages_supported(
autopilot_version.capabilities & MAV_PROTOCOL_CAPABILITY_MISSION_INT);
}
So I should set something particular to my received side fake autopilot in order to collect mission items properly? How?
Best regards,
Mike