Command MESSAGE_INTERVAL fails for certain messages

I’m connecting to a Pixhawk2 running PX4 v1.7.3 (all versions listed at bottom) over USB with a Jetson TX1 development kit. I’m running a custom application utilizing the C MAVlink headers.

What I’m seeing is I can receive all the default message streams, however if I try to request a certain MAVlink messages at various rates I see the ACK report a failure to execute the command.

Here is the code I use to send the message interval command:

  memset(&msg, 0, sizeof(msg));
  mavlink_msg_command_long_pack(2, 0, &msg, m_sysId, 0,
      MAV_CMD_SET_MESSAGE_INTERVAL, 1, MAVLINK_MSG_ID_RAW_IMU, 100000, 0,
      0, 0, 0, 0);
  pixhawk_writemsg(msg);

The request for the RAW_IMU data reports a failure (ack.result = 4), however I cannot seem to figure out why it fails. I’ve tried disabling other IMU messages (e.g. HIGHRES_IMU), but it still fails.

I also tried another message - POWER_STATUS, GPS_STATUS - and it fails as well. Is there any feedback mechanism for determining why a message interval request fails? Is this documented anywhere?

I’ve tried using message interval to control the rates of other messages, such as ATTITUDE and HIGHRES_IMU and it works as expected. Even SCALED_IMUn requests work properly.

A related question is what data is contained in HIGHRES_IMU? Is it filtered through the EKF? Or is it more or less raw IMU data, converted to SI units? Multiple IMUs combined? Looking at the SCALED_IMUn messages, these would contain the same data? Which IMU is used to populate the RAW_IMU data?

Thanks for the help!

HW arch: PX4FMU_V2
HW type: V30
HW version: 0x0009000E
HW revision: 0x00000000
FW git-hash: 50bd148f53f1aeca6f1bd4a1caabcc18e4f2888b
FW version: Release 1.7.3 (17236991)
OS: NuttX
OS version: Release 7.22.0 (118882559)
OS git-hash: b18053574bf41712cef93e31bf178518f451a350
Build datetime: Jan  6 2018 11:33:38
Build uri: localhost
Toolchain: GNU GCC, 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]
MFGUID: 343136303136510e002f003b
MCU: STM32F42x, rev. 3
UID: 2F003B:3136510E:34313630

Try your code on px4 firmware 1.5.5.

I downloaded the pre-built binaries from https://github.com/PX4/Firmware/releases/download/v1.5.5/Firmware.zip and loaded px4fmu-v2 to my Pixhawk2.1 cube.

When I run the same code against that, both the RAW_IMU and SCALED_IMU message interval commands report failure (ack.result = 4).

Thoughts?

Bump - any thoughts from the community? I’d really like to understand why some messages work fine with the interval and why others do not.

Thanks!

Bump. I get this issue when trying to disable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, RC_CHANNELS_OVERRIDE and ESTIMATOR_STATUS. I am on PX4 v1.9.2.

I’ve also had trouble with the MESSAGE_INTERVAL command, but found it can be bypassed on PX4 by setting message rates directly from the PX4 console, as described here:
https://docs.px4.io/master/en/middleware/mavlink.html#set-streaming-rate

The same page (just above) also describes the steps to run these commands on startup. The command “mavlink status stream” can then be used to check the rate for each message.