Pymavlink For ardusub


I am using Ubuntu 16.04 OS in my topside computer. The topside computer has an IP address I have installed python2 and mavproxy in this computer. It is connected using ethernet to a raspberry pi whose IP is The raspberry pi has been connected to pixhawk and latest ardusub software has been installed in it. As given in pymavlink page in ardusub, I followed the same code to “Run pyMavlink on the surface computer”. I wrote the code in some text editor, saved it as ‘’ and tried to execute this file in the python shell. I didn’t get any output. Actually when I run the file, actually the vehicle information should come below the line . I have also checked by writing each line of the code individually in the python shell. Still I didn’t get any information from the vehicle(pixhawk).The raspberry pi and pixhawk both were powered on. Am I following the correct steps? My doubt is whether, is this the exact way to send or receive mavlink messages using python? Please reply.
Thanking you,

How are you connecting the RPi pymavlink to the topside PC ?
What commands are you issuing exactly ?

The topside computer is connected to raspberry pi through an ethernet cable. I had installed python-pip, python-future and pymavlink in my topside computer, along with python 2.7.12. I followed the commands given in the ardusub page ‘’. For eg, if I wanted to send RC values to my vehicle, the command given in the page is as given below.

Import mavutil

from pymavlink import mavutil

Create the connection

master = mavutil.mavlink_connection(‘udpin:’)

Wait a heartbeat before sending commands


Create a function to send RC values

More information about Joystick channels


def set_rc_channel_pwm(id, pwm=1500):
“”" Set RC channel pwm value
id (TYPE): Channel ID
pwm (int, optional): Channel pwm value 1100-1900
if id < 1:
print(“Channel does not exist.”)

# We only have 8 channels
if id < 9:
    rc_channel_values = [65535 for _ in range(8)]
    rc_channel_values[id - 1] = pwm
        master.target_system,                # target_system
        master.target_component,             # target_component
        *rc_channel_values)                  # RC channel list, in microseconds.

Set some roll

set_rc_channel_pwm(2, 1600)

Set some yaw

set_rc_channel_pwm(4, 1600)

The camera pwm value is the servo speed

and not the servo position

Set camera tilt to 45º with full speed

set_rc_channel_pwm(8, 1900)

The main doubt lies within the code. Here we gave a certain PWM value to each channel which implies we are setting the PWM value to each thruster. Now suppose, if I want the whole ardusub vehicle to move up/down, If I give the input " Vehicle up/down", all the thrusters which makes the vehicle to move up/down, should receive the PWM(it may be thruster2, thruster 3, thruster5) and these thruster should spin. Is it possible in ardusub using pymavlink. if so, How do I need to change the code?
Looking forward for your reply,

Thanking you,