How to add the Custom Movement Panel robot skill
- Load the most recent release of ARC (Get ARC).
- Press the Project tab from the top menu bar in ARC.
- Press Add Robot Skill from the button ribbon bar in ARC.
- Choose the Movement Panels category tab.
- Press the Custom Movement Panel 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 Custom Movement Panel robot skill.
How to use the Custom Movement Panel robot skill
Use this skill if your robot requires a motor/movement controller that is not supported. You may assign scripts to the Forward, Backward, Left, Right, and Stop commands.Script functions are also available to you to obtain the currently selected speed of both Left and Right wheels. You may modify the speed using SetSpeed(value). The speed values may be altered by any joystick-style skill that affects speed, such as the Joystick in Mobile Interface or a physical joystick using the Joystick Control.
Main Window

1. Movement Panel
These buttons will allow you to control the directional movement of the entire robot (left, right, forward, reverse, and stop).
2. Speed Sliders
You can select the speed of the servos with these sliders. Be aware that the speed range is (0-255), and the default settings are 100% (255). These sliders can allow you to adjust for one motor is faster than the other.
Settings

1. Stop Script
This script will stop the moving robot. It will also activate when the Stop() script is called.
2. Direction Scripts
These scripts will control which way the robot will move when the movement panel buttons are pressed, or movement scripts are called [ex: Forward()].
3. Speed Changed Script
This script will execute when the speed sliders are adjusted in the main window or when the setSpeed() script is called.
How to Use Custom Movement Panel
1) Physically connect your robot to an EZ-B.
2) Add the Custom Movement Panel Skill to your ARC project (Project -> Add Skill -> Movement Panels -> Custom Movement Panel).
3) In the Settings menu, enter the scripts you would like to use for each of the directions and stop.
4) In the main window, press the direction buttons to move your robot. If the directions seem reversed, you can change your scripts.
Code Samples
Available EZ-script functions to obtain the current speed are:
GetSpeed( )
Returns the global Movement Speed value
Speed is between 0 and 255
The speed can be viewed in the Script Variable Viewer
Example: $x = GetSpeed()
GetSpeedLeft( )
Returns the global Movement Speed value of the Left wheel
Speed is between 0 and 255
The speed can be viewed in the Script Variable Viewer
Example: $x = GetSpeedLeft()
GetSpeedRight( )
Returns the global Movement Speed value of the Right wheel
Speed is between 0 and 255
The speed can be viewed in the Script Variable Viewer
Example: $x = GetSpeedRight()
Resources
Read more about how Movement Panels work here.
Related Tutorials
tutorial

Control More Than One Robot
How to control more than one robot in a single EZ-Builder project. This tutorial uses Revolution robots that depend on...
tutorial

The Robot Program Episode 006: Introducing ARC
This lesson introduces the EZ-Builder Robot Software by exploring options and describing features. At the end of this...
Related Robots
Related Questions
question

Adjusting Encoders On A Roboclaw 2X15
Was wondering whos the resident expert here on using the Roboclaw Motor controllers here? I am aware that it operates...
question

HELP NEEDED FOR 21DOF EZB HUMANOID ROBOT
I have been struggling to assign servo positions to my robot. Old videos are either removed or are too old and doesn't...
question

