{"id":134,"date":"2026-02-17T16:12:25","date_gmt":"2026-02-17T16:12:25","guid":{"rendered":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/?page_id=134"},"modified":"2026-04-05T16:45:53","modified_gmt":"2026-04-05T16:45:53","slug":"system-implementation","status":"publish","type":"page","link":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/system-implementation\/","title":{"rendered":"System Implementation"},"content":{"rendered":"\n<p>The Flying Hand system is organized into two primary development tracks: <strong>Prototype Subsystem (Physical System Implementation)<\/strong> and <strong>Simulation Subsystem (Algorithm Development + Validation):<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1.<\/strong> <strong><strong>Prototype Subsystem (Physical System Implementation)<\/strong><\/strong><\/h2>\n\n\n\n<p>This subsystem encompasses all hardware components and real-time software deployed on the physical Flying Hand platform.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>1.1 Airframe Subsystem<\/strong><\/strong><\/h3>\n\n\n\n<p><strong>Objective:<\/strong> Prepare the UAV platform for safe and repeatable flight testing.<\/p>\n\n\n\n<p><strong>Date: 2 April 2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>VIO Subsystem Integrated on the UAV:<\/strong> VIO depth camera tilted downwards by 30 degrees to capture features from ground so as to improve position accuracy when flying close to wall\/surfaces<\/li>\n\n\n\n<li>Further evaluated the performance of Altitude Hold and Position Hold modes under different flight conditions, and improve in-flight localization performance to support more stable flight.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"598\" height=\"743\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2.png\" alt=\"\" class=\"wp-image-292\" style=\"aspect-ratio:0.804877113607607;width:269px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2.png 598w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2-241x300.png 241w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2-230x286.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2-350x435.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-2-480x596.png 480w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Date: 18 March 2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Under-Actuated Flight<\/strong>&#8211;<strong> Yaw Response fixed<\/strong>: Front motors tilted outwards by 5deg. Rear motors tilted inwards by 5deg. Corrected the middle motors to 0deg tilt Installed larger, heavier propellers.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"313\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1.png\" alt=\"\" class=\"wp-image-291\" style=\"aspect-ratio:2.9777961010660228;width:533px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1.png 932w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1-300x101.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1-768x258.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1-230x77.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1-350x118.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-1-480x161.png 480w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Date: 27 February 2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pre-flight Preparation<\/strong>: Installed the Cube Orange flight controller along with its associated peripherals, including the buzzer, USB port, and Herelink GPS module.<\/li>\n\n\n\n<li><strong>System verification:<\/strong> Recalibrated all sensors. Practiced arming and emergency motor stops using the RC controller. Conducted a thrust and attitude response test.<\/li>\n\n\n\n<li><strong>Maiden Flight:<\/strong> Test hardware integrity and have a stable testing platform for other subsystem tests. Result: Satisfactory. Observations: GPS ground course errors; Poor yaw control.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"248\" height=\"367\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image.png\" alt=\"\" class=\"wp-image-290\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image.png 248w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-203x300.png 203w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-230x340.png 230w\" sizes=\"auto, (max-width: 248px) 100vw, 248px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Date: 12 February 2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrated avionics, onboard compute, sensing, propulsion, and power systems onto the UAV airframe<\/li>\n\n\n\n<li>Performed electrical validation, power distribution checks, and signal integrity verification<\/li>\n\n\n\n<li>Conducted bench testing of motors, ESCs, sensors, and onboard compute<\/li>\n\n\n\n<li>Prepared the underactuated platform for initial flight testing<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-medium is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"734\" height=\"978\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited.jpeg\" alt=\"\" class=\"wp-image-196\" style=\"aspect-ratio:0.750063694267516;width:211px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited.jpeg 734w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited-225x300.jpeg 225w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited-230x306.jpeg 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited-350x466.jpeg 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/02\/WhatsApp-Image-2026-02-19-at-9.25.32-PM-edited-480x640.jpeg 480w\" sizes=\"auto, (max-width: 734px) 100vw, 734px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>1.2 Localization Subsystem<\/strong><\/strong><\/h3>\n\n\n\n<p><strong>Objective:<\/strong> Provide GPS-denied localization using onboard sensing and embedded compute using VIO and Optical Flow Subsystem.<\/p>\n\n\n\n<p><strong>Date: 2 April 2026<\/strong><\/p>\n\n\n\n<p>In the VIO subsystem the depth camera was tilted downwards by 30 degrees to capture features from ground this improved position accuracy when flying close to wall\/surfaces. The performance was validated by performing near structure flights.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"1024\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-701x1024.png\" alt=\"\" class=\"wp-image-299\" style=\"aspect-ratio:0.6845740598618573;width:244px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-701x1024.png 701w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-205x300.png 205w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-768x1122.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-1051x1536.png 1051w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-1000x1461.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-230x336.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-350x511.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7-480x701.png 480w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-7.png 1078w\" sizes=\"auto, (max-width: 701px) 100vw, 701px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong><strong>Date: 18 March 2026<\/strong><\/strong><\/p>\n\n\n\n<p><strong>VIO Subsystem: Integrated with the UAV and Flight test performed<\/strong><\/p>\n\n\n\n<p><strong>Flight Test:<\/strong> Realsense Depth Camera is mounted facing the front of the drone. Stable Flight Mode- The system runs accurately, and the latency is low and acceptable. Localization error in XY is typically within 10\u201320 cm, with a maximum of 0.5 m<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"360\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4.png\" alt=\"\" class=\"wp-image-296\" style=\"aspect-ratio:2.816870020613962;width:597px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4.png 1014w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-300x107.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-768x273.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-1000x355.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-230x82.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-350x124.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-4-480x170.png 480w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/figure>\n\n\n\n<p><strong>Optical Flow Subsystem: Benchmarking done with GPS module for Performance verification<\/strong><\/p>\n\n\n\n<p>Objective: To evaluate robustness of EKF2-based localization and dependence on GPS vs. optical flow across degraded environments.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1019\" height=\"459\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5.png\" alt=\"\" class=\"wp-image-297\" style=\"aspect-ratio:2.220173011900057;width:573px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5.png 1019w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-300x135.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-768x346.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-1000x450.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-230x104.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-350x158.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-5-480x216.png 480w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><\/figure>\n\n\n\n<p>Multiple tests were conducted by moving the optical flow subsystem around NSH 1st floor, including close proximity to structures. The objective was to analyze flight logs to identify instances where EKF2 flagged the global position as invalid (indicating unreliable GPS, especially near structures). During these periods, the estimator relied solely on optical flow for velocity and altitude estimation. This behavior was validated by examining velocity plots at corresponding timestamps, which remained smooth\u2014confirming proper EKF2 sensor fusion during GPS-denied conditions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-1024x468.png\" alt=\"\" class=\"wp-image-298\" style=\"aspect-ratio:2.1880815337343664;width:604px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-1024x468.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-300x137.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-768x351.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-1000x457.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-230x105.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-350x160.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6-480x219.png 480w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-6.png 1071w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Date: 27 February 2026<\/strong><\/p>\n\n\n\n<p><strong>VIO\/VSLAM Integrity Verification:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"998\" height=\"427\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3.png\" alt=\"\" class=\"wp-image-294\" style=\"aspect-ratio:2.337278106508876;width:552px;height:auto\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3.png 998w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3-300x128.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3-768x329.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3-230x98.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3-350x150.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/image-3-480x205.png 480w\" sizes=\"auto, (max-width: 998px) 100vw, 998px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Date: 12 February 2026<\/strong><\/p>\n\n\n\n<p><strong>VSLAM Setup and Verification<\/strong>:<\/p>\n\n\n\n<p>We set up and validated a Visual Simultaneous Localization and Mapping (VSLAM) pipeline on the NVIDIA Jetson Orin Nano using Isaac ROS Visual SLAM and the Intel RealSense D456. This work included flashing the platform with JetPack 6.0, installing and configuring the Isaac ROS VSLAM stack, and integrating the Intel RealSense SDK 2.0. We verified sensor data publication using the ROS 2 RealSense wrapper and containerized the VIO\u2013RViz launch workflow into a Dockerfile, enabling reproducible and version-controlled execution of the VSLAM pipeline.<\/p>\n\n\n\n<p><br><strong>Current Status:<\/strong> VSLAM pipeline operational on the Jetson platform; validation ongoing under flight-representative conditions.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. <strong><strong><strong>Simulation Subsystem (Algorithm Development &amp; Validation)<\/strong><\/strong><\/strong><\/strong><\/h2>\n\n\n\n<p>This subsystem supports development, validation, and verification of algorithms prior to physical deployment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.1 <strong><strong>PX4 Flight Control Stack Migration and Validation<\/strong><\/strong><\/strong><\/h3>\n\n\n\n<p><strong>Date: 12 February 2026<\/strong><\/p>\n\n\n\n<p>As part of the simulation subsystem, the team evaluated the custom modifications introduced by AirLab in <strong>PX4<\/strong> v1.10 and selected PX4 v1.16 as the baseline for the Flying Hand project to ensure long-term support and compatibility. The PX4 stack was compiled and validated in <strong>Gazebo<\/strong> using the built-in omnidirectional vehicle model, achieving reliable takeoff and landing through <strong>QGroundControl<\/strong>. Building on this baseline, AirLab\u2019s v1.10 modifications were systematically ported to PX4 v1.16, resulting in successful QGroundControl-based takeoff and landing of AirLab\u2019s fully actuated aerial platform within the simulation environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.2 <strong>Position\u2013Wrench Hybrid Controller and Force Apply<\/strong><\/strong><\/h3>\n\n\n\n<p>Our controller is designed for a wall-interaction task in which a UAV takes off, approaches a wall, establishes contact, and then applies a constant normal force in a stable and compliant manner. The key challenge is to bridge two very different operating conditions: stable free-space flight before contact, and force-regulated interaction after contact. To address this, we developed a <strong>position\u2013wrench hybrid controller<\/strong> that uses position control during takeoff, hovering, and wall approach, then transfers the wall-normal direction to a wrench controller once stable contact is detected. This allows the UAV to preserve flight stability while also regulating contact force in a controlled and repeatable way.<\/p>\n\n\n\n<p>The key idea is not simply to combine two controllers, but to assign control authority according to both <strong>task phase<\/strong> and <strong>axis direction<\/strong>. Before contact, the UAV is governed by position tracking. After contact, the controller regulates force only along the wall-normal direction, while still holding the remaining directions in position. This design solves the main limitation of pure position control, which tends to keep pushing into the wall, and pure force control, which struggles to suppress lateral drift and altitude variation during contact.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.2.1 Sub-System Architecture<\/strong><\/h4>\n\n\n\n<p>The overall system follows a <strong>task-layer plus low-level control-layer<\/strong> architecture. The upper layer manages the state machine and mission logic, including takeoff, hover, approach, contact confirmation, steady-force holding, and retreat. The lower layer converts position targets or force targets into executable attitude-thrust commands for PX4 in offboard mode. In the implemented test pipeline, the script continuously publishes <code>tracking_point<\/code> during motion, and publishes <code>ft_setpoint<\/code> together with the wrench-mode switch during the contact-holding phase. This keeps the task logic modular and separates phase management from low-level control generation.<\/p>\n\n\n\n<p>At the control-output level, the system uses a unified external attitude-thrust control chain throughout the entire mission, rather than sending velocity commands during free flight and switching to thrust commands only near contact. This avoids command discontinuities and thrust spikes during mode transitions. The implementation also aligns the relevant transforms so that the wall-normal control direction is explicitly associated with the <strong>x-axis<\/strong>, while the <strong>y<\/strong> and <strong>z<\/strong> axes remain available for position holding, and the command transmission frequency is matched to PX4 at <strong>100 Hz<\/strong>.<\/p>\n\n\n\n<p>Instead of averaging controller outputs with fixed weights, the system uses <strong>axis-wise fusion<\/strong>. The position controller produces the nominal thrust needed for free-space stabilization, while the wrench controller produces the normal-force correction in contact mode. The fused command assigns the <strong>x component<\/strong> primarily to wrench control and keeps the <strong>y\/z components<\/strong> from position control, after which the final thrust vector is reconstructed into a feasible attitude-thrust command for PX4. This preserves physical consistency and avoids conflicts between control loops.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"176\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-1024x176.png\" alt=\"\" class=\"wp-image-278\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-1024x176.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-300x52.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-768x132.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-1536x264.png 1536w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-2048x352.png 2048w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-1000x172.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-230x39.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-350x60.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position1-480x82.png 480w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em><strong>Hybrid Controller Architecture: <\/strong>This diagram reflects the task-layer\/state-machine structure, the separate position and wrench control channels, the contact detection logic, and the final axis-wise fusion before commands are sent to PX4.<\/em><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.2.2 Execution Process<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"103\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-1024x103.png\" alt=\"\" class=\"wp-image-279\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-1024x103.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-300x30.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-768x77.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-1536x154.png 1536w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-2048x205.png 2048w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-1000x100.png 1000w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-230x23.png 230w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-350x35.png 350w, https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-content\/uploads\/sites\/94\/2026\/04\/subsystem_wrench_position2-480x48.png 480w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em><strong>Task execution flow of the hybrid controller<\/strong>: The UAV completes takeoff, hover, and wall approach under position control, switches to hybrid control after stable contact is detected, maintains the target normal force, and then safely disengages and retreats.<\/em><\/p>\n\n\n\n<p><strong>Free-space flight<\/strong><br>During takeoff, hover, and wall approach, the UAV is controlled entirely by the position controller. Using odometry together with position and velocity errors relative to the <code>tracking_point<\/code>, the controller computes a PID-based thrust command with hover-thrust compensation and reconstructs it into an executable attitude command. This supports takeoff, altitude stabilization, hover, and controlled approach to the wall. To improve approach safety, the logic also includes takeoff-stability criteria, hover settling time, and staged approach behavior. As the UAV gets close to the wall and weak contact tendencies begin to appear, the forward approach speed is reduced to lower impact at first contact.<\/p>\n\n\n\n<p><strong>Contact establishment<\/strong><br>The critical issue is not merely detecting force, but recognizing when <strong>stable contact<\/strong> has truly been established. Switching to force control as soon as any force signal appears can cause a transient collision impulse to be misinterpreted as stable contact; keeping position control active for too long can produce overshoot, oscillation, or continuous inward pushing. To solve this, the controller uses a multi-condition contact-confirmation strategy based on a <strong>force window, duration condition, and altitude constraint<\/strong>. In one implementation, force control is enabled only when the measured force remains within <strong>1.8\u20138 N<\/strong> for at least <strong>0.15 s<\/strong>, around a target requirement of <strong>5 N \u00b11 N<\/strong>. This makes the transition from approach to contact much smoother and more reliable.<\/p>\n\n\n\n<p><strong>Contact maintenance<\/strong><br>Once contact is confirmed, the system enters a hybrid mode with <strong>force control along the x-axis and position holding along the y\/z axes<\/strong>. The x-axis corresponds to the wall-normal direction, so the wrench controller closes the force loop there using the measured normal force and a target force reference. To improve stability, the force-feedback path includes two-stage filtering: median filtering suppresses spikes and outliers at contact onset, and moving-average filtering smooths the signal further. The controller also includes a normal-direction feedforward term to build the target force more quickly, and an <code>x_hold<\/code> damping term that adds a lightweight x-direction PD correction around the contact reference point. This prevents the UAV from gradually pressing deeper into the wall because of integral buildup, small attitude bias, or contact elasticity. Meanwhile, the y and z directions remain under position control to suppress lateral drift and altitude fluctuation during contact. After the task is completed, the wrench mode is disabled, the UAV returns to pure position control, retreats from the wall, and then descends.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.2.3 Current Validation Results<\/strong> (3 April 2026)<\/h4>\n\n\n\n<p>Based on the two reports, the position\u2013wrench hybrid controller has already been validated in simulation over the full sequence of <strong>takeoff, approach, contact establishment, steady-force holding, disengagement, and retreat<\/strong>. The current verified target is a steady wall-normal force of <strong>5 N<\/strong>, with an error margin of <strong>\u00b11 N<\/strong>, maintained for <strong>10 seconds<\/strong>. The reports also describe supporting visualization of force, thrust, position, and attitude to verify controller behavior and diagnose transform or transition issues.<\/p>\n\n\n\n<p>At the same time, visual servoing has already been introduced to improve autonomous alignment and slow wall approach. The UAV can now approach the wall under VS-assisted fusion control, but the complete end-to-end pipeline from <strong>vision-guided approach to stable post-contact force regulation<\/strong> is not yet fully reliable. At the current stage, the hybrid position\u2013wrench controller itself is the more mature and better-validated part of the system, while the vision-fusion extension remains under tuning and further testing.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Flying Hand system is organized into two primary development tracks: Prototype Subsystem (Physical System Implementation) and Simulation Subsystem (Algorithm Development + [&hellip;]<\/p>\n","protected":false},"author":441,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-134","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/pages\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/users\/441"}],"replies":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":14,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/pages\/134\/revisions"}],"predecessor-version":[{"id":300,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/pages\/134\/revisions\/300"}],"wp:attachment":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2026teamc\/wp-json\/wp\/v2\/media?parent=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}