Movement Joystick

by Synthiam

A joystick that controls any movement panel

Requires ARC v6 (Updated 10/31/2022)

How to add the Movement Joystick robot skill

  1. Load the most recent release of ARC (Get ARC).
  2. Press the Project tab from the top menu bar in ARC.
  3. Press Add Robot Skill from the button ribbon bar in ARC.
  4. Choose the Remote Control category tab.
  5. Press the Movement Joystick icon to add the robot skill to your project.

Don't have a robot yet?

Follow the Getting Started Guide to build a robot and use the Movement Joystick robot skill.

How to use the Movement Joystick robot skill

This analog joystick skill controls any movement panel. Rather than using the interface builder to create a custom interface, this can be used to provide an analog movement joystick to any movement panel.

Main Window

User-inserted image

1. Analog Joystick This red analog joystick can be manipulated with the mouse cursor or a touch screen.


User-inserted image

1. Dead Zone Field This value is the threshold the joystick must move by to be registered as a movement. The lower the value, the more sensitive the joystick will be.

2. Max Speed Field Default is already at the Maximum speed (255); you can adjust this value to be lower to slow down the speed of the controlled robot.

3. Reset to center when released Checkbox Leave this box checked if you'd like the joystick to spring back to the center like a physical joystick. Uncheck it if you'd like the joystick to keep its position when you move it.

How to Use Movement Joystick

  1. Open a robot ARC project with a Movement Panel skill and connect to the robot.

  2. Add the Movement Joystick skill (Project -> Add Skill -> Navigation -> Movement Joystick).

  3. Configure the Movement Joystick.

  4. Move the red analog joystick with a mouse or finger, which will move the robot.

Movement Control

The joystick controls the current Movement Panel that has been added to the project. When a Movement Panel is being used that supports variable speeds, you will have the ability to move forward or reverse with a slight right or left turn. The analog stick can be moved to the right or left to rotate the robot or spin it on the spot.

The dead band can be configured, determining how much the joystick must move before registering as a movement. It is also used to determine how large the spin-on-spot (right/left) band is.

User-inserted image


Upgrade to ARC Pro

Experience the transformation – subscribe to Synthiam ARC Pro and watch your robot evolve into a marvel of innovation and intelligence.


Is there a way to get the JoystickX1 JoystickY1 coordinates from the Movement Joystick like you can from an external joystick. I have to send commands to my robot via websockets and it is really easy with a joystick I just send the X1 and Y1 Coordinates and works great although I have to feed through Movement Panel as I can't send direct from joystick.  When I use the  movement joystick the best I can do is send forward / backward and left right speed but I don't have forward or backward speed like I get with physical joystick.

#2   — Edited

I think it would be easier to have a new robot skill that creates those variables. I can whip something up tonight

#3   — Edited

cool thanks !!!

Yeah I am using custom Movement Panel but I just stick the same script in all directions.

ControlCommand("WebSocket Client", "Open", "ws://");
JoyY1 = (getVar("$JoystickY1") / -64000);
JoyX1 = (getVar("$JoystickX1") / 64000);
$WebSocketCommand = '{"command":{"mode":"walk","log":"disable","v_R":[' + JoyY1 + ',0,0],"w_R":[0,0,' + JoyX1 + '0]}}';
ControlCommand('WebSocket Client', 'Send', $WebSocketCommand);

Quick question. If you’re controlling the robot movement via web socket, can’t you use the custom movement panel?


I played around originally with customer Movement Panel but I had this mess. I could add the variables Left_Speed and Right_Speed but it just makes him spin around in circles unless I know forward_speed reverse_speed

ControlCommand('WebSocket Client', 'send', '{"command":{"mode":"rest","log":"disable","v_R":[0,0,0],"w_R":[0,0,0]}}');

ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[-0.02,0.0,0],"w_R":[0,0,0]}}');

ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[0.02,0.0,0],"w_R":[0,0,0]}}');

Rotate Dog Left
ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[0,0,0],"w_R":[0.0,0,-0.06]}}');

Move Forward turning left
ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[-0.02,0,0],"w_R":[0.0,0,-0.06]}}');

Move Backward turning left
ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[0.02,0,0],"w_R":[0.0,0,-0.06]}}');

Rotate Dog Right etc
ControlCommand('WebSocket Client', 'Send', '{"command":{"mode":"walk","log":"disable","v_R":[0,0,0],"w_R":[0.0,0,0.06]}}');


Although now I think about it, I need this to eventually work with the better navigator. Maybe I need to think this through.


Thanks for the tips DJ. I will have another play with mapping Speed tonight.

Custom Movement Panel V2 absolutely. It’s that 50 pound 3D printed robot dog designed by MJBots that uses custom BLDC motors and controllers I was working on a year ago. Finally installed some new motors so trying to get it to work with ARC again.   All sorts of movements from sideways, crouching etc I need the V2 Movement Panel for.