Bird
Raised Fist0
Drone Programmingprogramming~20 mins

Sending custom MAVLink commands in Drone Programming - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
MAVLink Command Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this MAVLink command send code?

Consider this Python snippet using pymavlink to send a custom MAVLink command to a drone. What will be printed?

Drone Programming
from pymavlink import mavutil

master = mavutil.mavlink_connection('udpout:localhost:14550')

master.target_system = 1
master.target_component = 1

# Send a command_long message with command ID 3000 and parameters 1,2,3,4,5,6
master.mav.command_long_send(
    master.target_system,
    master.target_component,
    3000,  # custom command ID
    0,     # confirmation
    1, 2, 3, 4, 5, 6, 0
)

print('Command sent with ID 3000 and params 1-6')
ACommand sent with ID 3000 and params 1-6
BSyntaxError: missing parentheses in call to 'print'
CTypeError: command_long_send() missing 1 required positional argument
DRuntimeError: connection not established
Attempts:
2 left
💡 Hint

Check the print statement and the parameters passed to command_long_send.

🧠 Conceptual
intermediate
1:30remaining
Which parameter in command_long_send specifies the target system?

In the command_long_send function of pymavlink, which argument represents the target system ID?

AThe second argument
BThe fourth argument
CThe third argument
DThe first argument
Attempts:
2 left
💡 Hint

Look at the function signature: command_long_send(target_system, target_component, command, confirmation, param1, ...)

🔧 Debug
advanced
2:30remaining
Why does this custom MAVLink command fail to send?

Review this code snippet that attempts to send a custom MAVLink command but fails. What is the likely cause?

Drone Programming
from pymavlink import mavutil

master = mavutil.mavlink_connection('udpout:localhost:14550')

# Missing target_system and target_component arguments
master.mav.command_long_send(
    3000,  # command ID
    0,     # confirmation
    1, 2, 3, 4, 5, 6, 0
)

print('Command sent')
AThe connection string 'udpout:localhost:14550' is incorrect
BThe command ID 3000 is invalid and causes failure
CThe command_long_send call is missing required target_system and target_component arguments
DThe print statement causes a runtime error
Attempts:
2 left
💡 Hint

Check the function signature and the number of arguments passed.

📝 Syntax
advanced
2:00remaining
Which option correctly sends a custom MAVLink command with parameters?

Choose the correct Python code snippet that sends a custom MAVLink command with ID 4000 and parameters 10, 20, 30.

Amaster.mav.command_long_send(4000, 0, 10, 20, 30, 0, 0, 0)
Bmaster.mav.command_long_send(master.target_system, master.target_component, 4000, 0, 10, 20, 30, 0, 0, 0, 0)
Cmaster.mav.command_long_send(master.target_system, 4000, master.target_component, 0, 10, 20, 30, 0, 0, 0)
Dmaster.mav.command_long_send(master.target_component, master.target_system, 4000, 0, 10, 20, 30, 0, 0, 0)
Attempts:
2 left
💡 Hint

Remember the order of arguments: target_system, target_component, command, confirmation, params...

🚀 Application
expert
1:30remaining
How many parameters can you send in a single custom MAVLink command_long message?

The command_long_send method allows sending parameters with the command. How many parameters can you include in one command?

A7 parameters
B8 parameters
C6 parameters
D10 parameters
Attempts:
2 left
💡 Hint

Check the MAVLink COMMAND_LONG message definition.

Practice

(1/5)
1. What is the main purpose of sending custom MAVLink commands to a drone?
easy
A. To update the drone's firmware automatically
B. To control the drone with commands beyond the standard set
C. To recharge the drone's battery remotely
D. To change the drone's GPS coordinates manually

Solution

  1. Step 1: Understand MAVLink command basics

    MAVLink commands include standard and custom commands to control drones.
  2. Step 2: Identify the role of custom commands

    Custom commands allow sending special instructions not covered by standard commands.
  3. Final Answer:

    To control the drone with commands beyond the standard set -> Option B
  4. Quick Check:

    Custom MAVLink commands extend control [OK]
Hint: Custom commands add new controls beyond defaults [OK]
Common Mistakes:
  • Confusing custom commands with firmware updates
  • Thinking commands recharge battery
  • Assuming manual GPS change via commands