JSON To Mjbots Quad Robot Series
My robot wants to communicate via JSON commands (it is controlled via JSON from a browser) but I need to use ARC to talk...
Upgrade to ARC Pro
Harnessing the power of ARC Pro, your robot can be more than just a simple automated machine.
I'm working with mecanum wheels and it's a lot of fun! The custom Movement Panel works great for controlling 2 H-bridges with individual wheel control.
But I had a few questions for you:
1. Would it be possible to add diagonal buttons to the custom movement panel?
2. Could you use a combination of arrow keys to activate the diagonal buttons?
(ex: up and right keyboard keys pressed together activates the forward-right diagonal movement)
3. Could this also work with the Movement Joystick skill?
(ex: Moving the joystick in-between the forward and right position activates the forward-right diagonal movement)
Here's a picture of all the movements mecanum wheels can do:
This would be a bonus, that couldn't work with the joystick, but is it also possible to have buttons to activate: Turning left, turning right, and curved trajectories?
forward is forward but with a left and right speed. That’s how you get diagonal.
Use another Movement Panel to see how the joystick behaves. You’ll notice diagonal and everything you asked for exists. So write that in your own custom movement panel.
1) Here's a project with a Movement Joystick and Custom Movement Panel. You don't have to use a movement joystick, you can use a real joystick or whatever you want. This example is showing this. They're all compatible though because the custom Movement Panel takes care of it.
2) When the movement joystick is pushed forward all the way, you'll see the speed on the custom Movement Panel go to the max value. The max value can be specified by the movement joystick or whatever joystick robot skill you use. See how it's going forward with both speeds at 255.
3) Now let's go diagonal North-East direction. See how the LEFT speed maintained 255 and the RIGHT speed lowered, but we're still going "Forward". That's because we're going forward at an angle.
So what you're code can do is take the speed from using Movement.getSpeedLeft() and Movement.getSpeedRight() and turn that into a speed for your robot controller. If your robot controller accepts some value between 0-100, then you'll have to map the ARC speed (0-255) to 0-100. That's easy using the Map Range command.
Mapping a range to another range is easy like this... So we'll pretend that your Forward Custom Movement Panel script needs to map ARC 0-255 to 0-100. Then you do this...
Code:
In the example above, your variables newSpeedLeft and newSpeedRight contain the newly mapped speed value for the controller.
Sorry I didn't reply. I did get it figured out on Sunday night. I wanted to post today but ran out of time. After you mentioned using the speed values I started messing around with the Joystick and seeing the speed values change (just as you described above). The key discovery for me was figuring out where to grab the speed values. I finally noticed the "Speed Changed" Script area and placed the following code into there:
I then placed those speed values into PWM commands (0-255) for the 2 x Dual H-Bridge enable lines, for example:Code:
After I got that figured out I went back to try using the keyboard and had to reset the Speed value for left and right manually. Obviously, the Joystick skill sets the speed values to zero after it springs back to the center. I guess I could disable the check box in the Joystick settings that resets it to center when released.Code:
After doing some fooling around with the Joystick control I found that changing the speeds could allow the mecanum wheel robot to move in a curved trajectory when moving forward-right, forward-left, backward-right, and backward-left.
I love the strafe movement that mecanum wheels allow you to do, so it felt like I was still missing the strafe movements for the diagonal movements of forward-right, forward-left, backward-right, and backward-left.
I know I can just script those motions to happen by disabling the corresponding wheels in code but in order to switch between "Strafe mode" and "Curved Trajectory Mode" I would need to create some more scripts. I would also need to devise a way to switch between the modes. It seems that it would be a one or the other scenario, Strafe or Curved Trajectory mode.
In my journey, I found that the Movement Panel skills don't allow for multiple arrow keys to be detected, only the first detected key. Is that a windows thing? I would love to have the ability to activate the diagonal movements with the keyboard. I know that would require diagonal buttons (NW, NE, SE, and SW), pictured in yellow, and corresponding script sections for each. I'm not sure if that is even possible but I would love it!
*Edit: Whoops just noticed that PWM takes (0-100) values so yes, I would need to remap the values as you suggested in your post.
*Edit 2: I forgot to mention that I noticed that if you enter the speed values in the "Left Speed" and "Right Speed" sliders of the Custom Movement Panel skill manually by right-clicking and entering the values with your keyboard (making sure to hit "enter" to confirm the change) the values don't take. If you use the sliders themselves it works, but using the keyboard to enter values seems to be not working for me.
key control: https://synthiam.com/Support/Skills/Navigation/Key-Control?id=16058
My custom Movement Panel ( yes I just updated to the lates10.3.2021 version) still shows two slider bars bext to the directional arrows.
Which one is the correct latest one and how I get it? Thanks
I feel we are pushing the limits of the custom movement panel. I am using key control and custom Movement Panel but they don't all work together. We really need 2 joysticks and 2 movement panels or even better a new Movement Panel skill that is specifically designed for mecanum wheels.
ServoUp(1.D3, 20)
When I push the button, it increments correctly. However when I push it a second time it does not respond. Is there there something I am missing that would allow it to continuously increment over and over again, continuously turning left? With its current funtionining, it is basically just activating a frame/gait control one-time movment.
EDIT: It works properly when movement is triggered from another skill. It seems its just the arrows that only allow one iteration
am gessing
:loop
sleep(300)
Servo(D3,1,180)
sleep(300)
goto(loop)
You can only go one direction at a time. If you are walking forward, you can't go any more forward because you're already walking forward.
Maybe you want to create an interface builder and add buttons incrementing the servo position each time the button is pressed.
Here is the proper example:
Servo (servoPort, position)
I think DJ has hit it on the head. The OP will have to use a script and attach it to a button. His script looks correct to move one servo position value at a time using the command ServoUp(). To move the other way he'd attach a second script to a second button he's using and with the command: ServoDown (servoPort, count).
@elektrophunktronic, I see in your code you are using .1 to start your statment inside the (). Are you using more then one EZB? If not you dont have to use that part of the command. EZ Script knows to look for only one EZB if you are connecting only to one. Now, if you have more then one connection then you would start numbering them in your command. 1. 2. 3. and so on. Please forgive if you already know this.
Good luck and have fun!!