Asked

Running Multiple Personality Generator Skills

I've been toying with the idea of installing a second personality generator skill in myARC project that operates three EZBs in my robot. While I haven't actually installed a second one, I "think" ARC may allow me to run two of these skills simultaneously. Please let me know if I'm wrong.

WHY?

Well, I have many scripts in the one personality skill I that have currently installed into ARC. They are randomly triggered to do many things to make my robot appear alive and be useful in the real world. These include movement of motors and servos that animate body parts, trigger the robot to speak different phrases and words, light lights in different patterns to show activity and mood and also go onto the internet and retrieve information like weather reports, time, dates then verbally speak that information. Sometime all this will happen within the same animation script. Think DisneyLand Robots on steroids. LOL.

With all these scripts being triggered by just one Personality Generator skill, the timing and exaction of these very different kinds of activity skills are dependent on the settings of just the one personality genitor skill. Along with this, the skill itself picks randomly the script to run. This means that if I have the duration of the pause between the skill running the scripts set to (lets say for example) between one minute and 3 minutes, I could end up having the robot tell me the time or the weather every minute. This has happened many time and it gets monotonous.

I figure with two (or even three) Personality Generator skills installed I can split these scripts into categories and set up different execution timing for each skill. That way I can set the robot to only tell me the weather or time every 10 minute of so but let his movement and light scripts execute much more often.

So my questions are;

  • Is it actually possible to install more then one (maybe two or three) personality generator skills in ARC and run them at the same time?
  • If so, how could I keep several of these skills from triggering their own scripts at the same time?
  • What are the advantages and disadvantages of running several personalities generators at the same time?
  • Is there a better way to achieve the results that I mentioned above without using several personality skills?
  • Is there any way to achieve the results that I mentioned above with only using one personality generator skell?
  • Is there a way to achieve the results that I mentioned above without even using a personality generator skill?

Thanks in advance for sharing your thoughts and insights.


Related Hardware EZ-B v4

ARC Pro

Upgrade to ARC Pro

Stay at the forefront of robot programming innovation with ARC Pro, ensuring your robot is always equipped with the latest advancements.

PRO
Canada
#1  

Hi Dave - Athena here. Short answer first: yes, you can add and run multiple Personality Generator skills simultaneously in ARC. Below I’ll explain the options, show safe ways to prevent overlapping actions, list pros/cons, and give concrete, practical ways to get the behavior you want (including doing it with a single Personality Generator).

Useful docs

  1. Can you install/run multiple Personality Generator skills?
  • Yes. ARC allows multiple instances of the same robot skill. From Project Add Skill Scripting Personality Generator, click the skill multiple times to add as many instances as you want. (You already received that confirmation from support.)
  1. Recommended approaches (3 main ways)
  1. Single Personality Generator, categorized rows (recommended for simplicity)
  • The Personality Generator supports a High/Low timeframe for each script row. Use that to categorize behavior:
    • Movement/eye blinks/lights: short windows (e.g., 20-120 seconds).
    • Random chit-chat: medium windows (e.g., 120-600 seconds).
    • Weather/time/announcements: long windows (e.g., 600-1200+ seconds).
  • Advantages: everything stays in one place, easier to manage randomness, fewer race conditions.
  • Use: edit each row’s High/Low values in the Personality Generator config to control frequency.
  1. Multiple Personality Generator instances (split by category)
  • Add a "Motion & Lights" PG, a "Speech & Chit-chat" PG, a "Status/Internet" PG, etc.
  • Rename each instance for clarity (open kebab menu / three-lines in top-right of the skill window change the Title).
  • Advantages: separation of concerns, independent timing per category, easier to enable/disable whole categories.
  • Disadvantages: possible simultaneous conflicting actions (e.g., motion + speech triggering other motion), slightly more threads/complexity.
  1. Replace heavy scripts with Script controls + orchestration (best for guaranteed coordination)
  • Use Personality Generator(s) only to send simple triggers (set a variable or send ControlCommand) - do NOT run long action sequences inside the PG rows.
  • Put long sequences in Script controls (one script per action group: e.g., Weather Report, Greet, Wave Motion, Light Show).
  • Use On Variable Changed skill or ControlCommand to start the Script controls. The On Variable Changed skill or your script can check/handle locks to avoid overlap.
  • This pattern is robust and scalable.
  1. How to prevent multiple PGs from triggering at the same time There are several ways. Pick what fits your style:

A - Lock variable pattern (simple)

  • Each Personality script should:
    1. Check a global lock variable (e.g., $PG_Lock).
    2. If lock is set, exit (or set a retry).
    3. If not set, set the lock, run actions, then clear the lock.

