Autonomous corridor flight of a UAVDescription: Autonomous corridor flight of a UAV using the Kinect sensor.
Submitted By: Chair of Automation Technology at the Chemnitz University of Technology
Keywords: UAV, quadrotor, kinect
Autonomous corridor following is performed using the Kinect sensor, the point cloud library (PCL) and ROS in combination with our own velocity, position and altitude controllers. All processing is done onboard on a Atom processor board, no further external sensors are used.
The 3D point cloud from the Kinect sensor is pre-processed, downsampled and searched for planes. The position and orientation of the UAV inside the corridor can be estimated from the plane parameters. A high-level controller then generates motion commands for the lower level controllers that keep the UAV on a trajectory in the middle of the corridor.
Altitude control is realized separately using a SRF 10 ultrasonic rangefinder. The current velocity over ground is determined using an optical flow sensor.
Obstacle avoidance is also included but the algorithm is still under development and partially untested.
How to Reproduce Your Entry
Code to Checkout
SVN Repository https://borstel.etit.tu-chemnitz.de:8080/svn/tuc-ros-pkg/
The following ROS stacks and packages are required:
vision_opencv (cv_bridge, opencv2)
Build the package
$ svn co https://borstel.etit.tu-chemnitz.de:8080/svn/tuc-ros-pkg/ $ cd tuc-ros-pkg/trunk/stacks/tuc_pelican $ export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:"`pwd`" $ rosmake
Run the corridor extraction
First start the kinect_node:
$ rosrun kinect_camera kinect_node
And finally the corridor extraction node:
$ rosrun kinect_utils corridor_extraction
The corridor_extraction node subscribes to the point cloud topic (/camera/depth/points2) and the depth image topic (/camera/depth/image_raw) which are both published by the kinect_node.
It publishes the following topics:
/kinectPose: The estimated position and orientation of the kinect sensor within the corridor.
/flightCommand: The calculated motion vector. The raw vector does not consider obstacles.
/wall_marker: The marker of the estimated walls for visualization with rviz.
/flightCommand_marker: The marker of the motion vector for visualization with rviz.
/unmatchedPoints: Points which are not contained in one of the wall planes and thus may be part of possible obstacles.