70
Embedded Linux applications for autonomous UAVs Flying Penguins

Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Embedded  Linux  applications  for  autonomous  UAVs

Flying Penguins

Page 2: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Clay McCluregithub.com/claymation

Page 3: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap

UAV MAV Link mavros Your

App

ROS

Linux

Page 4: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 5: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

autopilot

Page 6: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

autopilots

Page 7: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

autopilots

Page 8: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

RC input motor mixing stabilization

telemetry missions failsafes

Page 9: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 10: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

≠AUTO PILOT

AUTO NOMOUS

Page 11: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

where to gohow to get therewhat to do next

“system finds its own goal positions”

Page 12: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

SO MANY

ALGORITHMS,

SO LITTLE

COMPUTERhttp://ra3ndy.deviantart.com/art/Sad-Panda-69204875

Page 13: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

+

Page 14: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Autopilot runs on Linux

Page 15: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Autopilot talks to Linux

Page 16: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

ODROID-XU3 Lite

• Samsung Exynos5422 octa core

• 4x Cortex™-A15 2.0GHz

• 4x Cortex™-A7 1.4GHz

• 2 GB RAM

• 32+ GB flash

• 4x USB 2.0 + 1x USB 3.0

Page 17: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV Your App

Linux

?

Page 18: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV MAV Link

Your App

Linux

Page 19: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

MAVLink is the HTTP of drones

Page 20: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

(it’s also the libcurl)

Page 21: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

MAVLink

Page 22: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

status configuration

position / attitude setpoints missions

Page 23: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV MAV Link

Your App

Linux

?

Page 24: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV MAV Link

Your App

Linux

Middle ware

Page 25: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

MiddlewareDroneAPI

• Python

• Go to Kevin Hester’s talk tomorrow

mavros

• Python, C++, Lisp (really)

• Access to a wealth of robotics research and tools

Page 26: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV MAV Link mavros Your

App

Linux

?

Page 27: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap (so far)

UAV MAV Link mavros Your

App

ROS

Linux

Page 28: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

ROS Crash

Course

Page 29: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Robot Operating System

“ROS is an open-source, meta-operating system for

your robot.”

Page 30: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

“ROS is an open-source, meta-operating system for

your robot.”

Robot Operating System

Page 31: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 32: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Nodes

NodeNodeNode

NodeNodeNode

NodeNodeNode

Page 33: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Topics

NodeNodeNode

Node

Topic

Page 34: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Services

Node

Node

Page 35: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

but wait, that’s not all…

parameters dynamic reconfig coordinate frames transformations record/playback visualization logging

Page 36: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap

UAV MAV Link mavros Your

App

ROS

Linux

Page 37: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

mavros is the Babel fish of drones

Page 38: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Topics

/mavros/state /mavros/imu/data /mavros/global_position/global /mavros/local_position/local /mavros/setpoint_position/local_position /mavros/setpoint_velocity/cmd_vel

Page 39: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Services

/mavros/cmd/arming /mavros/cmd/land /mavros/cmd/takeoff /mavros/set_mode /mavros/set_stream_rate

Page 40: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

• FCU

• MAVLink

• mavros

• ROS

• Application nodes

PX4 + ROS

Credit: Kabir Mohammed

Page 41: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Roadmap

UAV MAV Link mavros Your

App

ROS

Linux

Page 42: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

YAPLYet Another Precision Lander

Page 43: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Event-driven programming• “Don’t call me, I’ll call you”

• Your application code responds to events

• Message arrival

• “my position is (x, y, z)”

• Timer expiry

• “it’s time to run the control loop”

Page 44: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Nodes• Tracker

• Processes video stream, looks for landing pad

• Publishes target position/velocity messages

• Commander

• Subscribes to vehicle state and position messages

• Subscribes to target tracker messages

• Controls vehicle velocity

Page 45: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 46: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 47: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

