Bird
Raised Fist0
Drone Programmingprogramming~20 mins

Companion computer integration (Raspberry Pi) 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
🎖️
Raspberry Pi Companion Computer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of MAVLink message parsing code
What is the output of this Python code snippet running on a Raspberry Pi receiving MAVLink messages?
Drone Programming
from pymavlink import mavutil

master = mavutil.mavlink_connection('udp:127.0.0.1:14550')
msg = master.recv_match(type='HEARTBEAT', blocking=True)
print(f"System ID: {msg.get_srcSystem()}, Component ID: {msg.get_srcComponent()}")
AAttributeError: 'NoneType' object has no attribute 'get_srcSystem'
BSystem ID: 1, Component ID: 1
CSystem ID: 0, Component ID: 0
DTimeoutError: No message received
Attempts:
2 left
💡 Hint
The code waits for a heartbeat message and prints its source IDs.
🧠 Conceptual
intermediate
1:30remaining
Purpose of companion computer in drone systems
What is the main role of a companion computer like a Raspberry Pi in a drone system?
ATo act as a GPS receiver only
BTo control the drone's motors directly
CTo replace the flight controller entirely
DTo provide advanced processing and run custom algorithms alongside the flight controller
Attempts:
2 left
💡 Hint
Think about tasks that require more computing power than the flight controller.
🔧 Debug
advanced
2:00remaining
Identify the error in MAVLink connection code
What error will this Raspberry Pi Python code produce when trying to connect to a drone via serial port?
Drone Programming
from pymavlink import mavutil

master = mavutil.mavlink_connection('/dev/ttyUSB0', baud=57600)
msg = master.recv_match(type='ATTITUDE', blocking=True)
print(msg)
ASyntaxError: invalid syntax in baud parameter
BAttributeError: 'NoneType' object has no attribute 'recv_match'
CFileNotFoundError: [Errno 2] No such file or directory: '/dev/ttyUSB0'
DTimeoutError: No ATTITUDE message received
Attempts:
2 left
💡 Hint
Check if the serial device path exists on the Raspberry Pi.
📝 Syntax
advanced
2:30remaining
Correct syntax for sending MAVLink command
Which option correctly sends a MAV_CMD_NAV_TAKEOFF command using pymavlink on a Raspberry Pi?
Drone Programming
master = mavutil.mavlink_connection('udp:127.0.0.1:14550')

# Send takeoff command here
Amaster.mav.command_long_send(master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, 10)
Bmaster.mav.command_long_send(master.target_system, master.target_component, MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, 10)
Cmaster.mav.command_long_send(master.target_system, master.target_component, mavutil.MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, 10)
Dmaster.mav.command_long_send(master.target_system, master.target_component, mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, 1, 0, 0, 0, 0, 0, 0, 10)
Attempts:
2 left
💡 Hint
Check the full path and parameters for the MAV_CMD_NAV_TAKEOFF constant and command_long_send signature.
🚀 Application
expert
1:30remaining
Number of GPS fix messages received in 10 seconds
A Raspberry Pi companion computer listens to GPS_RAW_INT MAVLink messages at 5 Hz. How many GPS fix messages will it receive in 10 seconds?
A50
B100
C5
D10
Attempts:
2 left
💡 Hint
Multiply the message frequency by the time interval.

Practice

(1/5)
1. What is the main role of a Raspberry Pi when used as a companion computer in drone programming?
easy
A. To add smart features and process data alongside the drone's flight controller
B. To replace the drone's flight controller completely
C. To act as a remote control for the drone
D. To charge the drone's batteries during flight

Solution

  1. Step 1: Understand the companion computer concept

    A companion computer like Raspberry Pi works alongside the drone's flight controller to add extra processing power and smart features.
  2. Step 2: Identify the Raspberry Pi's role

    It does not replace the flight controller but supports it by handling tasks like image processing or advanced navigation.
  3. Final Answer:

    To add smart features and process data alongside the drone's flight controller -> Option A
  4. Quick Check:

    Companion computer = extra smart features [OK]
Hint: Remember: companion computer supports, not replaces flight controller [OK]
Common Mistakes:
  • Thinking Raspberry Pi replaces the flight controller
  • Confusing companion computer with remote control
  • Assuming it charges the drone
