## 3 Obstacle Avoidance Model by Harmonic Potential Field with Curvature Constraint
### Multiple Obstacles Avoidance Strategies  
In an environment composed of multiple obstacles, previous researchers provided several different methods to create a guidance vector field. The weighted superposition of a single obstacle is the most commonly used method for multiple obstacles (e.g., Reference [6; 8; 11; 12; 15; 18]). Though the sum of HPFs is also HPF (hence, free of local minima), the superposition has no guarantee to satisfy the curvature constraint. Hence, we propose a new avoidance strategy for multiple obstacles.  
(1) Superposition of multiple obstacles  
A weighted velocity field of each obstacle vector field not only guarantees no local equilibria in the workspace, but also satisfies the zero Neumann boundary condition on every boundary of an obstacle. In multiple obstacles, the path tangent or vector field at each point corresponds to the streamline of the flow with velocity defined by the weighted superposition of velocity which is induced by an individual obstacle. The total influence of all obstacles in an environment with \(N\) obstacles on the velocity field \(\mathbf{V}_{total}\) can be expressed as the weighted sum of \(N\) velocity fields of \(\mathbf{V}_{1},\ldots,\mathbf{V}_{N}\) for each obstacle  
\[\mathbf{V}_{total}\mathbf{V}_{total}=\sum_{i=1}^{N}w_{i}\mathbf{V}_{i} \tag{16}\]  
Figure 13: Replanning via pure pursuit paths starting at a fixed position with a set of subgoals determined by different look-ahead distances. The pursuit paths with look-ahead distance 0.1 and 1 intersect with the obstacle, while the pure pursuit path with a look-ahead distance of 0.5 is collision-free.  
where \(w_{i}\) is the position-dependent weighting function for obstacle \(i\). One can design \(w_{i}=\prod_{j\
eq i}^{N}\frac{d_{i}}{d_{i}+d_{j}}\) with \(d_{i}\) denoting the shortest distance between the robot and the obstacle \(i\). This design makes the closest obstacle have the largest weight. In real-time applications, Equation (16) is calculated for only all of the obstacles detected within the sensing range or a user-defined safety zone.  
The proposed strategy  
We identify three primitive paths once the robot's initial pose, maximum allowable curvature, obstacle's position, and radius are given. Figure 14 summarized the discussions so far as a flowchart of hydrodynamic path planning in combination with pure pursuit in a multiple obstacles situation. In the multiple obstacles situation, we initialize a queue called _poseRobotArray_ to store the robot's initial pose. While the queue is not empty, we assign the first element of _poseRobotArray_ to _poseRobot_ and pop the first element of the queue. Then, we move the robot forward to the target to check whether the path is collision-free. If no obstacles are detected on the path, we store the path into _pathArray_. Otherwise, we generate three primitive paths to avoid the detected obstacle. For each generated path, we check if it collides with any other obstacle. If it is still collision-free, we store the robot's final pose into _poseRobotArray_. On the other hand, we check if the collision happened before or after passing the first obstacle. If the collision happened before the first obstacle, we generate three primitive paths to avoid the new obstacle from the robot's initial pose. In contrast, we set the location of the closest point on the path to the original obstacle as _poseRobot_ and then avoid the new obstacle. Finally, we select the optimized path from _pathArray_.