class  TrackerNode(object):  !        def  __init__(self):                  rospy.init_node("tracker")  !                use_sim  =  rospy.get_param("~use_sim",  False)                  camera_matrix  =  rospy.get_param("~camera_matrix")  !                #  ...  !                self.image_publisher  =  \                          rospy.Publisher("tracker/image",                                  sensor_msgs.msg.Image,  queue_size=1)  !                self.track_publisher  =  \                          rospy.Publisher("tracker/track",                                  Track,  queue_size=1)

Page 48: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

class  TrackerNode(object):  !        def  __init__(self):                  rospy.init_node("tracker")  !                use_sim  =  rospy.get_param("~use_sim",  False)                  camera_matrix  =  rospy.get_param("~camera_matrix")  !                #  ...  !                self.image_publisher  =  \                          rospy.Publisher("tracker/image",                                  sensor_msgs.msg.Image,  queue_size=1)  !                self.track_publisher  =  \                          rospy.Publisher("tracker/track",                                  Track,  queue_size=1)

Page 49: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

$  cat  msg/Track.msg    #  Whether  we're  tracking  an  object  std_msgs/Bool  is_tracking  !#  Relative  position  and  velocity  of  the  tracked  object  geometry_msgs/Vector3  position  geometry_msgs/Vector3  velocity  

Page 50: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

       def  publish_track(self,  position,  velocity):                  msg  =  TrackStamped()                  msg.track.is_tracking.data  =  self.is_tracking  !                if  self.is_tracking:                          msg.track.position.x  =  position[0]                          msg.track.position.y  =  position[1]                          msg.track.position.z  =  position[2]                          msg.track.velocity.x  =  velocity[0]                          msg.track.velocity.y  =  velocity[1]                          msg.track.velocity.z  =  velocity[2]  !                self.track_publisher.publish(msg)  

Page 51: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

       def  publish_image(self,  image):                  msg  =  self.image_bridge.cv2_to_imgmsg(image,  "bgr8")                  self.image_publisher.publish(msg)  

Page 52: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

simulation

Page 53: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

HITL• Hardware in the loop

• Flight software runs on flight hardware

• Simulated sensor and control inputs

Page 54: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

SITL• Software in the loop

• Flight software runs on (Linux) desktop

• Simulated sensor and control inputs and HAL

Page 55: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 56: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 57: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 58: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

–Johnny Appleseed

“Type a quote here.”

“In theory there is no difference between theory and practice.

In practice there is.” !

~ Yogi Berra

Page 59: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Practical Considerations

Page 60: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 61: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Connections• UART recommended

• Requires 6-pin DF-13, possibly a level shifter

• USB works for me

• Use hot glue gun

• sudo  apt-­‐get  remove  modemmanager

Page 62: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Power5V 5A UBEC

!ODROID

+ USB camera

+ WiFi

+ 3S LiPo

= 5 hours

Page 63: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Launch files• ROS feature that makes it easy to start and manage

multiple nodes and their parameters

• roslaunch  lander  lander.launch

Page 64: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Startup• Use ubuntu’s upstart to launch ROS + mavros +

application nodes

• rosrun  robot_upstart  install  \        lander/launch/lander.launch

Page 65: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Telemetry• MAVLink + 3DR radio

• WiFi

• Ad-Hoc mode (man  wireless)

• Need high-gain antenna and a tracker (helper)

• sudo  apt-­‐get  remove  wpasupplicant  

• GSM?

Page 66: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

Coordinate Frames• Global / Local

• NED

• ENU

• Body-fixed

• tf library

Page 67: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

In closing…

Page 68: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7
Page 69: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

What will you make?

Page 70: Flying Penguins copy - Dronecode › _media › elc05.flying_penguins... · 2015-04-13 · ODROID-XU3 Lite • Samsung Exynos5422 octa core • 4x Cortex™-A15 2.0GHz • 4x Cortex™-A7

For more information…

ros.org ardupilot.com pixhawk.org/start pixhawk.ethz.ch/mavlink github.com/mavlink/mavros github.com/claymation/lander