Hello everyone,

i want to change from Stabilize disarmed to Stabilize armed using MAVLINK. 

I have to send a MAV_MODE message:

Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component.

Field Name Type Description


So, the base_mode would be 128 because is the value for MAV_MODE_FLAG_SAFETY_ARMED in the enum MAV_MODE_FLAG.

Now, i have to write a value for custom_mode but i don't know which value i should write. Can someone help me please?

Thanks!

Views: 4549

Reply to This

Replies to This Discussion

Did you ever get any insight into this?

I don't know if you got anywhere with this, but here's part of the answer.  I have been going through the ArduPlane code and found that a) it ignores the MAV_MODE_FLAG

case MAVLINK_MSG_ID_SET_MODE:
{
// decode
mavlink_set_mode_t packet;
mavlink_msg_set_mode_decode(msg, &packet);

if (!(packet.base_mode & MAV_MODE_FLAG_CUSTOM_MODE_ENABLED)) {
// we ignore base_mode as there is no sane way to map
// from that bitmap to a APM flight mode. We rely on
// custom_mode instead.
break;
}
switch (packet.custom_mode) {
case MANUAL:
case CIRCLE:
case STABILIZE:
case FLY_BY_WIRE_A:
case FLY_BY_WIRE_B:
case AUTO:
case RTL:
case LOITER:
set_mode((enum FlightMode)packet.custom_mode);
break;
}

b) it only listens to the Custom Flag, which is defined in defines.h:

enum FlightMode {
MANUAL = 0,
CIRCLE = 1,
STABILIZE = 2,
FLY_BY_WIRE_A = 5,
FLY_BY_WIRE_B = 6,
AUTO = 10,
RTL = 11,
LOITER = 12,
GUIDED = 15,
INITIALISING = 16
};

So it appears that you want to set your custom flag to 2 for Stabilize.

Indeed - and that's why QGroundControl GCS cannot switch modes.

Hello,

I have been trying to run PX4 code on SITL simulation. In qGroundControl I am not able to switch to some modes. For e.g Follow me. I am pretty new to all this. I am not sure where am I going wrong.

David Gitz said:

I don't know if you got anywhere with this, but here's part of the answer.  I have been going through the ArduPlane code and found that a) it ignores the MAV_MODE_FLAG

case MAVLINK_MSG_ID_SET_MODE:
{
// decode
mavlink_set_mode_t packet;
mavlink_msg_set_mode_decode(msg, &packet);

if (!(packet.base_mode & MAV_MODE_FLAG_CUSTOM_MODE_ENABLED)) {
// we ignore base_mode as there is no sane way to map
// from that bitmap to a APM flight mode. We rely on
// custom_mode instead.
break;
}
switch (packet.custom_mode) {
case MANUAL:
case CIRCLE:
case STABILIZE:
case FLY_BY_WIRE_A:
case FLY_BY_WIRE_B:
case AUTO:
case RTL:
case LOITER:
set_mode((enum FlightMode)packet.custom_mode);
break;
}

b) it only listens to the Custom Flag, which is defined in defines.h:

enum FlightMode {
MANUAL = 0,
CIRCLE = 1,
STABILIZE = 2,
FLY_BY_WIRE_A = 5,
FLY_BY_WIRE_B = 6,
AUTO = 10,
RTL = 11,
LOITER = 12,
GUIDED = 15,
INITIALISING = 16
};

So it appears that you want to set your custom flag to 2 for Stabilize.

Reply to Discussion

RSS

Groups

Season Two of the Trust Time Trial (T3) Contest 
A list of all T3 contests is here. The current round, the Vertical Horizontal one, is here

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service