# Controller for Non-holonomic agents

I have designed a certain controller for a group of holonomic agents (I was assuming that they were holonomic and that they were able to move in the 3D space)

Now I want to use the same controller to control a group of non-holonomic agents (unicycle-like robots) which are just capable to move on the plane. Their model is

$\begin{split} v_x = v\cdot \cos{\theta}\\ v_y = v\cdot \sin{\theta}\\ \dot{\theta}=\omega \\ \end{split}$

Where $v_x,v_y,\dot{\theta}$ are respectively the linear velocities along $x,y$ and the angular velocity around $z$.

$v,\omega$ are the only control inputs I have. Respectively linear and angular velocity.

How would you conceptually do it ?

I implemented the previous controller in MATLAB/SIMULINK

Thanks.

You can extend you state, such that the relative degree from each input to each output becomes the same. This can be done as follows,

$$v_x = v \cos\theta,$$

$$v_y = v \sin\theta,$$

$$\dot{v} = a,$$

$$\dot{\theta} = \omega.$$

So,

$$\dot{v}_x = a \cos\theta - v\, \omega \sin\theta,$$

$$\dot{v}_y = a \sin\theta + v\, \omega \cos\theta,$$

or

$$\begin{bmatrix} \dot{v}_x \\ \dot{v}_y \end{bmatrix} = \begin{bmatrix} \cos\theta & -v\sin\theta \\ \sin\theta & v\cos\theta \end{bmatrix} \begin{bmatrix} a \\ \omega \end{bmatrix}.$$

As long as $v\neq0$ then this matrix is invertible and you can linearize and decouple this system using,

$$\begin{bmatrix} a \\ \omega \end{bmatrix} = \begin{bmatrix} \cos\theta & -v\sin\theta \\ \sin\theta & v\cos\theta \end{bmatrix}^{-1} \begin{bmatrix} u_x \\ u_y \end{bmatrix},$$

$$\begin{bmatrix} \dot{v}_x \\ \dot{v}_y \end{bmatrix} = \begin{bmatrix} u_x \\ u_y \end{bmatrix}.$$

• Thanks fibonatic for the great reply. This was more or less what I had in mind while I was thinking to this problem. I didn't understand fully what you want to say with the last set of 2 equations. If I want to reach a set of desired positions it seems that, with your proposed algorithm, I need always to have a certain velocity $v\neq0$. Another thing is: my control inputs now are 2 accelerations? – kalmanIsAGameChanger Mar 9 '17 at 16:34
• @minidiable The last two equations basically show a transformation of virtual inputs, to the actual inputs, such that when using the virtual inputs the system is linear and decoupled. So you can apply simple linear control methods in order to design a control law. For example $u_x = -v_x$ and $u_y = -v_y$ would work, maybe you have to add a little more if you also want to control the x and y positions as well, but you can still find a linear control law which makes the system (exponentially) stable. But you are right that you would run into trouble when $v=0$ (constant position). – Kwin van der Veen Mar 9 '17 at 23:29
• Hi thanks again for the reply. I am trying to understand better what you described. So, as far as I understood we shift from a controller which has as controlling input the linear velocity $v$ and angular velocity $\omega$ to one which has linear acceleration $a$ and angular velocity $\omega$. We said that when $v=0$ the controller won't work. This happens also for $\theta=\pm\frac{k\pi}{2}$ with $k\in \mathbb{N}$ . Correct? – kalmanIsAGameChanger Mar 10 '17 at 14:49
• @minidiable No, if $v\neq0$ then this matrix will always be invertible for all $\theta$. For example take $v=1$ then this matrix is just a rotation matrix, whose inverse is equal to its transpose. – Kwin van der Veen Mar 10 '17 at 15:00
• Yeah sorry. I made a mistake :) – kalmanIsAGameChanger Mar 10 '17 at 17:29