Projects *

IROS Papers and Awards

We just got back from presenting a number of papers at IROS, which took place in Madrid. Congratulations to Evan and Carl. Their paper was awarded the Best Paper on Safety, Security, and Rescue Robotics out of over 1200 papers presented at IROS! The papers we presented are:

And below are some videos from these papers that we submitted. Enjoy!



Projects *

Catching A Ball

The Nimbus lab spent some time this fall getting a drone to catch a ball. The three main components we focused on to solve this problem were as follows:

  • Tracking and predicting where the ball will go.
    • This was done by calculating the velocity of the ball in the x,y and z-direction. These velocities and a drag modelled from previous throws were put into the equations of motion, to get an accurate final location for the ball.
  • Getting the drone to move in that direction aggressively.
    • This was done by changing Nimbus AscTecs’ PID controller parameters.
  • Making sure the drone recovers from its aggressive movement safely.
    • This was done by monitoring the drones’ current location and target location. A ROS node would then reset the PID parameters when the distance between the two was within a certain range.

The initial version of our drone used a lightweight wood, known as balsa wood (which you find in your local hobby shops) to protect the drone from the ball. The next version of this drone will be made out of carbon fiber and custom 3D printed lightweight joints.

The first throw the drone is able to catch the ball and hold onto it.

The second throw the drone is slightly off. The drone notices the ball is slipping and tries to recover, however, is not able to.

Media Projects *

Eclipse Flying

The Nimbus Lab spent from early morning until sunset last Monday, Aug 21st doing atmospheric profiling flights to determine the impact of the Eclipse on weather patterns. These were collaborative experiments with Dr. Adam Houston from UNL Earth and Atmospheric Sciences, Sean from NOAA, and Dr. Jamey Jacob from Oklahoma State University as part of our Cloud-Map NSF project.

We performed a series of vertical 0-400ft transects to measure atmospheric properties before, during, and after the eclipse. At the same time Jamey’s team measured wind and other data fixed at 400 feet. Sean regularly launched weather balloons to measure atmospheric properties even higher up and Adam’s team was obtained detailed surface readings. And of course there were a number of other UAVs just collecting images. During these experiments Nimbus collected 223 minutes of data in 13 flights. Special thanks goes out to Ajay who manned the controls for all these flights and Ashraful and Najeeb who were critical parts of the sensor control and ground team. Here are a few more pictures from the event.


Projects *

Cyber-Physical Co-Regulation of UAS

Among our current interests at the NIMBUS lab is creating a dynamic flight simulator, for drones, to be used as a test bed for control software designed for autonomous flight. The simulator is written in MatLab and will be used in the lab to test control algorithms and as well as new control techniques in cyber-physical co-regulation as part of future investigation. With this simulation design tool, we aim to introduce different control methods such as co-regulated variable sampling rate cyber-physical control to the UAVs in the lab, as well as perform pre-flight testing of control algorithms and trajectory planners.


Figure. UAV simulation graphic.

Cyber-physical co-regulation of UAVs becomes important when additional functionality is given to a vehicle to allow it to interact with the environment, which, is a main focus of the NIMBUS lab. As one example of such environmental interaction, we have designed and built a claw which we have attached to a UAV and used in lab demos. The claw consists of a simple worm driven system and is able to grab small objects and relocate them. Computer vision via on board camera has also been integrated into the claw system to locate and track objects. With the addition of this interactive functionality, such as the claw and others, cyber resources in the UAV system may become scarce. In this case deliberation of cyber resources must be approached carefully to maintain the performance of both the flight of the vehicle and the functionality of the additional onboard systems. 


Figure. UAV with claw system attached


Primary Contributers:

Dr. Justin Bradley – UNL Computer Science Faculty/NIMBUS Lab Director

Seth Doebbeling – MS Mechanical Engineering Student

Adam Plowcha, Ajay Shankar – PhD Computer Science Students

Other NIMBUS Lab directors and contributors

Projects *

Evaluating RTK GPS for UAV


Real Time Kinematic (RTK) Global Positioning Systems (GPS) have been around since the late 1990s. RTK GPS offers centimeter level precision versus meter level precision of normal GPS. RTK GPS’ that can reasonably fit on an Unmanned Aerial Vehicle have been available since late 2013, and we decided to explore how ready and powerful they really are.

We explored the following systems. Most require a non-grounded ground plane some provide a ground plane in their kits. All systems require ground station GPS latitude, longitude, and altitude to be configured in the ground station receiver. The RTK GPS system requires two GPS receivers. As a consequence there is a trade off between momentary high precision followed by normal GPS precision when a packet is delayed or lost and reduced average precision (due to reduced accuracy of ground station position) with perfect communication between receivers (wired connection on the vehicle).

We purchased the two most affordable kits, NS-HP and Reach, but as you will see, neither is quite ready to use right out of the box.


