Offboard mode not able to arm

Hi everybody!

So I am working on an autonomous Rover project, I am using the following:

  • The CubePilot’s Orange Cube: as flight controller
  • QGroundControl: as ground control station
  • PX4 Firmware version 1.14.0
  • Airframe type: Rover
  • Vehicle: Generic Ground Vehicle (Ackermann)
  • pymavlink.mavutil for communication between the cube and the companion computer
  • PX4_sitl with gazebo-classic_rover as testing platform (gazebo11)

I was able to successfully do an ‘autonomous’ mission using the px4_sitl so now it is time to test it on the ‘real’ Rover. However, when I try to arm the Rover in Offboard mode in QGroundControl, it gives me the following message:

"No offboard signal
The offboard component is not sending setpoints or the required estimate (e.g. position) is missing. "

I know that I need to send a SET_POSITION_TARGET_LOCAL_NED with a frequency of at least 2Hz, so I just used a simple command in the following code to achieve this:

master.mav.set_position_target_local_ned_send(
                    0, 
                    master.target_system,
                    master.target_component,
                    mavutil.mavlink.MAV_FRAME_LOCAL_NED,
                    0b110111111000,
                    5, 0, 0, # x, y, z positions
                    0, 0, 0, # vx, vy, vz velocities
                    0, 0, 0, # ax, ay, az accelerations
                    0, 0 # yaw, yaw_rate
                )

I have also tried changing this to a velocity command but it gives me the same result of not being able to arm the vehicle.

When I use the QGC’s Analyze tool > MAVlink inspector it does allow me to read SET_POSITION_TARGET_LOCAL_NED, which reads an x value of 5.

Does somebody know how to solve this?

With kind regards,
Jurjen

Update:

So I am connected to my OrangeCube with a USB cable and the following line of code:

master = mavutil.mavlink_connection('/dev/ttyACM0', baud=57600)

(The baud rate is the correct baud rate as in the parameters of my OrangeCube)

Whereas I was previously connected via:

master = mavutil.mavlink_connection('udpin:localhost:14445', source_system=1)

This allowed me to open QGC while also running my Pymavlink script. However, I had a theory that sending the command via the localhost might not work.

So that is why I connected a Herelink controller so that I could open QGC on the Herelink, while my Pymavlink script is connected to the cube via serial. This confirmed my theory, as the MAVLink Inspector tool on the Herelink did not show a SET_POSITION_TARGET_LOCAL_NED message.

I have added the following line in my code as well:

msg = master.recv_match(type="SET_POSITION_TARGET_LOCAL_NED", blocking=True)
print(msg)

Which confirmed that none of the commands are send to the cube, as there were no print statements.

Does anyone of you know why my sent commands from the Pymavlink script are not reaching the actual OrangeCube?

(P.S.: When connecting via the localhost again, I am able to print the msg’s, however, I have the feeling that I was just sending the command to QGC and not to the cube so it is not really helping)

Thanks in advance!

With kind regards,
Jurjen