RGB Animator icon RGB Animator Create custom animations for JD Humanoid's 18 RGB Eyes LEDs via I2C - per-LED color frames, transitions, pauses, scripting and real-time preview. Try it →

Release 2012.11.28.00

Desktop — Windows

ARC Release

ARC (Autonomous Robot Control) is Synthiam's flagship desktop robot programming platform. Build, program, and control any robot with powerful AI, 500+ plugins, and a visual no-code interface — all from your PC.

🤖 500+ Robot Plugins
🧠 AI & Machine Learning
☁️ Synthiam Cloud
🖥️ Windows 10 or 11

Change Release Notes

This is a small release regarding Random features of your robot. There was a recent discussion about what "random" really means in programming. Random() is a common function used in computers making unpredictable decisions. However, if you wish to write your own routines for random behavior, perhaps Random() isn't optimized.

As a disclaimer: We encourage people to use the Personality Generator, which uses an algorithm based on trending - not random.

So, the solution? After a bit of brain storming, I came up with a new Random function called GetRandomUnique(). This new function tries to make the returned value unique from the last. This is not a Personality Generator replacement, but it will make your robot much better behaved.

  • EZ-Script controls can be resized
  • New EZ-Script command: GetRandomUnique()
  • EZ-Script compiler optimizations

Here is an Example Project displaying the differences between Random() and GetRandomUnique(): Example-Script-RandomNumberFunctions.EZB

User-inserted image


ARC Downloads

ARC

FREE
$0 always free
  • 1 third-party plugin skill per project
  • Trial cloud services
  • Personal, DIY & education use
  • Updated every 6–12 months
Recommended

ARC

PRO
$8.99 per month
  • Use on 2+ PCs simultaneously
  • Unlimited robot skills
  • Cloud backup & revision history
  • Weekly features & bug fixes
  • Business use permitted

ARC

RUNTIME
$0 always free
  • Load & run any ARC project
  • Read-only mode
  • Unlimited robot skills
  • Includes early access fixes & features
  • Minimum requirements: Windows 10 or higher, 2 GB RAM, 500 MB free disk space.
  • Recommended: Windows 10 or higher, 8 GB RAM, 1 GB free disk space.
  • Prices are in USD.
  • More about each edition: Download & install guide.
  • Latest changes: Release notes.

Compare Editions

Feature
ARC
FREE
ARC
PRO
Get ARC Free View Plans
Usage Personal · DIY · Education Personal · DIY · Education · Business
Early access to new features & fixes
Simultaneous microcontroller connections * 1 255
Robot skills * 20 Unlimited
Skill Store plugins * 1 Unlimited
Cognitive services usage ** 10 / day 6,000 / day
Auto-positions gait actions * 40 Unlimited
Speech recognition phrases * 10 Unlimited
Camera devices * 1 Unlimited
Vision resolution max 320×240 Unlimited
Interface builder * 2 Unlimited
Cloud project size 128 MB
Cloud project revision history
Create Exosphere requests 50 / month
Exosphere API access Contact Us
Volume license discounts Contact Us
Get ARC Free View Plans

* Per robot project

** 1,000 per cognitive type: vision recognition, speech recognition, face detection, sentiment, text recognition, emotion detection, azure text to speech


ARC Pro

Upgrade to ARC Pro

Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.

#9  

I understand the varibles are numeric but can they also be strings with the examples given. I realize this thread is not about programming but a simple yes or no can send " my hounds in the right direction" . Thanks in advance.

Author Avatar
Canada
#10  

@irobot58 you could pre-assign strings with variables that correspond within the numerical range that you set in the GetRandomUnique()

I was playing around with different spoken words and phrases before this new command... that worked fine, and now it is even better:)

Here is a simple example... My coding abilities are 30+ years out of date:P


# Randomly choose 10 numbers 
# and say numbers out loud.
#-------------------------------

$y = 0

:Start
$y = ($y + 1)

$x = GetRandomUnique(1, 10)

Print ($x)

if ($x = 1)
Say("One")

if ($x = 2)
Say("two")

if ($x = 3)
Say("Three")

if ($x = 4)
Say("Four")

if ($x = 5)
Say("Five")

if ($x = 6)
Say("Six")

if ($x = 7)
Say("Seven")

if ($x = 8)
Say("Eight")

if ($x = 9)
Say("Nine")

if ($x = 10)
Say("Ten")

If ($y = 10)
Goto(end)

Goto (Start)

:End
Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#11  

Oh that's a good one gunner. I expanded on your example with this:)

Project File: Example-Script-RandomSpeech.EZB


$nounInt = GetRandom(1, 6)
$adjInt = GetRandom(1, 6)
$verbInt = GetRandom(1, 6)