Direct replacement of existing GPS receivers with a RTK GPS receiver is not trivial. Additional hardware and software are required to provide basic position estimates. Including additional hardware and software into a system increases the amount of possible failure points and may effect overall system performance such as signal interference.


Various communication paths realized in software were created to facilitate communication between base and rover receivers. Hardware in the communication paths included at most a laptop, paired XBee Pros, base and rover receivers, and an Odroid-xu3/ZyXel router–post processing only.

State machines were created to decode the generated GPS solutions for “real time” position estimate access.

Hardware was added onto an Ascending Technologies Hummingbird to construct a stable platform for the base and rover antennas.

Cables were constructed to facilitate direct connection between receivers while providing a serial output path as well.


After this was completed, generated position estimates for a stationary Ascending Technologies Hummingbird with propellers rotating was not centimeter level  and required the router to access the solution. A cable was constructed as described above to replace the onboard GPS unit, but the Hummingbird did not recognize the data being transferred. Full integration with the Ascending Technologies Hummingbird was not achieved.


Within the bullseye are position estimates for a stationary Hummingbird with propellers rotating. The outer ring has a radius of 2 meters. The dots leaving the bullseye in the upper left corner are position estimates for when the vehicle was in flight.


We now provide more details about these systems.

NS-HP ($394):

NavSpark manufactures the NS-HP with separate modules for 1 Hz, 5 Hz, and 10 Hz update rates. The NS-HP is 40 × 38 mm and weighs 6 g.  A windows application, GNSS Viewer, is available to verify receiver operation. Requirements to operate:

  • 7 satellites with signal level over 38 dB/Hz
  • soldering and additional cables to access the generated solution
  • electrical characteristics of UART are 70mA @ 3.3v and is not tolerant to higher voltage levels
  • 57600 baud rate
  • careful handling of rover kit antenna


REACH ($570):

Emlid manufactures the Reach with 1 Hz, 5 Hz, and 10 Hz adjustable update rates (gps_glonass_5hz is the only update rate fully tested). The Reach is 45.5 × 27 mm and weighs 14 g. A wiki is provided for setup and a community forum is available. ReachView is Emlid’s application to verify receiver operation.

Requirements to operate:

  • 5 satellites with signal level over 45 dB/Hz — need non-grounded 100 mm diameter ground planes to achieve this signal level
  • an IP address generator, normal access — an internet connection to update firmware
  • logic levels of UARTs are 3.3v with 5v tolerance
  • supports most standard baud rates
  • fine tuning configuration settings


SMARTNAV ($932):

Drotek manufactures the SMARTNAV with a 10 Hz update rate. The SMARTNAV is 110 × 110 mm and weighs 200 g. A user guide is provided for setup. These receivers are designed to be used with a Dropix or pixhawk. RTKLIB is the application to verify receiver operation though the more user friendly u-center from u-Blox may be used as well.

Requirements to operate:

  • 5 satellites with signal level over 45 dB/Hz —  ground planes are provided to achieve this signal level
  • logic levels of UARTs are 3.3v with 5v tolerance
  • supports most standard baud rates


Piksi ($995):

Swiftnav manufactures the Piksi with a 10 Hz update rate. The Piksi is 53 × 53 mm and weighs 32 g. A combined wiki and community forum is provided for setup. Virtual machine use is not recommended. Utilizes a Swift Navigation Binary Protocol. Piksi Console is the application to verify receiver operation. A simulation mode is available for indoor operations prior to testing outdoors.

Requirements to operate:

  • 5 satellites with signal level over 33 dB/Hz —  ground planes are provided to achieve this signal level
  • protocol conversion for compatibility with existing systems
  • logic levels of UARTs are 3.3v with 5.5v tolerance
  • supports most standard baud rates


NV08C-RTK ($1100 > $? > $1500):

NVS Technologies AG manufactures the NV08C-RTK with 1 Hz, 2 Hz, 5 Hz, and 10 Hz adjustable update rates.The NV08C-RTK is 71 × 46 × 8.1 mm and weighs 21 g. No user guide is available.

Requirements to operate:

  • 4 satellites with signal level over 33 dB/Hz
  • logic levels of UARTs are 3.3v with 5.5v tolerance
  • supports baud rates from 4800 to 460800


Precis-BX305 ($1999):

Tersus manufactures the Precis-BX305 with a 20 Hz update rate.The Precis-BX305 is 130 × 60 × 18 mm and weighs 48 g. A user guide is available. Tersus GNSS Center is the application used to verify results.

Requirements to operate:

  • 5 satellites with signal level over 33 dB/Hz
  • logic levels of UARTs are 3.3v with 5v tolerance
  • supports baud rates up to115200


Projects *

Summer 2016 Field Experiments

We conducted a whole lot of field experiments over the summer. First, we did two prescribed burns and a number of tests of the systems (without igniting fires). Here are a couple of videos to check out:

We also conducted a experiments at the University of Oklahoma as part of the Cloud-Map project we are involved with which aims to improve atmospheric measurements through the use of UASs. Here are a few pictures from these experiments, which involved the University of Oklahoma, Oklahoma State, University of Kentucky, and the University of  Nebraska. We flew over 50 flights, including a number where there were multiple UASs from each of the teams flying.

We also conducted experiments with our collaborator Dr. Amy Burgin from the University of Kansas. We were evaluating our water sampling and sensing UAV against traditional hand sampling techniques and also fixed sensor arrays. We did tests in a natural pond and also in a number of controlled tanks where we could adjust the temperature and conductivity gradient in the water to determine how much each of these techniques causes mixing. We collected dozens of water samples and sensor readings from hundreds of control points over the course of 70+ flights.

We will be continuing work on all of these projects, so stay tuned for more news from field experiments this fall.

Projects * Uncategorized

A new perspective on the relationship between Drones and Fire

At the NIMBUS Lab we have been working for several years now on developing safe micro-UAS based systems to not just observe but also to actuate close to the environment. The latest chapter in this effort consists of a system to support control fire burns from the air.

UNL News just published a short story on it.

You can read more about the need for such fires and new tools at our brief tech report (draft version).

And you can see them in action in this short video.

Equipment * Misc * Procedures * Projects * Uncategorized

Using rosbag_pandas to Analyze rosbag Files with Python

ROS offers great tools to record execution traces using the rosbag command line tool. However, after the data is recorded, quickly extracting the data to perform analysis and produce graphics may be an issue to those unfamiliar with the process.  ROS provides a Python and C++ API to read and write data from the bags (, but the data returned by the examples in the API are not in a format that is easy to quickly analyze.

Often when working in the Nimbus lab, we want to quickly view a graph of data from a bag.  We also run more complex analysis on files that require timestamped information from multiple topics.  This analysis is done in Python, Matlab, and a myriad of other languages and tools.  This makes getting the data from the bag file extremely important.   Pandas ( is  a wonderful Python library that provides data structures and tools for data,  processing, preparation, and analysis. Also since pandas has methods  to plot and export its data structures, getting the bag information into pandas will make plotting and exporting trivial.  Rosbag_pandas ( is  a python package that allows users to import data recorded from a rosbag into a pandas Dataframe that is indexed by the time the message was recorded.


To use rosbag_pandas you must first install numpy, pandas, and of course ROS.  After the dependencies are installed you can install rosbag_pandas on your system using your favorite method(e.g. pip install rosbag_pandas, easy_install, or running the script).  After installing the package, three tools will be available: rosbag_pandas,, and


Bag to csv is a python script that can be used to extract data from a bag file and place it in a .csv file.   The script has a number of parameters that can be used to change what is included in the file.    The include and exclude arguments can be used to only store data from certain topics.  By default all topics are included and no topics are excluded.  The program will select the topics by first identifying all of the include topics and then removing the excluded topics from the set.  These arguments can be regular expressions or a list of topic name strings.  The script can also fill missing values using the –fill flag.  This will forward and backward fill data points so that there is no missing values in the any row in the csv file.   Finally, by default the script ignores the header fields in a message. This behavior can be turned off by passing the  –include-header flag to the script. is a tool that allows the quick graphing of fields on a ros topic.  It has two required arguments “-b –bag” and “-s –series.”  The bag is the bag file to use and the series argument is the data fields in the bag to graph.   As a quick example if we want a graph of the height of a UAV we can issue the command: ` -b bag.bag -s /a/subject_pose/translation/z` and get the following result.


Additionally, the script can handle graphing more than one topic and field at a time.  The image below was creating by running the script with the arguments:  ` -b bag.bag -s /a/subject_pose/translation/z /a/subject_pose/translation.x`

The graphs of multiple series can also be placed on a single axis by including the `-c` flag:  ` -b bag.bag -s /a/subject_pose/translation/z  /a/subject_pose/translation.x -c`



Getting a Dataframe

The final usage of the package using it to get a pandas Dataframe object populated with data from the  bag file.  This is done by importing rosbag_pandas and calling the method bag_to_dataframe.  This method takes as arguments the file and topics to include and exclude in the returned Dataframe. In the frame, there is a column for each field in the messages on the topics parsed from the bag. Each time a message is received in the bag file,  a row is added to the dataframe that contains values for that topic, but NaN values for the rest of the columns.  This opens the data in a bag file up to all of the tools that are available in pandas and other python libraries. For example rosbag_pandas lets us print the min, and max values on each of the topic’s fields with 4 lines of code:

import rosbag_pandas

df = rosbag_pandas.bag_to_dataframe(‘bag.bag’)

for c in df.columns:

print c, df[c].min(),  df[c].max()

This barely scratches the surface of what can be done with a Dataframe full of data from ROS. Hopefully it gives you an idea of what can be done and how to install and use this simple package.