Example of the pattern (ARC script-style for use in a Personality Generator row):

# Check if lock is set
if getVar("$PG_Lock","false") == "true" then
  # exit or skip this action
  exit
end

# acquire lock
setVar("$PG_Lock","true")

# actions (example: start a Script control named "Weather Report")
ControlCommand(ScriptStart, Weather Report)

# optional: small wait to let the script begin
sleep(1000)

# release lock when finished (the Script control itself can clear the lock when it completes)
setVar("$PG_Lock","false")

Notes:

  • The Script control that does the heavy work can be set to clear $PG_Lock at the end of its execution (recommended) so the lock covers the full action duration.

B - Use On Variable Changed as the sequencer

  • Personality Generators only set variables (e.g., setVar("$DoWeather","1")).
  • One or more On Variable Changed skills watch those variables and execute the full action scripts.
  • The On Variable Changed script can check/clear locks and queue or ignore triggers while busy.
  • This provides a centralized point to control serialization, retries, or queuing.

C - Use Script controls + ControlCommand for well-defined start/stop

  • Have PG rows use ControlCommand(ScriptStart, ScriptName) to start named Script controls.
  • Script controls can be written so they are re-entrant-safe (e.g., they check a $ScriptName_Running var at start) and return quickly if already running.
  1. Advantages / Disadvantages of multiple Personality Generators Advantages
  • Clear separation of behaviors (e.g., motion vs. announcements).
  • Independent frequency control per behavior category.
  • Easy to enable/disable or tune one category without affecting others.

Disadvantages

  • Potential for conflicting or simultaneous actions (lights, servos, audio) unless coordinated.
  • Slightly more complex project architecture and more skills to manage.
  • If actions are embedded directly in PG rows, harder to ensure a long action finishes before another starts.
  1. Can you achieve your goals with a single Personality Generator?
  • Yes - in most cases you can. Use the per-row High/Low timers aggressively:
    • Create rows grouped by category and give them appropriate High/Low ranges.
    • For deterministic tasks (time, weather), set very long min intervals so they won’t repeat often.
    • For motion/animations, give short ranges.
  • If you also want mutual exclusion (e.g., don’t talk while doing a specific motion), combine the single PG with script controls that use locks.
  1. Can you avoid using Personality Generator entirely?
  • Yes. Alternatives:
  • For most hobby projects, PG + Script controls + On Variable Changed gives maximum flexibility with minimal coding.
  1. Practical step-by-step examples (quick) A - Add a second Personality Generator
  1. Project Add Skill Scripting Personality Generator (click the skill again).
  2. Click the skill’s kebab menu (three lines) change the Title to "Personality - Motion" / "Personality - Info".
  3. Populate rows and set the High/Low ranges per row.

B - Use PG to trigger Script controls (recommended)

  1. Create Script controls (Project Add Skill Scripting Script) and name them: "Weather Report", "Wave Motion", "Eyes Blink".
  2. Put the full sequence for each action in its Script control. Have each Script control setVar("$ScriptName_Running","true") at the start and setVar("$ScriptName_Running","false") at the end.
  3. In the Personality Generator rows, simply add: ControlCommand(ScriptStart, Weather Report) or setVar("$DoWeather","1") if using On Variable Changed.
  4. Optionally implement a global $PG_Lock to avoid overlap across different scripts.

C - Use On Variable Changed to queue/serialize

  1. Add On Variable Changed skill(s).
  2. Configure it to watch variables like $DoWeather and $DoWave.
  3. In the On Variable Changed script, check $PG_Lock before running; if locked, you can either ignore the trigger or retry after a delay.
  1. Which approach do I recommend for your use case?
  • Given you have many mixed scripts (motion, speech, web calls), I recommend:
    1. Move heavy/long scripts out of the Personality Generator and into named Script controls.
    2. Keep one or two Personality Generators that only trigger those scripts (via ControlCommand or setVar).
    3. Use On Variable Changed or a simple lock variable to prevent simultaneous heavy actions (e.g., speaking while doing a multi-second animation).
  • This gives the best mix of randomness, reliability, and control.

Would you like:

  • A step-by-step walk-through of converting one of your big Personality scripts into a Script control and wiring a Personality Generator to start it?
  • Or a ready-to-paste example of the lock variable pattern (I can format that for a Personality Generator row or a Script control)?

Tell me which script(s) you want handled first (e.g., "Weather Report" and "Speak Time"), and I’ll give you an exact configuration and sample script lines to paste into ARC.


I am a customer support GPT-powered AI and still learning. If you have doubts about my response, please use the support documentation to verify my answer.