## 3 Obstacle Avoidance Model by Harmonic Potential Field with Curvature Constraint
### Pure Pursuit Controller for Mobile Robots  
We assume that an initial streamline is chosen based on the initial robot configuration and an a priori known obstacle distribution, taking into consideration the curvature constraint. This initial path may collide with obstacles. To ensure the safe and smooth navigation, one subsystem of our obstacle avoidance system in Figure 11 is to make the robot redirect from following one streamline to an alternative streamline at a look-ahead distance via a local, online pure pursuit algorithm without violating curvature constraint. Figure 12 shows the plots of a streamline-changing circular path for redirecting the mobile robot from its current pose to a subgoal on another streamline via pure pursuit. The details are as follows. Pure pursuit is a path tracking method by calculating the curvature of a new circular path for a vehicle to pursuit a subgoal position ahead of the vehicle by leaving the initially planned path from its current position [20; 21], where the orientation of the subgoal is not concerned. Due to the fact that non-holonomic mobile robots cannot directly move in the lateral direction, a robot pursues a subgoal position ahead of the robot to redirect from its current position along an arc of curvature \(\kappa\) via pure pursuit. Since the obstacle avoidance path can be computed analytically according to the relative position of the robot and obstacle and shape and size of the obstacle, this method has an implementation advantage. Once a streamline is selected for streamline-changing, the next step is to find a subgoal point \(\mathbf{X}_{g}\) which is located after the closest point in the global coordinate. Let a local coordinate system be attached to the robot with its origin set as the rotation center of the robot and the \(+x\)-axis of the local frame aligned with the forward motion direction. Then transform a subgoal point \(\mathbf{X}_{g}\) in the global coordinate to \(\mathbf{x}_{g,Robot}=[\mathbf{x}_{g}\,y_{g}]^{\mathrm{T}}\) in the local frame with \(x_{g}\) and \(y_{g}\) denoting the longitudinal and the lateral displacements, respectively:  
\[\mathbf{x}_{g,Robot}=\mathrm{R}(\theta)(\mathbf{X}_{g}-\mathbf{X}_{Robot}), \ \mathrm{R}(\theta)=\left[ \begin{array}{cc}\cos(\theta)&\sin(\theta)\\ -\sin(\theta)&\cos(\theta)\end{array} \right] \tag{10}\]  
where \(\mathbf{X}_{Robot}\) is the current robot position in the global frame, and \(\theta\) is the heading angle of the robot in the global frame. The subgoal point \(\mathbf{x}_{g,Robot}\) in the vehicle coordinates can be represented with curvature \(\kappa\) and \(\alpha\) by geometry:  
\[ \begin{array}{l}x_{g}=r_{c}(\cos(\alpha)-1)=\frac{\cos(\alpha)-1}{\kappa}\\ y_{g}=r_{c}\sin(\alpha)=\frac{\sin(\alpha)}{\kappa}\end{array}  \tag{11}\]  
where \(\alpha\) is the angle of the arc between the vehicle and the subgoal (see Figure 12). The subgoal point to pursue keeps a specific look-ahead distance \(L=\sqrt{x_{g,Robot}}^{2}+y_{g,Robot}^{2}\), since non-holonomic robots cannot correct errors directly with respect to the nearest point on the path. Figure 12: The smooth transition for redirecting the mobile robot from its current pose on current the streamline to a subgoal on the target streamline via pure pursuit. Now the equations of the pure-pursuit curvature control law are derived. The curvature \(\kappa\) of the vehicle is defined as the inverse of the distance \(r_{c}\), also called the radius of curvature, between the vehicle's frame origin and its instantaneous CoR (center of rotation). Second, the curvature also represents the instantaneous change of the vehicle heading angle \(d\theta\) with respect to the traveled distance \(ds\). Hence, curvature is formally defined as follows:  
\[\kappa=\frac{1}{r_{c}}=\frac{d\theta}{ds} \tag{12}\]  
In implementation, curvature can be defined as the instantaneous change of the heading angle \(\Delta\theta\) with respect to the travel distance \(U\cdot\Delta t\) in one sampling time \(\Delta t\).