2. Which of the following is the correct way to send a custom MAVLink command with 3 parameters in Python using pymavlink?
easy
A. vehicle.mav.command_long_send(target_system, target_component, command_id, 0, param1, param2, param3, 0, 0, 0, 0)
B. vehicle.send_command(command_id, param1, param2, param3)
C. vehicle.mav.send_command_long(command_id, param1, param2, param3)
D. vehicle.command_long_send(command_id, param1, param2, param3)

Solution

  1. Step 1: Recall pymavlink command_long_send syntax

    The correct method is vehicle.mav.command_long_send with parameters: target_system, target_component, command, confirmation, and up to 7 params.
  2. Step 2: Match the correct parameter order

    vehicle.mav.command_long_send(target_system, target_component, command_id, 0, param1, param2, param3, 0, 0, 0, 0) correctly uses target_system, target_component, command_id, 0 (confirmation), then params, filling unused with zeros.
  3. Final Answer:

    vehicle.mav.command_long_send(target_system, target_component, command_id, 0, param1, param2, param3, 0, 0, 0, 0) -> Option A
  4. Quick Check:

    Use command_long_send with full parameters [OK]
Hint: Use command_long_send with all 11 parameters [OK]
Common Mistakes:
  • Omitting target_system or target_component
  • Using wrong method names
  • Not filling unused params with zeros
3. Given this Python snippet using pymavlink:
vehicle.mav.command_long_send(
    1, 1, 300, 0, 10, 20, 30, 0, 0, 0, 0
)
What does the number 300 represent in this command?
medium
A. The command ID for the custom command
B. The first parameter value
C. The confirmation flag
D. The target system ID

Solution

  1. Step 1: Identify parameter positions in command_long_send

    Parameters are: target_system, target_component, command, confirmation, param1...param7.
  2. Step 2: Locate the third argument

    The third argument (300) is the command ID, which specifies which command to execute.
  3. Final Answer:

    The command ID for the custom command -> Option A
  4. Quick Check:

    Third argument = command ID [OK]
Hint: Third argument is always command ID [OK]
Common Mistakes:
  • Confusing command ID with target system
  • Mixing confirmation flag with command ID
  • Thinking parameters come before command ID
4. You wrote this code to send a custom MAVLink command but the drone does not respond:
vehicle.mav.command_long_send(1, 1, 400, 1, 5, 10, 15)
What is the likely problem?
medium
A. The command ID 400 is invalid
B. Target system and component IDs must be zero
C. The confirmation flag should be 0, not 1
D. Missing required parameters; command_long_send needs 11 arguments

Solution

  1. Step 1: Check command_long_send argument count

    command_long_send requires 11 arguments: target_system, target_component, command, confirmation, and 7 params.
  2. Step 2: Identify missing arguments

    The code only provides 7 arguments; missing the last 4 parameters which should be zero if unused.
  3. Final Answer:

    Missing required parameters; command_long_send needs 11 arguments -> Option D
  4. Quick Check:

    command_long_send needs 11 args [OK]
Hint: Always provide 11 arguments to command_long_send [OK]
Common Mistakes:
  • Passing fewer than 11 arguments
  • Assuming confirmation must be zero
  • Using invalid target IDs
5. You want to send a custom MAVLink command that sets a drone's LED color using command ID 2100 with parameters for red, green, and blue values. Which Python code snippet correctly sends this command assuming target system and component IDs are 1 and 1, and you want red=255, green=100, blue=50?
hard
A. vehicle.mav.send_command(2100, 255, 100, 50)
B. vehicle.mav.command_long_send(1, 1, 2100, 1, 255, 100, 50)
C. vehicle.mav.command_long_send(1, 1, 2100, 0, 255, 100, 50, 0, 0, 0, 0)
D. vehicle.command_long_send(2100, 1, 1, 0, 255, 100, 50, 0, 0, 0, 0)

Solution

  1. Step 1: Use correct method and argument order

    command_long_send requires target_system, target_component, command_id, confirmation, then 7 params.
  2. Step 2: Fill unused parameters with zeros

    Only 3 parameters used for RGB; remaining 4 must be zero to complete 7 params.
  3. Step 3: Confirm target IDs and confirmation flag

    Target system and component are 1, confirmation is 0 (no confirmation needed).
  4. Final Answer:

    vehicle.mav.command_long_send(1, 1, 2100, 0, 255, 100, 50, 0, 0, 0, 0) -> Option C
  5. Quick Check:

    Correct method, full params, proper IDs [OK]
Hint: Fill unused params with zeros, use confirmation=0 [OK]
Common Mistakes:
  • Omitting zeros for unused parameters
  • Using wrong method name
  • Swapping target system and component order