plane-tracker
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:UAV Tracking Software for CSE 145 Project
**Overview**

This software uses video and GPS data to instruct our UAV aerial tracking platform. By default,
this program will analyze video from the HDMI input to a connected Decklink capture card. GPS
information will be received using a USB-serial connection to any GPS transmitter that
implements the NMEA protocol. Tracker commands are sent via a USB-serial connection to the 
Arduino microcontroller connected to the tracker hardware.

Here is a sample video that shows the CV algorithm detecting the plane:

http://www.youtube.com/watch?v=PJB8deGmM24

And here is a video of the tracker in action using Georeferencing:

https://www.youtube.com/watch?v=pxmqRLSEIO0

Finally this is the paper that my partner Eric Lo and I wrote on our tracking platform:

https://www.dropbox.com/s/3iirlqt6ric5884/CSE145FinalReport.pdf

In addition to live tracking, the software has some additional features. For example, the 
tracker can record the video input, saving the result as a sequence of JPEGs that can later
be encoded into a movie if desired. It is also possible to analyze a video or still image for
debugging purposes. It is also possible to draw a line from the center of the image to the 
plane, to ensure that CV is working properly.

To run this software, first ensure that the serial connections to the GPS receiver and the 
Arduino are established, and that the Decklink capture card is plugged into the computer. Then
run the `tracker` executable from the command line (e.g `./tracker`). A video window should 
appear on the screen mirroring the camera's output. For more information on how to set 
the configuration for the tracker, read the section on _Options_ below, or run 
`./tracker --help`


**Options**

--debug: Enables debug output. This outputs LOTS of information to the terminal window,
         including blobs that were detected, GPS information coming in, and commands that
         are being sent to the Arduino. It is advisable to pipe the output to grep if you want
         specific information.

--extras: Displays the image at each step of visual processing. Note that enabling this option
          could degrade performance. Useful for debugging CV.

--line: Draws a red line from the center of the frame to the plane when the plane is
        detected.

--record: Records the video output to the specified directory. Each frame in the video gets 
          saved as a JPEG image. Because performance requirements may mandate frame-skipping,
          be aware that skipped frames will not be recorded.

--lat: Specifies that latitude of the tracker in GPS degrees.

--lon: Specifies the longitude of the tracker in GPS degrees.

--alt: Specifies the altitude of the tracker in meters.

--gps-port: Specifies the serial port that the GPS receiver is connected to

--arduino-port: Specifies the serial port that the Arduino is connected to

--gps-baud: Specifies the baud rate for the serial connection to the GPS receiver

--arduino-baud: Specifies the baud rate for the serial connection to the arduino

--video: Uses the specified video file for computer vision instead of the Decklink interface.
         Useful for testing purposes. 

--image: Uses the specified image file for computer vision instead of the Decklink interface.
         Useful for testing purposes.

--blind: Do not use computer vision. Use this mode if there is no camera attached or you do not
         have the Decklink drivers installed.

--no-gps: Do not use GPS.

--help: Display a help message.

Architecture
------------

**Vision Components**

*VideoReceiverInterface.cpp*

This component is in charge of getting image data for `FrameAnalyzerActor` to process. It can 
access data from the BlackMagic capture card, or from a video file. 


*FrameAnalyzerActor.cpp*

This actor receives images from the `VideoReceiverInterface` and uses `Vision` to calculate
the location of the plane in the image (if possible). If the plane was detected in the image,
it calculates the necessary pan and tilt values for the gimbal to point to the plane, and sends
that information to the `MultimodalActor`. If the plane could not be detected in the image, 
this informs `MultimodalActor` that the tracker has lost visual contact with the plane. In
addition, this actor is also responsible for sending the frame back to the UI so that it can be
displayed to the user.


*Vision.cpp*

This component is responsible for performing the actual CV operations used to detect the 
plane. It is capable of finding the centroid and size of the plane in an image.


**Georeferencing Components**

*GPSReceiverInterface.cpp*

This component is responsible for downloading GPS data from the plane. Whenever it receives a GPS
packet, this interface uses `Protocol` to parse the packet and sends the plane's GPS 
coordinates to the `GeoReferencingActor`.


*GeoReferencingActor.cpp*

The `GeoReferencingActor` is responsible for receiving GPS data from the `GPSReceiverInterface`
and using `GeoReference` to calculate the necessary pan and tilt to point the tracker towards 
the UAV. The resulting pan and tilt values are sent to the `MultimodalActor` to perform the 
actual pointing. If the GPS position of the plane is unavailable, this actor will inform the 
`MultimodalActor` that the tracker has lost the GPS position.


*GeoReference.cpp*

`GeoReference` is responsible for performing the calculations for determining the pan
and tilt of the gimbal based on the plane's GPS position. It uses the Haversine formula to
calculate the pan.

*Protocol.cpp*

This component implements the NMEA protocol that the GPS uses to send GPS data to the computer.


**Communications Components**

*Messages.cpp*

This component defines containers for the messages that are sent between the various
components in the system. These include the internal messages that are sent between the 
interfaces and the actors, as well as messages that are serialzed to be sent over the serial 
interface to the arduino.


**Operations Components**

*MultimodalActor.cpp*

The MultimodalActor is responsible for receiving the position messages from the 
`GeoReferencingActor` and the `FrameAnalyzerActor` and sending the appropriate commands to 
the arduino. As long as the plane can be visually identified, the multimodal actor will not
forward position commands sent from the `GeoReferencingActor`. If visual identification fails,
the `MultimodalActor` will use `GeoReferencingActor`'s position messages. If both visual and 
GPS identification is impossible, then the `MultiModalActor` will tell the arduino to use
RSSI. 

*tracker.cpp*

This is the main driver for the program. It instantiates all of the actors and components. 
Additionally, it allows the user to view the airplane in a window, and record the flight.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。