# Virtual Joystick

The virtual joystick can be used with the hand tracking feature in the AMAS app.

<figure><img src="https://github.com/Extend-Robotics/Documentation/blob/main/.gitbook/assets/image%20(22).png" alt=""><figcaption></figcaption></figure>

To control the robots using the virtual joystick, the user must grab the sphere and move or rotate it in a particular direction to achieve the desired motion.

The video demonstration below briefly explains interaction with the virtual joystick.

{% embed url="<https://www.loom.com/share/0c61c551c501491abac91a89580d7598?sid=71a1bb34-4c5f-4abb-9b39-78a6be702382>" %}

The mobile robots can be driven in a differential or omnidirectional configuration depending on their complexity.

Below are listed the possible inputs for a particular type of drive system and a description of the resultant motion.

{% tabs %}
{% tab title="Diferential Drive" %}

<table><thead><tr><th width="233">Joystick input</th><th width="192">Drive mode/type</th><th>Movement</th></tr></thead><tbody><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/Rp30jy9j8xNK8KMFXaDl/image.png" alt="" data-size="original"></td><td>Forward/Backwards</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/wa24cdUY9rB8IlicNcE0/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/J7gmGBoUfVb4dtViHWy5/image.png" alt=""></td><td>Spin</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/WkoywPHNyMMxm39NOOX7/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://github.com/Extend-Robotics/Documentation/blob/main/.gitbook/assets/Ackerman_Joystick" alt=""></td><td>Ackerman drive</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/A1zK8TBmKXvcf7tJEcca/image.png" alt="" data-size="original"></td></tr></tbody></table>
{% endtab %}

{% tab title="Omnidirectional Drive" %}

<table><thead><tr><th width="236">Joystick input</th><th width="185">Drive mode/type</th><th>Movement</th></tr></thead><tbody><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/Rp30jy9j8xNK8KMFXaDl/image.png" alt="" data-size="original"></td><td>Forward/Backwards</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/wa24cdUY9rB8IlicNcE0/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/Q5gRNj8Ahhe4bzmGQIur/image.png" alt="" data-size="original"></td><td>Side to side</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/j7QOnNz7WnXnwdbY6HHy/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/J7gmGBoUfVb4dtViHWy5/image.png" alt="" data-size="original"></td><td>Spin</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/WkoywPHNyMMxm39NOOX7/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/WHhWIo7nB9WzSuz9YL4P/image.png" alt="" data-size="original"></td><td>Crab mode</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/44CmEjhkAjvY6hG7vi60/image.png" alt="" data-size="original"></td></tr><tr><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/DYmAvpBs9rgPQ2mfAwEr/image.png" alt="" data-size="original"></td><td>Ackerman drive</td><td><img src="https://content.gitbook.com/content/AYPxuZnjNE7kMCpYOEQa/blobs/A1zK8TBmKXvcf7tJEcca/image.png" alt="" data-size="original"></td></tr></tbody></table>
{% endtab %}
{% endtabs %}
