## 2 Materials and Methods
### Control Strategy  
This article focuses on presenting the mechanical design of a novel inspection long-reach cable-driven hyper-redundant robot to confirm its hardware feasibility. Hence, the strategy implemented to control the robot motion, including both the trajectory definition  
Figure 10: Electronic architecture of the robot. Figure 9: Pan and tilt mechanism together with the camera. and the control algorithm, is briefly described here, leaving the stability and performances analyses as future works. The control strategy aims to follow a specific trajectory in the task space, avoiding obstacles and satisfying joint limits. First, the desired joint trajectory is computed offline using an inverse kinematic algorithm based on a null-space approach [34]. The primary task is the joint limits satisfaction, the secondary objective is obstacles avoidance, and the tertiary goal is to follow the desired trajectory in the task space. The general formulation for a null-space inverse differential kinematic problem is written as:  
\[\dot{\mathbf{q}}=\mathcal{J}_{1}^{\ddagger}\mathbf{v}_{1}+\left(I-\mathcal{J}_{1}^{ \ddagger}\mathcal{J}_{1}\right)\mathcal{J}_{2}^{\ddagger}v_{2}+\left(I- \mathcal{J}_{1}^{\ddagger}\mathcal{J}_{1}\right)\left(I-\mathcal{J}_{2}^{ \ddagger}\mathcal{J}_{2}\right)\mathcal{J}_{3}^{\ddagger}\mathbf{v}_{3}\,,\]  
where \(\dot{\mathbf{q}}\) is the joints velocity vector, \(\mathbf{v}_{i}\) is the desired velocity associated to each task, and \(\mathcal{J}_{i}\) is the Jacobian mapping the joint velocity into the \(i\)th task velocity. The joints limit avoidance is performed by defining \(\mathcal{J}_{1}^{\ddagger}\) as a diagonal activation matrix such that  
\[\mathcal{J}_{1_{ij}}^{\ddagger}= \begin{cases}1&\text{if}\quad|q_{i}|\geq q_{ i_{max}}\\ 0&\text{otherwise}\end{cases} \,,\]  
and the element of \(\mathbf{v_{1}}\) as  
\[v_{1_{i}}= \begin{cases}\dot{q}_{i_{i}}&\text{if}\quad q_{i}<-q_{i_{max}}\\ -q_{i_{i}}&\text{else if}\quad q_{i}>q_{i_{max}}\\ 0&\text{otherwise}\end{cases} \,,\]  
where \(q_{i_{max}}\) defines the maximum \(i\)th joint angle and \(\dot{q}_{i_{i}}\) is the desired velocity which allows the joint to move into its range of motion. The obstacle avoidance task firstly requires that the obstacle geometry and properties be defined. Each obstacle is modelled as a sphere with centre \(\mathbf{p}_{c}\) and radius \(r_{o}\). Introducing \(\mathbf{p}_{o}\) as the point of the robot at the minimum distance from the obstacle, and the versor,  
\[\mathbf{n}_{o}=\frac{\mathbf{p}_{o}-\mathbf{p}_{c}}{\|\mathbf{p}_{o}-\mathbf{p}_{c}\|}\,,\]  
it is possible to define:  
\[\mathcal{J}_{2}=\mathbf{n}_{o}^{\ddagger}\mathcal{J}_{\mathbf{p}_{o}}\,,\]  
where \(\mathcal{J}_{\mathbf{p}_{o}}\) is the Jacobian matrix associated to \(\mathbf{p}_{o}\). The parameter \(v_{2}\) is the norm of the desired Cartesian velocity of \(\mathbf{p}_{o}\) that allows the robot to move away from the obstacle. Finally, \(\mathcal{J}_{3}\) and \(\mathbf{v}_{3}\) represent the Jacobian matrix and the desired velocity of the end-effector, respectively. Once the desired trajectory is defined, a non-linear controller is implemented to deal with the elasticity and friction effects introduced by cable-driven actuation. The proposed algorithm exploits the hysteresis phenomenon to reject the sinusoidal disturbance that may lead to system instability, i.e., the velocity output is constant if the error input remains within a specific range, avoiding an oscillating command for the actuators. Figure 11 shows the input-output chart of the controller, while the pseudo-code of the algorithm is reported in Algorithm 1. For each joint, the controller takes as input the angular error, \(e_{k}\), and returns, as output, the reference velocity for the driver of the actuator, \(u_{k+1}\). The discretisation step, \(n_{d}\), and the angular error parameter, \(e_{max}\), were empirically estimated, while \(v_{max}\) is the maximum allowed actuator velocity.