if ($nounInt = 1)
  $noun = "resistors"
if ($nounInt = 2)
  $noun = "transistors"
if ($nounInt = 3)
  $noun = "microchips"
if ($nounInt = 4)
  $noun = "diodes"
if ($nounInt = 5)
  $noun = "circuits"

if ($adjInt = 1)
  $adj = "burnt"
if ($adjInt = 2)
  $adj = "brand new"
if ($adjInt = 3)
  $adj = "solid state"
if ($adjInt = 4)
  $adj = "high resistance"
if ($adjInt = 5)
  $adj = "low resistance"

if ($verbInt = 1)
  $verb = "eat"
if ($verbInt = 2)
  $verb = "hate"
if ($verbInt = 3)
  $verb = "love"
if ($verbInt = 4)
  $verb = "destroy"
if ($verbInt = 5)
  $verb = "use"

speakStop()
say("I $verb $adj $noun")
print("I $verb $adj $noun")
Author Avatar
Canada
#12  

I like it:) Funny and much better use of variables and code layout... I'll relearn eventually:P

#13  

@DJ, I just tried the SendSerial tonight with the latest release, it's working without locking up, and I can now send complete sentences without any problems.

You must of done something or is it me?

Thanks

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#14  

@charleybot nothing was changed. glad to hear it works for what ever magical reason:)

Author Avatar
Canada
#15  

Those sneaky little Roboticist elves working away at night again;)

#16  

Hi all,

Yep after 4 years I'm finally getting to the point where I'm working in random routine responses into my robot. I ran into an odd occurrence with my scripting so I dug up this old thread talking about this function.

Anyway, I've written a script that will randomly choose a sound clip from a randomly chosen actor. In the actual script, each actor is divided into their own subsection. In this actor's section are commands to play sound files that will be randomly chosen. Clear as mud? :)

The problem is if I have a list of choices the last on in the list will never get picked. This happens with either the GetRandomUnique() or the GetRandom() command.

For example if I've written $response = GetRandomUnique(1,4) the 4th number will never generate.

I just had a thought; Is it the way I'm starting my numbering system? Do I need to start with 0?

Here's my code so far. Works pretty good except I can never get the last choice on the list to get picked. Any ideas? Thanks.


# Choose a random actor and speak a phrase before going to their subsection.
$response = GetRandomUnique(1,3)

# Response depending on random number
if ($response = 1)
  ControlCommand("Soundboard v4", Track_61)
  Sleep(2000)
  Goto(Dr_Smith)
ELSEif ($response = 2)
  ControlCommand("Soundboard v4", Track_72)
  Sleep(2000)
  Goto(R2D2)
ELSEif ($response = 3)
  ControlCommand("Soundboard v4", Track_77)
  Sleep(2000)
  Goto(Will)
endif

  # -----------------------------------------
:Dr_Smith
# Speak a random phrase from 1 to 10
$DRresponse = GetRandomUnique(1,10)

# Response depending on random number
if ($DRresponse = 1)
  ControlCommand("Soundboard v4", Track_62)
ELSEif ($DRresponse = 2)
  ControlCommand("Soundboard v4", Track_63)
ELSEif ($DRresponse = 3)
  ControlCommand("Soundboard v4", Track_64)
ELSEif ($DRresponse = 4)
  ControlCommand("Soundboard v4", Track_65)
ELSEif ($DRresponse = 5)
  ControlCommand("Soundboard v4", Track_66)
ELSEif ($DRresponse = 6)
  ControlCommand("Soundboard v4", Track_67)
ELSEif ($DRresponse = 7)
  ControlCommand("Soundboard v4", Track_68)
ELSEif ($DRresponse = 8)
  ControlCommand("Soundboard v4", Track_69)
ELSEif ($DRresponse = 9)
  ControlCommand("Soundboard v4", Track_70)
ELSEif ($DRresponse = 10)
  ControlCommand("Soundboard v4", Track_71)
endif
Halt()
#------------------------------------------------------------------

:R2D2
# Speak a random phrase from 1 to 4
$SWresponse = GetRandomUnique(1,4)

# Response depending on random number
if ($SWresponse = 1)
  ControlCommand("Soundboard v4", Track_73)
ELSEif ($SWresponse = 2)
  ControlCommand("Soundboard v4", Track_74)
ELSEif ($SWresponse = 3)
  ControlCommand("Soundboard v4", Track_75)
ELSEif ($SWresponse = 4)
  ControlCommand("Soundboard v4", Track_76)
endif
Halt()
#------------------------------------------------------------------

:Will
ControlCommand("Soundboard v4", Track_78)
Halt()