{"id":23,"date":"2015-09-16T23:52:42","date_gmt":"2015-09-17T03:52:42","guid":{"rendered":"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/?page_id=23"},"modified":"2016-05-06T17:35:37","modified_gmt":"2016-05-06T21:35:37","slug":"system-design","status":"publish","type":"page","link":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/system-design\/","title":{"rendered":"System Design"},"content":{"rendered":"<h1><strong>System Requirements<\/strong><\/h1>\n<h3><span style=\"font-weight: 400\">Mandatory Functional Requirements<\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400\"><b>MF1:<\/b><span style=\"font-weight: 400\"> Locate Oil\/Gas wellhead infrastructure with known heading in 25m<\/span><span style=\"font-weight: 400\">2<\/span><span style=\"font-weight: 400\"> area<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MF2:<\/b><span style=\"font-weight: 400\"> Autonomously maneuver to wellhead within one hour<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MF3:<\/b><span style=\"font-weight: 400\"> Positively ID as correct wellhead with 90% confidence<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MF4:<\/b><span style=\"font-weight: 400\"> Maintain hover position over dock within +\/- 1m of dock position continuously<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MF5:<\/b><span style=\"font-weight: 400\"> Rigidly dock in five degrees of freedom<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MF6:<\/b><span style=\"font-weight: 400\"> Provide status feedback to user of current state at 0.1Hz<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">Desired Functional Requirements:<\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400\"><b>DF1:<\/b><span style=\"font-weight: 400\"> Locate Oil\/Gas wellhead infrastructure in low visibility with unknown heading in 25m<\/span><span style=\"font-weight: 400\">2<\/span><span style=\"font-weight: 400\"> area<\/span><\/li>\n<li style=\"font-weight: 400\"><b>DF2:<\/b><span style=\"font-weight: 400\"> Positively ID as correct wellhead from visual object recognition with 90% confidence<\/span><\/li>\n<li style=\"font-weight: 400\"><b>DF3:<\/b><span style=\"font-weight: 400\"> Align with dock located at known radius but unknown angle from wellhead within +\/- 1m<\/span><\/li>\n<li style=\"font-weight: 400\"><b>DF4: <\/b><span style=\"font-weight: 400\">Detect obstacles<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">Mandatory Non-Functional Requirements:<\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400\"><b>MNF1:<\/b><span style=\"font-weight: 400\"> Provides emergency stop for system with less than one second lag<\/span><\/li>\n<li style=\"font-weight: 400\"><b>MNF2:<\/b><span style=\"font-weight: 400\"> Operable by a single person<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-weight: 400\">Desired Non-Functional Requirements:<\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400\"><b>DNF1:<\/b><span style=\"font-weight: 400\"> Reduce operator cost by at least one-half<\/span><\/li>\n<li style=\"font-weight: 400\"><b>DNF2:<\/b><span style=\"font-weight: 400\"> Simulate low-visibility: Unable to get visual feed beyond 3m from camera\/quadrotor<\/span><\/li>\n<\/ul>\n<h1><strong>Functional Architecture<br \/>\n<\/strong><\/h1>\n<p><span style=\"font-weight: 400\">The figure below shows the reduced functional architecture for the team\u2019s project. The functional architecture is broken down into three major sub-functions: \u201cLocate and Identify Desired Wellhead\u201d, \u201cMove to Pre-Docking Position\u201d, and \u201cDock on Wellhead\u201d.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-344 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_280.png\" alt=\"functional_architecture\" width=\"579\" height=\"292\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_280.png 579w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_280-300x151.png 300w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/p>\n<p style=\"text-align: center\"><strong>Simplified Functional Architecture<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">The next figure shows an expanded version of the \u201cLocate and Identify Desired Wellhead\u201d sub-function.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-233 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_062.png\" alt=\"Selection_062\" width=\"677\" height=\"182\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_062.png 677w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_062-300x81.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p style=\"text-align: center\"><b>Locate and Identify Desired Wellhead\u00a0Sub-function<\/b><\/p>\n<p><span style=\"font-weight: 400\">The above figure clearly shows the flow of information into and throughout the sub-function. The main inputs to the system are: \u00a0\u201cCamera Readings, IMU Readings, and Height Readings\u201d, \u201cGeneral Direction of Wellhead\u201d, and \u201cWellhead Description\u201d. Internally information is passed between each block in the fashion of: sense, plan, and act. This block is executed on a loop until the robot has identified the correct wellhead. Once it has identified the wellhead, the system changes to the \u201cMove to Pre-Docking Position\u201d state as shown in the figure below.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-234 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_063.png\" alt=\"Selection_063\" width=\"675\" height=\"188\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_063.png 675w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_063-300x84.png 300w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><\/p>\n<p style=\"text-align: center\"><b>Move to Pre-Docking Position\u00a0Sub-function<\/b><\/p>\n<p><span style=\"font-weight: 400\">In figure above, the flow of information for the \u201cMove to Pre-Docking Position\u201d sub-function can be clearly seen. The inputs to this sub-function are: \u201cCamera Readings, IMU Readings, and Height Readings\u201d and \u201cTag Information\u201d. This tag information is for the dock. The internal flow of information is the same loop as the \u201cLocate and Identify Desired Wellhead\u201d sub-function, except for the stopping criteria. The stopping criteria is \u201cin pre-docking position\u201d which is determined by mandatory functional requirement 4: Maintain hover position over dock within +\/- 1m of dock position continuously. Once the robot has reached the stopping criteria it moves into the \u201cDock on Wellhead\u201d state as shown in the figure below.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-235 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_064.png\" alt=\"Selection_064\" width=\"492\" height=\"185\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_064.png 492w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_064-300x113.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/p>\n<p style=\"text-align: center\"><b>Docking\u00a0Sub-function<\/b><\/p>\n<p><span style=\"font-weight: 400\">The figure, above, shows the final sub-function and state of the system, docking. Once the robot has reached the pre-docking position it will make its docking descent and complete its task of docking. The main inputs to the system are: \u201cCamera Readings, IMU Readings, and Height Readings\u201d and \u201cTag Information\u201d. In our final implementation, the APRIL tag was used to simulate the wellhead detection.<\/span><\/p>\n<h1><strong>Cyberphysical Architecture<\/strong><\/h1>\n<p><span style=\"font-weight: 400\">The cyber-physical architecture, shown in Figure 10, has been broken down into five main parts: Infrastructures, sensors, single board computer, motor control &amp; UAV, and user interface. We have organized our cyber-physical architecture based on how the systems are physically organized and interact.<\/span><\/p>\n<p><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-345\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2.png\" alt=\"Cyberphysical Arch\" width=\"1089\" height=\"633\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2.png 1089w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2-300x174.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2-768x446.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Cyberphysical-Arch-2-1024x595.png 1024w\" sizes=\"auto, (max-width: 1089px) 100vw, 1089px\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>Cyber-physical Architecture<\/b><\/p>\n<p><span style=\"font-weight: 400\">The infrastructure comprises of the APRIL tag and the docking mechanism. The APRIL tag consists of features that can be easily detected using image processing. These features are then used to estimate the pose of the robot with respect to the tag. Docking mechanism is designed to constrain the robot in 5 DOF.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The sensors consists of the camera, IMU, and height and optical-flow sensor. The downward facing camera allows the drone to view the dock and ground april tags. The IMU is used for the drones state-estimation. A sonar height and an optical flow sensor is also used for the state estimation, localization and height stabilization.<\/span><\/p>\n<p><span style=\"font-weight: 400\">For the single board computer we have an underlying software architecture that implement the \u2018Toaster-Wedding Cake\u2019 model. The \u2018Toaster-Wedding Cake\u2019 model constitutes the flow of data and information in a sense-plan-act format. The toaster is the vertical blocks of perception and world mapping. The systems perceives the environment through the sensors, then develops a model of that environment. The wedding cake is the flow of data through the high level global plan to the low level local planning. This planning structure dictates the actuation the system will have on the environment. <\/span><\/p>\n<p><span style=\"font-weight: 400\">The microcontroller is the hardware running the low level controller and is a part of the UAV. The microcontroller and UAV sections are broken into two parts. The AR.Drone2 is the drone we used for testing of high level searching algorithms and exists as a backup if Iris+ cannot perform the necessary tasks. The high level software will be run on the single-board computer with information being passed to it from the wireless communication and low level microcontroller. <\/span><\/p>\n<h1><strong>System Design Descriptions<\/strong><\/h1>\n<p><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/System-Description.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-127\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/System-Description.jpg\" alt=\"System Description\" width=\"940\" height=\"546\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/System-Description.jpg 940w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/System-Description-300x174.jpg 300w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><\/a><\/p>\n<p>The full version of our system is shown below live\u00a0showcasing the quadrotor and the dock.<\/p>\n<p><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Final-system.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-363\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Final-system.png\" alt=\"Final system\" width=\"752\" height=\"738\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Final-system.png 752w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Final-system-300x294.png 300w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><\/a><\/p>\n<p>The figure above is a graphical depiction\u00a0of our\u00a0project. The quadrotor searches for the wellhead and identifies it by processing the images from the on-board camera. Then the quadrotor moves to the pre-docking position and docks to the docking mechanism.<\/p>\n<p>The figure below shows the hardware system on the quadrotor.<\/p>\n<p style=\"text-align: center\">\u00a0<a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/electrical-hardware.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-362\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/electrical-hardware.png\" alt=\"electrical hardware\" width=\"772\" height=\"725\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/electrical-hardware.png 772w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/electrical-hardware-300x282.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/electrical-hardware-768x721.png 768w\" sizes=\"auto, (max-width: 772px) 100vw, 772px\" \/><\/a><\/p>\n<h1><span style=\"font-weight: 400\">Infrastructure Subsystem<\/span><\/h1>\n<p style=\"text-align: center\"><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_281.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-346\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_281.png\" alt=\"Selection_281\" width=\"270\" height=\"122\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>Infrastructure<\/b><\/p>\n<p><span style=\"font-weight: 400\">Landing a quadrotor at desired a location is a hard problem because of the turbulence in the airflow of the thrusters when the quadrotor is close to the ground. Hence, one of main design criterion was to be able to tolerate large variance in pose at which the quadrotor can approach the dock. To meet this requirement for the docking mechanism, we are using four cones to funnel the quadrotor down to the desired location, as shown in the figure above. Using this strategy we can tolerate larger tracking errors in our control algorithm during landing. We will be manufacturing a mock-up of the wellhead infrastructure in the next semester. The details of the tag are covered in the perception subsystem.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Sensor Subsystem<\/span><\/h2>\n<p><span style=\"font-weight: 400\">The table below shows the description of the components of the sensor subsystem, and the figure below it shows the components of the sensor subsystem mounted on the Iris+.<\/span><\/p>\n<p style=\"text-align: center\"><b>Sensor Subsystem Description<\/b><\/p>\n<table style=\"height: 714px\" width=\"694\">\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">Sensor<\/span><\/td>\n<td><span style=\"font-weight: 400\">Sony Playstation Eye<\/span><\/td>\n<td><span style=\"font-weight: 400\">PIXHAWK <\/span><\/td>\n<td><span style=\"font-weight: 400\">PX4FLOW KIT<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Function<\/span><\/td>\n<td><span style=\"font-weight: 400\">Downward camera whose feed is used to detect the APRIL Tags<\/span><\/td>\n<td><span style=\"font-weight: 400\">Flight controller to run the attitude control loop of the quadrotor<\/span><\/td>\n<td><span style=\"font-weight: 400\">Sensor to provide visual odometry estimates<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Features<\/span><\/td>\n<td><span style=\"font-weight: 400\">Supports a framerate of 120hz at 320&#215;240 resolution. <\/span><\/td>\n<td><span style=\"font-weight: 400\">ST Micro L3GD20 3-axis 16-bit gyroscope<\/span><\/p>\n<p><span style=\"font-weight: 400\">ST Micro LSM303D 3-axis 14-bit accelerometer \/ magnetometer<\/span><\/p>\n<p><span style=\"font-weight: 400\">Invensense MPU 6000 3-axis accelerometer\/gyroscope<\/span><\/p>\n<p><span style=\"font-weight: 400\">MEAS MS5611 barometer<\/span><\/td>\n<td><span style=\"font-weight: 400\">PX4FLOW V1.3.1 optical flow sensor smart camera compatible with PX4 PIXHAWK flight controller. Used to obtain visual odometry updates<\/span><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Image<\/span><\/td>\n<td><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_287.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-347\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_287.png\" alt=\"Selection_287\" width=\"128\" height=\"124\" \/><\/a><\/p>\n<p><i><span style=\"font-weight: 400\">source: http:\/\/amazon.com<\/span><\/i><\/td>\n<td><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_288.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-348 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_288.png\" alt=\"Selection_288\" width=\"111\" height=\"111\" \/><\/a><\/p>\n<p><i><span style=\"font-weight: 400\">source: https:\/\/pixhawk.org<\/span><\/i><\/td>\n<td><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_289.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-349 aligncenter\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_289.png\" alt=\"Selection_289\" width=\"116\" height=\"71\" \/><\/a><\/p>\n<p><i><span style=\"font-weight: 400\">source: https:\/\/pixhawk.org<\/span><\/i><\/td>\n<td>&nbsp;<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-351\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_283.png\" alt=\"Selection_283\" width=\"161\" height=\"364\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_283.png 161w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_283-133x300.png 133w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/p>\n<p style=\"text-align: center\"><b>Sensors<\/b><\/p>\n<h2><span style=\"font-weight: 400\">World Modeling Subsystem<\/span><\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_284.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-352\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_284.png\" alt=\"Selection_284\" width=\"214\" height=\"202\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>World Modeling<\/b><\/p>\n<p><span style=\"font-weight: 400\">As shown in the figure above, the world modelling subsystem consists of the following three nodes:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Pose Estimation: This node will estimate the pose of the quadrotor in the world frame. <\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Wellhead Detection: This node will estimate the position of the wellhead in the quadrotor frame.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Obstacle Avoidance: This node will update the occupancy grid with the obstacles, once they are detected.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">We did not focus on implementing these systems during the fall semester, however, we have experimented with some algorithms that will help us implement this system. The following are the algorithms that we explored:<\/span><\/p>\n<h3><span style=\"font-weight: 400\">APRIL tag detection<\/span><\/h3>\n<p><span style=\"font-weight: 400\">We used a library (<a href=\"http:\/\/people.csail.mit.edu\/kaess\/apriltags\/\">http:\/\/people.csail.mit.edu\/kaess\/apriltags\/<\/a>) by Mike Kaess, written in C++ that detects APRIL tags and estimates the pose of the robot. We can use this to detect the wellhead and the docking mechanism.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The pose estimates from the april tag are given as the april tag frame with respect to the camera frame. This causes the frame\u2019s coordinates to change as the camera frame rolls and pitches with the movement of the quadrotor. In order to remedy this, we inverted the frame in order to get the quadrotor in the april tag frame. This allowed us to get a frame that is fixed to the april tag and does not shift with rotation. This data in practice was found to be noisy. In order to provide better data, we implemented RANSAC in order to filter out the noisy data.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Lucas-Kanade based optical flow<\/span><\/h3>\n<p><span style=\"font-weight: 400\">We can use this algorithm to estimate the velocity of the quadrotor using the camera feed. Scale estimation is one of the major problems with this algorithms. We are using the PX4Flow sensor that implements this algorithm and estimates the scale using an integrated ultrasonic sensor which measures the distance to the ground. After consulting last year\u2019s MRSD teams, we are confident that this solution works.<\/span><\/p>\n<h3>Mapping Subsystem<\/h3>\n<p><span style=\"font-weight: 400\">RTAB-Map (<a href=\"http:\/\/introlab.github.io\/rtabmap\/\">http:\/\/introlab.github.io\/rtabmap\/<\/a>)\u00a0is graph and node based system that uses SIFT features in order to find points of detection. It uses structured light in order to improve the performance of the stereo information. It prunes the graph based on a powerful TORO graph optimization technique in order to reduce computation. The algorithm uses a bag-of-words technique in order to detect loop closures.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Planning Subsystem<\/span><\/h2>\n<p style=\"text-align: center\"><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_285.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-353\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_285.png\" alt=\"Selection_285\" width=\"398\" height=\"131\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_285.png 398w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_285-300x99.png 300w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>Local Planning<\/b><\/p>\n<p><span style=\"font-weight: 400\">As shown in the figure above, we are using a 3 layered architecture for the planning. Each layer acts like a state machine for the layer below it. For example, the global planning starts with \u201cSearch For Wellhead\u201d, on finding the wellhead, it transitions to the \u201cMove To Pre-Docking Position\u201d. On reaching pre-docking position, it transitions to the \u201cAttempt Docking\u201d state. Similarly, \u201cSearch For Wellhead\u201d is a state machine that uses \u201cTake off\u201d and \u201cHover in Plane\u201d states. For this semester we have implemented the entire local planning and hence, most of tactical planning on the AR.Drone. We demonstrated this functionality in FVE by doing a lawn mower search using the AR.Drone. The details of this are covered in the next section.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Local planner consists of the proportional-derivative position controller which was implemented in C++. We implemented the global and tactical planning nodes in python. This enabled us to the test the higher level code without recompiling. Hence, it decreased the time we took to develop and test the software once the local planner was implemented and tested. We leveraged the ROS Parameter server to serve as a \u201cblackboard\u201d of shared state variables such as controller gains, setpoints, and event flags which enable us to easily script behaviors for the entire system from nodes written in Python instead of relying entirely on hard-coded C++ behaviors. Using these setpoint parameters, we were able to script various movement patterns and conditional behaviors, including manual control of the sequence start time from the hand-held controller as well as automatic landing after completing a search sequence.<\/span><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_286.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-354\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_286.png\" alt=\"Selection_286\" width=\"413\" height=\"196\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_286.png 413w, https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-content\/uploads\/sites\/4\/2015\/09\/Selection_286-300x142.png 300w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a><\/p>\n<p style=\"text-align: center\"><b>Hardware Subsystem<\/b><\/p>\n<h3><span style=\"font-weight: 400\">Microcontroller and UAV Subsystem<\/span><\/h3>\n<p><span style=\"font-weight: 400\">The figure above shows the components of hardware subsystem. The AR.Drone is reliable quadrotor system that we obtain from the MRSD storage at no cost to us. The AR.Drone acted as our initial test bed to run our high level search algorithms and code. The AR.Drone is also our fall back and risk mitigations if the Iris+ drone cannot perform our desired tasks. The drone does not require any extra hardware and is controlled via wifi from a host computer. It has a forward facing and downward facing cameras, and the downward facing camera doubles as an optical flow sensor. <\/span><\/p>\n<p><span style=\"font-weight: 400\">The Iris+ drone is a commercially bought quadrotor that we are modifying to with sensors and a SBC. The Iris+ drone\u2019s motors\u2019 low level controls are commanded via Pixhawk, which also has a compilation of various sensors, such as 9 axis IMU, and barometers. It also handles our communication to the RC controller. The SBC will be communicating to the Pixhawk via UART to control the drone\u2019s movements. <\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>System Requirements Mandatory Functional Requirements MF1: Locate Oil\/Gas wellhead infrastructure with known heading in 25m2 area MF2: Autonomously maneuver to wellhead within one hour MF3: Positively ID as correct wellhead with 90% confidence MF4: Maintain hover position over dock within +\/- 1m of dock position continuously MF5: Rigidly dock in five degrees of freedom MF6:<br \/><a class=\"moretag\" href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/system-design\/\">+ Read More<\/a><\/p>\n","protected":false},"author":34,"featured_media":0,"parent":0,"menu_order":1,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-23","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/pages\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":25,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/pages\/23\/revisions"}],"predecessor-version":[{"id":364,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/pages\/23\/revisions\/364"}],"wp:attachment":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2015teamc\/wp-json\/wp\/v2\/media?parent=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}