<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article">
 <front>
  <journal-meta>
   <journal-id journal-id-type="publisher-id">
    jst
   </journal-id>
   <journal-title-group>
    <journal-title>
     Journal of Sensor Technology
    </journal-title>
   </journal-title-group>
   <issn pub-type="epub">
    2161-122X
   </issn>
   <issn publication-format="print">
    2161-1238
   </issn>
   <publisher>
    <publisher-name>
     Scientific Research Publishing
    </publisher-name>
   </publisher>
  </journal-meta>
  <article-meta>
   <article-id pub-id-type="doi">
    10.4236/jst.2025.153004
   </article-id>
   <article-id pub-id-type="publisher-id">
    jst-147637
   </article-id>
   <article-categories>
    <subj-group subj-group-type="heading">
     <subject>
      Articles
     </subject>
    </subj-group>
    <subj-group subj-group-type="Discipline-v2">
     <subject>
      Computer Science 
     </subject>
     <subject>
       Communications
     </subject>
    </subj-group>
   </article-categories>
   <title-group>
    Energy-Efficient Geographic Routing with Obstacle Avoidance in Wireless Sensor Networks
   </title-group>
   <contrib-group>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Ahoua Cyrille
      </surname>
      <given-names>
       Aka
      </given-names>
     </name> 
     <xref ref-type="aff" rid="aff1"> 
      <sup>1</sup>
     </xref>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Lagasane Ouattara
      </surname>
      <given-names>
       Kra
      </given-names>
     </name> 
     <xref ref-type="aff" rid="aff1"> 
      <sup>1</sup>
     </xref>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Akanza Konan Ricky
      </surname>
      <given-names>
       N’dri
      </given-names>
     </name> 
     <xref ref-type="aff" rid="aff1"> 
      <sup>1</sup>
     </xref>
    </contrib>
    <contrib contrib-type="author" xlink:type="simple">
     <name name-style="western">
      <surname>
       Abdou Khadre
      </surname>
      <given-names>
       Diop
      </given-names>
     </name> 
     <xref ref-type="aff" rid="aff2"> 
      <sup>2</sup>
     </xref>
    </contrib>
   </contrib-group> 
   <aff id="aff1">
    <addr-line>
     aDepartment of Mathematical Computer Science, Alassane Ouattara University, Bouaké, Côte d’Ivoire
    </addr-line> 
   </aff> 
   <aff id="aff2">
    <addr-line>
     aDepartment of Information and Communications Technology (ICT), Alioune DIOP University Bambey, Bambey, Senegal
    </addr-line> 
   </aff> 
   <pub-date pub-type="epub">
    <day>
     30
    </day> 
    <month>
     09
    </month>
    <year>
     2025
    </year>
   </pub-date> 
   <volume>
    15
   </volume> 
   <issue>
    03
   </issue>
   <fpage>
    37
   </fpage>
   <lpage>
    47
   </lpage>
   <history>
    <date date-type="received">
     <day>
      30,
     </day>
     <month>
      August
     </month>
     <year>
      2025
     </year>
    </date>
    <date date-type="published">
     <day>
      27,
     </day>
     <month>
      August
     </month>
     <year>
      2025
     </year> 
    </date> 
    <date date-type="accepted">
     <day>
      27,
     </day>
     <month>
      September
     </month>
     <year>
      2025
     </year> 
    </date>
   </history>
   <permissions>
    <copyright-statement>
     © Copyright 2014 by authors and Scientific Research Publishing Inc. 
    </copyright-statement>
    <copyright-year>
     2014
    </copyright-year>
    <license>
     <license-p>
      This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/
     </license-p>
    </license>
   </permissions>
   <abstract>
    Wireless sensor networks (WSNs) are essential in environmental, industrial, and urban monitoring applications. However, in hostile environments where communication is hampered by physical obstacles, traditional geographic routing protocols suffer from significant performance degradation. This paper presents OAGF (Obstacle-Aware Greedy Forwarding), a geographic routing protocol capable of obstacle avoidance while optimizing energy consumption and latency. OAGF combines an adaptation of Greedy Forwarding with mechanisms for obstacle detection, alternative route selection, and residual energy consideration. Simulations under OMNeT++/INET 4.4 demonstrate that OAGF reduces latency by an average of 31%, total energy consumption by 38%, and improves delivery rates by 7% compared to GARL and GEAR. These results show that OAGF is a robust and efficient approach for RCSF deployments in complex environments.
   </abstract>
   <kwd-group> 
    <kwd>
     Wireless Sensor Networks
    </kwd> 
    <kwd>
      Geographic Routing
    </kwd> 
    <kwd>
      Obstacle Avoidance
    </kwd> 
    <kwd>
      Energy Optimization
    </kwd>
   </kwd-group>
  </article-meta>
 </front>
 <body>
  <sec id="s1">
   <title>1. Introduction</title>
   <p>Wireless sensor networks (WSNs) are a technological pillar of the Internet of Things (IoT) for the collection and transmission of environmental data <xref ref-type="bibr" rid="scirp.147637-1">
     [1]
    </xref> <xref ref-type="bibr" rid="scirp.147637-2">
     [2]
    </xref>. Thanks to their low cost, flexibility, and autonomy, they are deployed to monitor physical phenomena such as temperature, humidity, or the detection of critical events.</p>
   <p>However, in real-world environments, the presence of obstacles (buildings, rocks, dense vegetation, metal structures, etc.) limits radio range and creates communication gaps, leading to transmission failures, costly retransmissions, and excessive energy consumption <xref ref-type="bibr" rid="scirp.147637-3">
     [3]
    </xref>. Conventional geographic routing protocols, such as GPSR <xref ref-type="bibr" rid="scirp.147637-4">
     [4]
    </xref> or GOAFR <xref ref-type="bibr" rid="scirp.147637-5">
     [5]
    </xref>, although effective in open environments, often fail in the face of these constraints.</p>
   <p>The motivation for this work therefore lies in the design of an intelligent routing protocol capable of maintaining stable performance in a constrained environment, integrating obstacle awareness and energy management.</p>
   <p>Our main contributions are :</p>
  </sec><sec id="s2">
   <title>2. State of Art</title>
   <p>Geographic routing relies on the position of nodes to route data without a global routing table <xref ref-type="bibr" rid="scirp.147637-4">
     [4]
    </xref>. This approach is efficient and scalable, but it becomes limited in the presence of obstacles or energy constraints. The main families of protocols can be grouped into four categories: classic, topological, intelligent, and recent deep learning-based protocols.</p>
   <sec id="s2_1">
    <title>2.1. Classic Protocols</title>
    <p>The first approaches rely on geographical distance to choose the next hop.</p>
    <p>GPSR (Greedy Perimeter Stateless Routing) <xref ref-type="bibr" rid="scirp.147637-4">
      [4]
     </xref> combines a Greedy mode to transmit to the neighbor closest to the destination and a Perimeter mode to bypass blocked areas. It is simple and effective but fails in the presence of physical obstacles or coverage gaps and ignores energy consumption.</p>
    <p>GOAFR (Greedy Other Adaptive Face Routing) <xref ref-type="bibr" rid="scirp.147637-5">
      [5]
     </xref> improves on GPSR by limiting detours when bypassing but remains sensitive to mobile obstacles and does not take energy constraints into account.</p>
    <p>These protocols favor the shortest distance without considering link reliability or the residual energy of the nodes.</p>
   </sec>
   <sec id="s2_2">
    <title>2.2. Topological Approaches</title>
    <p>Topological protocols integrate communication graph structure to improve routing stability.</p>
    <p>CLDP (Cross-Link Detection Protocol) <xref ref-type="bibr" rid="scirp.147637-6">
      [6]
     </xref> creates a planar topology by removing redundant links to avoid loops but generates an overload of control messages.</p>
    <p>GLIDER (Geographic Layered Routing) <xref ref-type="bibr" rid="scirp.147637-7">
      [7]
     </xref> combines position and connectivity information for better fault tolerance, at the cost of increased complexity and significant energy consumption.</p>
    <p>Ant-based routing approaches such as AntHocNet <xref ref-type="bibr" rid="scirp.147637-8">
      [8]
     </xref> use bio-inspired heuristics to improve path discovery and adaptivity in dynamic networks.</p>
    <p>These approaches enhance structural robustness but are costly to maintain in dense or energy-limited networks.</p>
   </sec>
   <sec id="s2_3">
    <title>2.3. Intelligent Protocols</title>
    <p>Recent protocols incorporate adaptive mechanisms based on energy and learning.</p>
    <p>GEAR (Geographic and Energy Aware Routing) <xref ref-type="bibr" rid="scirp.147637-9">
      [9]
     </xref> balances distance and energy consumption, extending the network's lifespan, but remains ineffective in the face of obstacles.</p>
    <p>GARL (Geographic Adaptive Routing with Learning) <xref ref-type="bibr" rid="scirp.147637-10">
      [10]
     </xref> adapts its decisions based on past experiences through reinforcement learning, but its convergence is slow and resource intensive.</p>
    <p>HGSR <xref ref-type="bibr" rid="scirp.147637-11">
      [11]
     </xref> and EHGSR <xref ref-type="bibr" rid="scirp.147637-12">
      [12]
     </xref> bypass coverage holes by selecting alternative geometric paths, with good performance in static networks but reduced efficiency in dynamic environments.</p>
    <p>In addition, MGR <xref ref-type="bibr" rid="scirp.147637-13">
      [13]
     </xref> extends geographic routing concepts to underwater WSNs, highlighting the versatility of such methods.</p>
    <p>These protocols represent progress, but none of them simultaneously address physical obstacles, latency, and energy consumption.</p>
   </sec>
   <sec id="s2_4">
    <title>2.4. Recent Work Based on Deep Learning</title>
    <p>The rise of artificial intelligence has given rise to more autonomous approaches.DeepRL-Routing <xref ref-type="bibr" rid="scirp.147637-14">
      [14]
     </xref> uses deep reinforcement learning to optimize route selection based on network conditions (energy, link quality, distance).</p>
    <p>E2DRL-WSN <xref ref-type="bibr" rid="scirp.147637-15">
      [15]
     </xref> applies distributed learning to improve reliability and energy efficiency.</p>
    <p>These solutions offer very good performance, but their computational complexity and memory requirements make them difficult to deploy on sensors with limited resources.</p>
    <p>In summary:</p>
    <p>Faced with these limitations, the OAGF (Obstacle-Aware Greedy Forwarding) protocol aims to combine simplicity, energy efficiency, and intelligent obstacle avoidance for more robust and balanced geographic routing.</p>
   </sec>
  </sec><sec id="s3">
   <title>3. Problem Statement and Modeling</title>
   <sec id="s3_1">
    <title>3.1. Formulation</title>
    <p>Let us consider a graph 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         G 
       </mi> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           V 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           E 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> representing the network, with 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        V 
      </mi> 
     </math> the set of nodes and 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        E 
      </mi> 
     </math> the links.</p>
    <p>Each link 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           i 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           j 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ∈ 
       </mo> 
       <mi>
         E 
       </mi> 
      </mrow> 
     </math> has a cost 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         c 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           i 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           j 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> depending on distance, link quality, and energy consumption.</p>
    <p>Obstacles are modeled by a set 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         O 
       </mi> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            o 
          </mi> 
          <mn>
            1 
          </mn> 
         </msub> 
         <mo>
           , 
         </mo> 
         <msub> 
          <mi>
            o 
          </mi> 
          <mn>
            2 
          </mn> 
         </msub> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <msub> 
          <mi>
            o 
          </mi> 
          <mi>
            n 
          </mi> 
         </msub> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math> that prevents direct communication between two nodes if the segment 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           i 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           j 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         ∩ 
       </mo> 
       <msub> 
        <mi>
          o 
        </mi> 
        <mi>
          k 
        </mi> 
       </msub> 
       <mo>
         ≠ 
       </mo> 
       <mo>
         ∅ 
       </mo> 
      </mrow> 
     </math>.</p>
    <p>The objective is to determine a path 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msup> 
        <mi>
          P 
        </mi> 
        <mo>
          * 
        </mo> 
       </msup> 
      </mrow> 
     </math> between the source 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        s 
      </mi> 
     </math> and the destination 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        d 
      </mi> 
     </math> that:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <munder> 
        <mrow> 
         <mtext>
           min 
         </mtext> 
        </mrow> 
        <mi>
          P 
        </mi> 
       </munder> 
       <mi>
         f 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mi>
          P 
        </mi> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         = 
       </mo> 
       <mi>
         α 
       </mi> 
       <mstyle displaystyle="true"> 
        <mo>
          ∑ 
        </mo> 
        <mrow> 
         <mi>
           c 
         </mi> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mi>
             i 
           </mi> 
           <mo>
             , 
           </mo> 
           <mi>
             j 
           </mi> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mstyle> 
       <mo>
         + 
       </mo> 
       <mi>
         β 
       </mi> 
       <mstyle displaystyle="true"> 
        <mo>
          ∑ 
        </mo> 
        <mrow> 
         <mi>
           E 
         </mi> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mi>
             i 
           </mi> 
           <mo>
             , 
           </mo> 
           <mi>
             j 
           </mi> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mstyle> 
       <mo>
         − 
       </mo> 
       <mi>
         γ 
       </mi> 
       <mstyle displaystyle="true"> 
        <mo>
          ∏ 
        </mo> 
        <mrow> 
         <mi>
           R 
         </mi> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mi>
             i 
           </mi> 
           <mo>
             , 
           </mo> 
           <mi>
             j 
           </mi> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mstyle> 
      </mrow> 
     </math> (1)</p>
    <p>where:</p>
   </sec>
   <sec id="s3_2">
    <title>3.2. Assumptions</title>
   </sec>
  </sec><sec id="s4">
   <title>4. Proposed Algorithm: Obstacle-Aware Greedy Forwarding (OAGF)</title>
   <sec id="s4_1">
    <title>4.1. Principle</title>
    <p>OAGF combines Greedy Forwarding with multi-criteria decision-making (distance, energy, obstacles).</p>
    <p>When a node cannot progress, a local recovery procedure is activated to bypass the obstacle.</p>
   </sec>
   <sec id="s4_2">
    <title>4.2. Main Steps</title>
    <p>1) Selection of candidate neighbor: among the neighbors closest to the destination, the one that minimizes</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         S 
       </mi> 
       <mi>
         c 
       </mi> 
       <mi>
         o 
       </mi> 
       <mi>
         r 
       </mi> 
       <mi>
         e 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mi>
          w 
        </mi> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         = 
       </mo> 
       <mi>
         α 
       </mi> 
       <mo>
         ⋅ 
       </mo> 
       <mi>
         d 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           w 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           d 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         + 
       </mo> 
       <mfrac> 
        <mi>
          β 
        </mi> 
        <mrow> 
         <msub> 
          <mi>
            E 
          </mi> 
          <mrow> 
           <mi>
             r 
           </mi> 
           <mi>
             e 
           </mi> 
           <mi>
             s 
           </mi> 
          </mrow> 
         </msub> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mi>
            w 
          </mi> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mfrac> 
       <mo>
         + 
       </mo> 
       <mi>
         δ 
       </mi> 
       <mo>
         ⋅ 
       </mo> 
       <mi>
         O 
       </mi> 
       <mi>
         b 
       </mi> 
       <mi>
         s 
       </mi> 
       <mi>
         t 
       </mi> 
       <mi>
         a 
       </mi> 
       <mi>
         c 
       </mi> 
       <mi>
         l 
       </mi> 
       <mi>
         e 
       </mi> 
       <mi>
         C 
       </mi> 
       <mi>
         o 
       </mi> 
       <mi>
         s 
       </mi> 
       <mi>
         t 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mi>
          w 
        </mi> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> (2)</p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         O 
       </mi> 
       <mi>
         b 
       </mi> 
       <mi>
         s 
       </mi> 
       <mi>
         t 
       </mi> 
       <mi>
         a 
       </mi> 
       <mi>
         c 
       </mi> 
       <mi>
         l 
       </mi> 
       <mi>
         e 
       </mi> 
       <mi>
         C 
       </mi> 
       <mi>
         o 
       </mi> 
       <mi>
         s 
       </mi> 
       <mi>
         t 
       </mi> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mi>
          w 
        </mi> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         = 
       </mo> 
       <mn>
         0 
       </mn> 
      </mrow> 
     </math> if there are no obstacles, otherwise penalty = 1.</p>
    <p>2) Update the route and send the packet.</p>
    <p>3) Recovery: if no valid neighbor is found, a detour mechanism is initiated (simplified Face Routing). In practice, this recovery phase behaves as a lightweight Perimeter mode similar to GPSR, where the right-hand rule is applied to follow the obstacle boundary until a node closer to the destination than the entry point is reached.</p>
   </sec>
   <sec id="s4_3">
    <title>4.3. Pseudocode of OAGF</title>
    <p>1.if u == d:</p>
    <p>2. DELIVER(packet); return</p>
    <p>3.CAND ← {v ∈ N(u) | d(v,d) &lt; d(u,d) ∧ NON_BLOCKED(u,v)}</p>
    <p>4.if CAND ≠ ∅:</p>
    <p>5. for each v ∈ CAND:</p>
    <p>6. s(v) ← α·DIST(v,d)_norm + β·ENERGY(u,v)_norm +</p>
    <p>γ·OBSTACLE_COST(u,v)_norm</p>
    <p>7. w ← argmin_v s(v)</p>
    <p>8. FORWARD(packet, w); return</p>
    <p>9. else:</p>
    <p>10.// LOCAL RECOVERY (Simplified Face / Perimeter mode)</p>
    <p>11. if package.recovery_mode == FALSE:</p>
    <p>12. package.recovery_mode ← TRUE</p>
    <p>13.package.anchor ← u // entry point of the recovery phase</p>
    <p>14. w ← NEXT_NEIGHBOR_PERIMETER(u, d) // right-hand rule</p>
    <p>15. if w ≠ ⊥:</p>
    <p>16. FORWARD(packet, w); return</p>
    <p>17.else:</p>
    <p>18. w ← NEXT_PERIMETER_NEIGHBOR(u, d)</p>
    <p>19. if w ≠ ⊥ ∧ d(w,d) &lt; d(packet.anchor,d): // obstacle has been bypassed</p>
    <p>20. packet.recovery_mode ← FALSE</p>
    <p>21. if w = ⊥:</p>
    <p>22. // Option: limited backtracking or NACK</p>
    <p>23. DROP(packet) // or SEND_NACK(source)</p>
    <p>Lines 1 to 2 verify the destination. If the current node is the final node, the packet is delivered immediately and routing stops.</p>
    <p>Lines 3 to 8 describe the Greedy mode routing phase. The node selects from among its neighbors those that are closest to the destination and whose links are not blocked. Each neighbor is evaluated according to a multi-criteria score combining distance to the destination, energy consumption, and proximity to obstacles. The neighbor with the lowest score is chosen for transmission.</p>
    <p>Lines 9 to 10 signal the switch to the recovery phase when no valid neighbors are available. This step aims to bypass obstacles that prevent direct progress.</p>
    <p>Lines 11 to 16 initiate recovery mode (Face/Perimeter). The packet enters recovery mode, an anchor point is defined, and the protocol applies the right-hand rule to follow the contour of the obstacle until it finds a clear path.</p>
    <p>Lines 17 to 20 manage the continuation of the detour. If a neighbor allows progress while moving closer to the destination relative to the anchor point, this means that the obstacle has been passed: recovery mode is then disabled and routing returns to normal Greedy mode.</p>
    <p>Finally, lines 21 to 23 define failure management. If no neighbor is available, the protocol can attempt a limited backtracking or send a NACK to the source. As a last resort, the packet is dropped (DROP).</p>
   </sec>
  </sec><sec id="s5">
   <title>5. Experimental Evaluation</title>
   <sec id="s5_1">
    <title>5.1. Simulation Parameters</title>
    <p>The simulation parameters used in this study are summarized in <xref ref-type="table" rid="table1">
      Table 1
     </xref>.</p>
    <table-wrap id="table1">
     <label>
      <xref ref-type="table" rid="table1">
       Table 1
      </xref></label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.147637-"></xref>Table 1. Simulation parameter.</title>
     </caption>
     <table class="MsoTableGrid custom-table" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <td class="custom-bottom-td acenter" width="42.01%"><p style="text-align:center">Parameter</p></td> 
       <td class="custom-bottom-td acenter" width="57.99%"><p style="text-align:center">Value</p></td> 
      </tr> 
      <tr> 
       <td class="custom-top-td acenter" width="42.01%"><p style="text-align:center">Simulator</p></td> 
       <td class="custom-top-td acenter" width="57.99%"><p style="text-align:center">OMNeT++ 5.7 + INET 4.4</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Surface</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">100 m × 100 m</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Nodes</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">100 - 500</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Obstacles</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">0 - 20 (rectangular shapes 10 × 10 m)</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Radio range</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">20 m</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Initial energy</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">100 J</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Packet size</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">512 bytes</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Protocols compared</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">OAGF, GARL, GEAR</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Simulation duration</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">200 s</p></td> 
      </tr> 
      <tr> 
       <td class="acenter" width="42.01%"><p style="text-align:center">Transmission frequency</p></td> 
       <td class="acenter" width="57.99%"><p style="text-align:center">1 packet/s</p></td> 
      </tr> 
     </table>
    </table-wrap>
   </sec>
   <sec id="s5_2">
    <title>5.2. Performance Indicator</title>
    <p>For a packet 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        p 
      </mi> 
     </math> routed along the path 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         P 
       </mi> 
       <mo>
         = 
       </mo> 
       <mrow> 
        <mo>
          { 
        </mo> 
        <mrow> 
         <mn>
           1 
         </mn> 
         <mo>
           , 
         </mo> 
         <mo>
           ⋯ 
         </mo> 
         <mo>
           , 
         </mo> 
         <msub> 
          <mi>
            H 
          </mi> 
          <mi>
            p 
          </mi> 
         </msub> 
        </mrow> 
        <mo>
          } 
        </mo> 
       </mrow> 
      </mrow> 
     </math> (with 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          H 
        </mi> 
        <mi>
          p 
        </mi> 
       </msub> 
      </mrow> 
     </math> hops), the end-to-end latency is the sum of the delays per hop:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          L 
        </mi> 
        <mi>
          p 
        </mi> 
       </msub> 
       <mo>
         = 
       </mo> 
       <mstyle displaystyle="true"> 
        <msubsup> 
         <mo>
           ∑ 
         </mo> 
         <mrow> 
          <mi>
            h 
          </mi> 
          <mo>
            = 
          </mo> 
          <mn>
            1 
          </mn> 
         </mrow> 
         <mrow> 
          <msub> 
           <mi>
             H 
           </mi> 
           <mi>
             p 
           </mi> 
          </msub> 
         </mrow> 
        </msubsup> 
        <mrow> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <msub> 
            <mi>
              t 
            </mi> 
            <mrow> 
             <mtext>
               tx 
             </mtext> 
             <mo>
               , 
             </mo> 
             <mi>
               h 
             </mi> 
            </mrow> 
           </msub> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              t 
            </mi> 
            <mrow> 
             <mtext>
               prop 
             </mtext> 
             <mo>
               , 
             </mo> 
             <mi>
               h 
             </mi> 
            </mrow> 
           </msub> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              t 
            </mi> 
            <mrow> 
             <mtext>
               proc 
             </mtext> 
             <mo>
               , 
             </mo> 
             <mi>
               h 
             </mi> 
            </mrow> 
           </msub> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              t 
            </mi> 
            <mrow> 
             <mtext>
               queue 
             </mtext> 
             <mo>
               , 
             </mo> 
             <mi>
               h 
             </mi> 
            </mrow> 
           </msub> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mstyle> 
       <mtext>
           
       </mtext> 
       <mo>
         . 
       </mo> 
      </mrow> 
     </math> (3)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          t 
        </mi> 
        <mrow> 
         <mtext>
           tx 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: transmission delay (size/bitrate, including any MAC backoffs)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          t 
        </mi> 
        <mrow> 
         <mtext>
           prop 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: propagation ( 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mo>
         ≈ 
       </mo> 
       <mrow> 
        <mi>
          d 
        </mi> 
        <mo>
          / 
        </mo> 
        <mi>
          c 
        </mi> 
       </mrow> 
      </mrow> 
     </math>, often negligible in WSN)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          t 
        </mi> 
        <mrow> 
         <mtext>
           proc 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: processing (protocol stack)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          t 
        </mi> 
        <mrow> 
         <mtext>
           queue 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: queueing (MAC, radio interface)</p>
    <p>
     <xref ref-type="bibr" rid="scirp.147637-"></xref>The average latency over a set 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi mathvariant="script">
        D 
      </mi> 
     </math> of delivered packets (size 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mrow> 
        <mo>
          | 
        </mo> 
        <mi mathvariant="script">
          D 
        </mi> 
        <mo>
          | 
        </mo> 
       </mrow> 
      </mrow> 
     </math>):</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mover accent="true"> 
        <mi>
          L 
        </mi> 
        <mo>
          ¯ 
        </mo> 
       </mover> 
       <mo>
         = 
       </mo> 
       <mfrac> 
        <mn>
          1 
        </mn> 
        <mrow> 
         <mrow> 
          <mo>
            | 
          </mo> 
          <mi mathvariant="script">
            D 
          </mi> 
          <mo>
            | 
          </mo> 
         </mrow> 
        </mrow> 
       </mfrac> 
       <mstyle displaystyle="true"> 
        <msub> 
         <mo>
           ∑ 
         </mo> 
         <mrow> 
          <mi>
            p 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi mathvariant="script">
            D 
          </mi> 
         </mrow> 
        </msub> 
        <mrow> 
         <msub> 
          <mi>
            L 
          </mi> 
          <mi>
            p 
          </mi> 
         </msub> 
        </mrow> 
       </mstyle> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mtext>
           en ms 
         </mtext> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math> (4)</p>
    <p>Assuming independent and identically distributed hops with average delay 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          μ 
        </mi> 
        <mi>
          ℓ 
        </mi> 
       </msub> 
      </mrow> 
     </math>, then</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi mathvariant="double-struck">
         E 
       </mi> 
       <mrow> 
        <mo>
          [ 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            L 
          </mi> 
          <mi>
            p 
          </mi> 
         </msub> 
        </mrow> 
        <mo>
          ] 
        </mo> 
       </mrow> 
       <mo>
         ≈ 
       </mo> 
       <msub> 
        <mi>
          μ 
        </mi> 
        <mi>
          ℓ 
        </mi> 
       </msub> 
       <mtext>
           
       </mtext> 
       <mi mathvariant="double-struck">
         E 
       </mi> 
       <mrow> 
        <mo>
          [ 
        </mo> 
        <mrow> 
         <msub> 
          <mi>
            H 
          </mi> 
          <mi>
            p 
          </mi> 
         </msub> 
        </mrow> 
        <mo>
          ] 
        </mo> 
       </mrow> 
      </mrow> 
     </math>, which directly links the average latency to the average number of hops.</p>
    <p>For a packet of 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        k 
      </mi> 
     </math> bits transmitted over a link of distance 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        d 
      </mi> 
     </math>:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           tx 
         </mtext> 
        </mrow> 
       </msub> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           k 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           d 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         = 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           elec 
         </mtext> 
        </mrow> 
       </msub> 
       <mi>
         k 
       </mi> 
       <mo>
         + 
       </mo> 
       <msub> 
        <mi>
          ϵ 
        </mi> 
        <mrow> 
         <mtext>
           amp 
         </mtext> 
        </mrow> 
       </msub> 
       <mi>
         k 
       </mi> 
       <mtext>
           
       </mtext> 
       <msup> 
        <mi>
          d 
        </mi> 
        <mi>
          n 
        </mi> 
       </msup> 
       <mo>
         , 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           rx 
         </mtext> 
        </mrow> 
       </msub> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mi>
          k 
        </mi> 
        <mo>
          ) 
        </mo> 
       </mrow> 
       <mo>
         = 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           elec 
         </mtext> 
        </mrow> 
       </msub> 
       <mi>
         k 
       </mi> 
       <mo>
         , 
       </mo> 
      </mrow> 
     </math></p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           elec 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: electronic cost/bit (e.g., 50 nJ/bit)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          ϵ 
        </mi> 
        <mrow> 
         <mtext>
           amp 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: amplification cost (e.g., 100 pJ/bit/m<sup>2</sup>)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mi>
         n 
       </mi> 
       <mo>
         ∈ 
       </mo> 
       <mrow> 
        <mo>
          [ 
        </mo> 
        <mrow> 
         <mn>
           2 
         </mn> 
         <mo>
           , 
         </mo> 
         <mn>
           4 
         </mn> 
        </mrow> 
        <mo>
          ] 
        </mo> 
       </mrow> 
      </mrow> 
     </math>: path loss exponent (2 free space, &gt;2 in shadowing/fading)</p>
    <p>Add listening/standby and retransmission components:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           idle 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         = 
       </mo> 
       <msub> 
        <mi>
          P 
        </mi> 
        <mrow> 
         <mtext>
           idle 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         ⋅ 
       </mo> 
       <msub> 
        <mi>
          T 
        </mi> 
        <mrow> 
         <mtext>
           idle 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         , 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           cca 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         = 
       </mo> 
       <msub> 
        <mi>
          P 
        </mi> 
        <mrow> 
         <mtext>
           rx 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         ⋅ 
       </mo> 
       <msub> 
        <mi>
          T 
        </mi> 
        <mrow> 
         <mtext>
           cca 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         , 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           retx 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         = 
       </mo> 
       <mi>
         r 
       </mi> 
       <mo>
         ⋅ 
       </mo> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           tx 
         </mtext> 
        </mrow> 
       </msub> 
       <mrow> 
        <mo>
          ( 
        </mo> 
        <mrow> 
         <mi>
           k 
         </mi> 
         <mo>
           , 
         </mo> 
         <mi>
           d 
         </mi> 
        </mrow> 
        <mo>
          ) 
        </mo> 
       </mrow> 
      </mrow> 
     </math></p>
    <p>where 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        r 
      </mi> 
     </math> is the number of retransmissions.</p>
    <p>Total network energy over the simulation period 
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>
        T 
      </mi> 
     </math>:</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          E 
        </mi> 
        <mrow> 
         <mtext>
           tot 
         </mtext> 
        </mrow> 
       </msub> 
       <mo>
         = 
       </mo> 
       <mstyle displaystyle="true"> 
        <msub> 
         <mo>
           ∑ 
         </mo> 
         <mrow> 
          <mi>
            u 
          </mi> 
          <mo>
            ∈ 
          </mo> 
          <mi>
            V 
          </mi> 
         </mrow> 
        </msub> 
        <mrow> 
         <mrow> 
          <mo>
            ( 
          </mo> 
          <mrow> 
           <mstyle displaystyle="true"> 
            <msub> 
             <mo>
               ∑ 
             </mo> 
             <mrow> 
              <mtext>
                tx de 
              </mtext> 
              <mi>
                u 
              </mi> 
             </mrow> 
            </msub> 
            <mrow> 
             <msub> 
              <mi>
                E 
              </mi> 
              <mrow> 
               <mtext>
                 tx 
               </mtext> 
              </mrow> 
             </msub> 
            </mrow> 
           </mstyle> 
           <mo>
             + 
           </mo> 
           <mstyle displaystyle="true"> 
            <msub> 
             <mo>
               ∑ 
             </mo> 
             <mrow> 
              <mtext>
                rx de 
              </mtext> 
              <mi>
                u 
              </mi> 
             </mrow> 
            </msub> 
            <mrow> 
             <msub> 
              <mi>
                E 
              </mi> 
              <mrow> 
               <mtext>
                 rx 
               </mtext> 
              </mrow> 
             </msub> 
            </mrow> 
           </mstyle> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              E 
            </mi> 
            <mrow> 
             <mtext>
               idle 
             </mtext> 
            </mrow> 
           </msub> 
           <mrow> 
            <mo>
              ( 
            </mo> 
            <mi>
              u 
            </mi> 
            <mo>
              ) 
            </mo> 
           </mrow> 
           <mo>
             + 
           </mo> 
           <msub> 
            <mi>
              E 
            </mi> 
            <mrow> 
             <mtext>
               cca 
             </mtext> 
            </mrow> 
           </msub> 
           <mrow> 
            <mo>
              ( 
            </mo> 
            <mi>
              u 
            </mi> 
            <mo>
              ) 
            </mo> 
           </mrow> 
          </mrow> 
          <mo>
            ) 
          </mo> 
         </mrow> 
        </mrow> 
       </mstyle> 
      </mrow> 
     </math> (5)</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <mtext>
         PDR 
       </mtext> 
       <mo>
         = 
       </mo> 
       <mfrac> 
        <mrow> 
         <msub> 
          <mi>
            N 
          </mi> 
          <mrow> 
           <mtext>
             livres 
           </mtext> 
          </mrow> 
         </msub> 
        </mrow> 
        <mrow> 
         <msub> 
          <mi>
            N 
          </mi> 
          <mrow> 
           <mtext>
             emis 
           </mtext> 
          </mrow> 
         </msub> 
        </mrow> 
       </mfrac> 
       <mo>
         × 
       </mo> 
       <mn>
         100 
       </mn> 
       <mtext>
         % 
       </mtext> 
      </mrow> 
     </math> (6)</p>
    <p>PDR: Packet Delivery Ratio</p>
    <p>
     <math display="inline" xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          N 
        </mi> 
        <mrow> 
         <mtext>
           livres 
         </mtext> 
        </mrow> 
       </msub> 
      </mrow> 
     </math>: Number of packets delivered</p>
    <p>
     <math xmlns="http://www.w3.org/1998/Math/MathML"> <mrow> 
       <msub> 
        <mi>
          N 
        </mi> 
        <mrow> 
         <mtext>
           emis 
         </mtext> 
        </mrow> 
       </msub> 
       <mo> 
       </mo> 
      </mrow> 
     </math>: Number of packets sent</p>
   </sec>
  </sec><sec id="s6">
   <title>6. Results and Discussion</title>
   <sec id="s6_1">
    <title>6.1. Average Latency</title>
    <p>The curve “<xref ref-type="fig" rid="fig1">
      Figure 1
     </xref>” shows that average latency increases with the number of obstacles for all three protocols (GEAR, GARL, and OAGF).</p>
    <p>The increase in latency with the number of obstacles is an expected phenomenon, as obstacles cause detours and additional retransmissions.</p>
    <p>However, OAGF shows a much slower increase in latency, with an average reduction of 31% compared to GEAR and 24% compared to GARL.</p>
    <p>This improvement can be explained by:</p>
    <p>Thus, OAGF ensures faster end-to-end data transmission, even in environments cluttered with obstacles a major advantage for time-sensitive IoT applications (real-time monitoring, industrial automation, etc.).</p>
    <fig id="fig1" position="float">
     <label>Figure 1</label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.147637-"></xref>Figure 1.Avarage latency vs number of obstacles.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/4200309-rId99.jpeg?20251128100450" />
    </fig>
   </sec>
   <sec id="s6_2">
    <title>6.2. Energy Consumption</title>
    <fig id="fig2" position="float">
     <label>Figure 2</label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.147637-"></xref>Figure 2. Energy consumption vs number of obstacles.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/4200309-rId100.jpeg?20251128100450" />
    </fig>
    <p>As shown in “<xref ref-type="fig" rid="fig2">
      Figure 2
     </xref>”, the total energy consumption increases with obstacle density for all protocols.</p>
    <p>The presence of obstacles results in longer paths, more intermediate hops, and more retransmissions, thereby increasing energy expenditure. Nevertheless, OAGF maintains significantly lower consumption (approximately 38% average reduction).</p>
    <p>This efficiency stems from:</p>
    <p>As a result, OAGF significantly extends the lifetime of the network, making it particularly suitable for resource-constrained IoT networks, such as environmental monitoring systems or smart agriculture.</p>
   </sec>
   <sec id="s6_3">
    <title>6.3. Success Rate</title>
    <fig id="fig3" position="float">
     <label>Figure 3</label>
     <caption>
      <title>
       <xref ref-type="bibr" rid="scirp.147637-"></xref>Figure 3. Packet delivery ratio vs number of obstacles.</title>
     </caption>
     <graphic mimetype="image" position="float" xlink:type="simple" xlink:href="https://html.scirp.org/file/4200309-rId101.jpeg?20251128100450" />
    </fig>
    <p>All protocols “<xref ref-type="fig" rid="fig3">
      Figure 3
     </xref>” show a gradual decline in delivery rate as obstacles increase, but OAGF maintains the best results.</p>
    <p>Obstacles cause packet loss due to link breaks or retransmission failures.</p>
    <p>However, OAGF maintains a high and stable PDR thanks to:</p>
    <p>Thus, OAGF demonstrates high robustness and increased reliability, ensuring continuity of data flow even in difficult communication environments.</p>
    <p>The three curves show that OAGF effectively balances the three key indicators: latency, energy, and reliability.</p>
    <p>It outperforms GEAR and GARL across all metrics thanks to its multi-criteria decision model that integrates:</p>
    <p>This combination gives OAGF better network stability, efficiency, and longevity, confirming its relevance for real-world IoT and WSN applications deployed in complex or physically constrained environments.</p>
   </sec>
  </sec><sec id="s7">
   <title>7. Conclusion and Future Work</title>
   <p>This article has presented OAGF, a robust and energy-efficient geographic routing protocol for wireless sensor networks (WSNs) deployed in obstacle-filled environments.</p>
   <p>The results show significant gains: −31% latency, −38% energy consumption, and +7% reliability compared to recent GARL and GEAR protocols.</p>
   <p>Future prospects include:</p>
   <p>OAGF thus represents a promising advance for critical IoT applications, including environmental monitoring, disaster management, and precision agriculture.</p>
  </sec>
 </body><back>
  <ref-list>
   <title>References</title>
   <ref id="scirp.147637-ref1">
    <label>1</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Rawat, P., Singh, K.D., Chaouchi, H. and Bonnin, J.M. (2013) Wireless Sensor Networks: A Survey on Recent Developments and Potential Synergies. The Journal of Supercomputing, 68, 1-48. &gt;https://doi.org/10.1007/s11227-013-1021-9
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref2">
    <label>2</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Atzori, L., Iera, A. and Morabito, G. (2010) The Internet of Things: A Survey. Computer Networks, 54, 2787-2805. &gt;https://doi.org/10.1016/j.comnet.2010.05.010
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref3">
    <label>3</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Akyildiz, I.F., Su, W., Sankarasubramaniam, Y. and Cayirci, E. (2002) Wireless Sensor Networks: A Survey. Computer Networks, 38, 393-422. &gt;https://doi.org/10.1016/s1389-1286(01)00302-4
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref4">
    <label>4</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Karp, B. and Kung, H.T. (2000) GPSR: Greedy Perimeter Stateless Routing for Wire-less Networks. Proceedings of the 6th Annual International Conference on Mobile Computing and Networking, Boston, 6-11 August 2000, 243-254. &gt;https://doi.org/10.1145/345910.345953
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref5">
    <label>5</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Al-Kashoash, H.A. and Kemp, A.H. (2017) A Comprehensive Study and Classification of Routing Protocols in Wireless Sensor Networks. Ad Hoc Networks, 68, 1-24.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref6">
    <label>6</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Kim, Y.B., Govindan, R., Karp, B. and Shenker, S. (2005) Geographic Routing Made Practical. Proceedings of the 2nd USENIX Symposium on Networked Systems Design and Implementation (NSDI), Boston, 2-4 May 2005, 51-64.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref7">
    <label>7</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Leong, B., Liskov, B. and Morris, R. (2006) Geographic Routing without Planarization. Proceedings of the 3rd USENIX Symposium on Networked Systems Design and Implementation (NSDI), San Jose, 8-10 May 2006, 339-352.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref8">
    <label>8</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Di Caro, G., Ducatelle, F. and Gambardella, L.M. (2005) AntHocNet: An Adaptive Nature-Inspired Algorithm for Routing in Mobile Ad Hoc Networks. European Transactions on Telecommunications, 16, 443-455. &gt;https://doi.org/10.1002/ett.1062
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref9">
    <label>9</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Khan, A.A., Aslam, M.Z. and Afzal, M.K. (2019) GEAR: Geographic and Energy Aware Routing Protocol for Underwater Wireless Sensor Networks. Sensors, 19, Article No. 2547.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref10">
    <label>10</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Li, Z., Li, M. and Liu, Y. (2019) GARL: Geographic Adaptive Routing with Learning for Wireless Sensor Networks. IEEE Transactions on Vehicular Technology, 68, 7005-7018.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref11">
    <label>11</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Razzaque, M.A., Hong, C.S. and Lee, S. (2015) HGSR: Hole-Bypassing Geographic Stateless Routing for Wireless Sensor Networks. Sensors, 15, 31409-31432.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref12">
    <label>12</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Razzaque, M.A. and Lee, S. (2017) EHGSR: Energy-Efficient Hole-Bypassing Geographic Stateless Routing for Wireless Sensor Networks. IEEE Sensors Journal, 17, 3547-3557.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref13">
    <label>13</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Lee, J., Lee, H. and Lee, S. (2019) MGR: Multi-Hop Geographic Routing for Under-water Wireless Sensor Networks. Sensors, 19, Article No. 1342.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref14">
    <label>14</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     Wu, J., Zhang, W. and Li, J. (2022) DeepRL-Routing: A Deep Reinforcement Learning-Based Geographic Routing Protocol for Wireless Sensor Networks. IEEE Access, 10, 74500-74513.
    </mixed-citation>
   </ref>
   <ref id="scirp.147637-ref15">
    <label>15</label>
    <mixed-citation publication-type="other" xlink:type="simple">
     El-Hakim, A., Ahmed, M. and Khamis, A. (2023) E2DRL-WSN: Energy-Efficient Deep Reinforcement Learning Routing for Wireless Sensor Networks. Ad Hoc Networks, 149, Article ID: 103117.
    </mixed-citation>
   </ref>
  </ref-list>
 </back>
</article>