2. Which of the following is the correct way to import the DroneKit library in a Python script running on a Raspberry Pi?
easy
A. import DroneKit
B. from dronekit import connect
C. import dronekit
D. import drone_kit

Solution

  1. Step 1: Recall DroneKit import syntax

    The DroneKit library is imported using 'from dronekit import connect' to access the connect function directly.
  2. Step 2: Check case sensitivity and module name

    Python is case sensitive; 'DroneKit' or 'drone_kit' are incorrect module names.
  3. Final Answer:

    from dronekit import connect -> Option B
  4. Quick Check:

    Correct import syntax = from dronekit import connect [OK]
Hint: Use exact lowercase 'dronekit' and import needed functions [OK]
Common Mistakes:
  • Using wrong capitalization in module name
  • Trying to import the whole module without specifying functions
  • Misspelling the library name
3. Given the following Python code snippet on a Raspberry Pi connecting to a drone via UDP:
from dronekit import connect
vehicle = connect('udp:127.0.0.1:14550', wait_ready=True)
print(vehicle.mode.name)

What will this code output if the drone is in GUIDED mode?
medium
A. guided
B. Mode GUIDED not found
C. GUIDED
D. SyntaxError

Solution

  1. Step 1: Understand vehicle.mode.name output

    The mode name property returns the mode as an uppercase string, e.g., 'GUIDED'.
  2. Step 2: Check the print output for GUIDED mode

    Since the drone is in GUIDED mode, the output will be 'GUIDED' in uppercase.
  3. Final Answer:

    GUIDED -> Option C
  4. Quick Check:

    vehicle.mode.name returns uppercase mode [OK]
Hint: DroneKit mode names print in uppercase strings [OK]
Common Mistakes:
  • Expecting lowercase mode names
  • Confusing attribute access syntax
  • Assuming code causes syntax error
4. You wrote this code on your Raspberry Pi to connect to a drone via serial port:
from dronekit import connect
vehicle = connect('/dev/ttyUSB0', baud=57600, wait_ready=True)
print(vehicle.battery.level)

But you get an error: TypeError: connect() got an unexpected keyword argument 'baud'. What is the fix?
medium
A. Change 'baud' to 'baudrate' in the connect() call
B. Remove 'wait_ready=True' from connect()
C. Use 'baud' but set it to 115200 instead
D. Change '/dev/ttyUSB0' to 'udp:127.0.0.1:14550'

Solution

  1. Step 1: Identify the correct parameter name for baud rate

    The connect() function expects 'baudrate' not 'baud' as the keyword argument for serial speed.
  2. Step 2: Fix the parameter name in the code

    Replace 'baud=57600' with 'baudrate=57600' to fix the TypeError.
  3. Final Answer:

    Change 'baud' to 'baudrate' in the connect() call -> Option A
  4. Quick Check:

    Correct parameter name = baudrate [OK]
Hint: Use 'baudrate' keyword, not 'baud' in connect() [OK]
Common Mistakes:
  • Using 'baud' instead of 'baudrate'
  • Changing connection type unnecessarily
  • Removing wait_ready without cause
5. You want your Raspberry Pi companion computer to monitor the drone's battery and land the drone automatically if battery level falls below 20%. Which code snippet correctly implements this logic using DroneKit?
hard
A. if vehicle.battery.level < 20: vehicle.mode = vehicle.mode.LAND
B. if vehicle.battery.level < 20: vehicle.mode = vehicle.mode.name('LAND')
C. if vehicle.battery.level < 20: vehicle.mode = vehicle.mode('LAND')
D. if vehicle.battery.level < 20: vehicle.mode = 'LAND'

Solution

  1. Step 1: Understand how to set vehicle mode

    To change the drone mode, assign a string like 'LAND' directly to vehicle.mode.
  2. Step 2: Check the battery level condition

    If battery level is below 20%, set vehicle.mode = 'LAND' to command landing.
  3. Final Answer:

    if vehicle.battery.level < 20: vehicle.mode = 'LAND' -> Option D
  4. Quick Check:

    Set mode by assigning string name directly [OK]
Hint: Assign mode as string like 'LAND' to vehicle.mode [OK]
Common Mistakes:
  • Trying to call mode as a function
  • Using mode.name or mode.LAND incorrectly
  • Not comparing battery level properly