Release 2017.06.23.00

Download and install the latest ARC robot programming software to experience these updates.


- When ez-bits are missing, do not allow user to SKIP. Now first time users must SYNC or CLOSE. Skip is no longer an option.

- Script Flow control bug fix for 3rd party controls. Find out more about script flow by clicking HERE

- Dynamic Turning with camera control Movement Tracking (see below)

This is a fun release because it has a pretty significant update to the camera movement tracking. The movement tracking is a setting in the camera configuration which tells the robot to physically follow the specified tracking type using the movement panel. Of course, a Movement Panel is required in the project for this to work. The old movement tracking would stop the robot and turn toward the object. This new addition uses a Dynamic Turning option. This means the robot will turn toward the object while moving forward. The further the object is to the edge of the screen, the harder the robot will turn in that direction.

User-inserted image

1) Enabling this checkbox instructs the camera control to use the Movement Panel and have the robot physically follow the object.

2) Enabling Speed Settings tells the robot to use the specified speeds when tracking with the movement panel. Forward, Left and Right speeds can be specified and tested here.

3) Enabling Dynamic Turning will have the robot turn toward the object at a variable speed. The values in this area are the SLOWEST speed the robot's wheel will turn in that direction. This means SLOWER = MORE TURNING. The further the detected object is from the center grid lines, the faster the robot will turn. Having this number as low as possible is usually best. For Roli, it would be set for a 1

Here is an example of the robot NOT using dynamic turning. Notice how the robot STOPS and TURNS and STOP and TURNS and STOPS and TURNS, etc...

Here is an example of the robot USING dynamic turning. Notice how the robot continues straight while tracking the object...
@DJ Nice work! As usual. These refinements in steering and navigating are really going to benefit IPS especially....Until recently I didn't think it would be possible but I really think I can have an inMoov or inMoov type robot serve drinks at one of our (Sue's) house parties. I mean actually do it and not be just be a novelty or topic of conversation because it just looks cool... I keep saying this but I will be doing another video eventually on this kind of theme... Thanks for your hard work...:)
ah dynamic turning, can this apply to a custom movement panel? Like a robot moving forward but then turn SOME to the right without stopping. Similar to how you would expect a rc car to gradually move left or right as it is already going forward?
You described what dynamic turning is. So I'm uncertain about the question.

Any Movement Panel that supports speeds for left and right wheel can use dynamic turning option. Obviously the Movement Panel will need to support the left and right wheel speed settings. If you're using a custom Movement Panel due to some unsupported hardware, ensure your code is using the GetSpeedLeft() and GetSpeedRight() values for your hardware.
@DJ I pretty much get what you saying... So let me get this straight... In the instance of using the custom Movement Panel (not the built in sabertooth movement panel) with a sabertooth controller (this is usually my setup). In order to use dynamic turning I will have to use or manipulate GetSpeedLeft() and GetSpeedRight() variables in order to drive the sabertooth channels correctly... Or just use the built in Sabertooth control? Do I have this straight?

The built in sabertooth controller supports speed, so dynamic turning applies. Speed means the speed of what a wheel turns. If you were to go full speed, the wheel will turn X number of times per minute. If you go half speed, the wheel will turn X/2 Per minute, etc.

The speed ability is what allows the robot to dynamically turn.

Without speed ability in a movement panel, there's no way to adjust the speed of a wheel. Controlling the speed of a wheel is necessary for dynamic turning.

A robot cannot dynamically turn if the wheel speeds cannot be controlled. The only way a robot can turn without wheel speed is to stop the wheel.

Stopping a wheel is not dynamic. Stopping a wheel to turn is binary.

Dynamic turning uses the wheel speed to turn. Dynamic turning will slow the wheel down in the direction the robot needs to turn. Without wheel speed control, dynamic turning cannot work and your robot will always move straight.
@DJ Thanks got it my friend... :) This will work nicely with my roomba's too...
I don't think the roomba has speed control, does it? I forget
@DJ I am not sure about the built in roomba control as I mostly use the custom movement panel. But yes, the Roomba does use speed control... Even if it doesn't exactly match up to GetSpeedLeft() and GetSpeedRight() simple math will correct for variations...
Getspeed and setspeed is a number between 0-255

If there are two speed sliders on the roomba control, then it supports two speeds and will work with dynamic turning.
@DJ The Map() function could be useful when 3rd party hardware doesn't match 0 - 255 as a speed control. Anyway, I think your dynamic turning ( and ez scripting) is pretty flexible and probably can be used with any 3rd party robot or controller... A little bit of math never hurt anyone...:)
All ezrobot controls for speed accept 0-255. There's an internal mapping function in ARC for that.
Show me your roomba code and i'll show you how to turn it into a plugin with speed ability if you want
@DJ Here is a project I created when I was messing with roboRealm for visual navigation. It should provide you with info on how I use the custom Movement Panel and getting other info from the roomba... I am a little embarrassed because I am a little bit of a messy coder... :)... Let me know if you need anything else...
Yeah looks like you should be using the Map function. Here's how to use it...


Map( input, inputMin, inputMax, containerMin, containerMax )
Returns a scaled value of input between containerMin and containerMax. Specify the known input’s minimum and maximum values, and the known container (output) values. For example, if you were to scale a value between -1 and 1 to 0 and 180, enter this, which returns 135.
Example: $x = Map(0.5, -1, 1, 0, 180)

User-inserted image
This will work fantastic with IPS... I am almost as excited as when I first got my ezb3 4 years ago... :)
@DJ, thanks for this new release. You've been pumping these great releases out, it will take me 3 more years to caught up. :). You must have figured out how to clone yourself.