EZMQTT Client icon EZMQTT Client — MQTT client for ARC: connect to brokers, publish/subscribe topics, map incoming messages to variables (incl. binary arrays) and run scripts. Try it →
Asked
1 Participant
Running Bot Libre with AR Drone

Running Bot Libre With AR Drone

I’m trying to fly an AR Parrot Drone from ARC while also using the Bot Libre robot skill for voice/chat commands, and I’m running into a networking wall. Hardware is an AR.Drone over WiFi to a Windows laptop running ARC. The AR.Drone Movement Panel connects fine when I’m on the drone’s WiFi (video works, TakeOff/Land respond instantly). I also added the Bot Libre skill, logged in with my username/password, verified email, and obtained the Application ID; when I’m on my home WiFi, the skill authenticates and responds as expected.

The problem: I can’t get both working at the same time. When I connect to the drone’s WiFi, the Bot Libre skill can’t reach the cloud (auth fails or times out). If I stay on home WiFi, ARC can’t reach the drone. I tried adding a second network adapter (USB WiFi for the drone + Ethernet for internet) and set Windows interface metrics to prefer Ethernet for the default route. Still, Bot Libre often fails unless I disable the drone adapter. I also tried ICS/bridging, but AR.Drone’s AP/DHCP seems to conflict and I lose control or internet intermittently.

Two questions:

  • What network topology has worked for you to run cloud Robot Skills like Bot Libre while controlling an AR Parrot Drone in ARC (dual NICs with static routes, travel router/bridge, or something configurable inside ARC to bind Bot Libre traffic to a specific adapter)?

  • Once the network is sorted, is this the right approach to trigger takeoff/land from a Bot Libre reply in JavaScript, assuming the control name matches my movement panel?

var text = GetVariable("$botlibre_response");
if (text && text.toLowerCase().includes("take off")) {
  ControlCommand("Parrot AR Drone", "TakeOff");
} else if (text && text.toLowerCase().includes("land")) {
  ControlCommand("Parrot AR Drone", "Land");
}

What’s the recommended way to keep Bot Libre online while staying connected to the AR Parrot Drone, and is there a better pattern to hook Bot Libre responses into AR.Drone commands?



Related Hardware (view all EZB hardware)
Fly Parrot AR.Drone in Synthiam ARC with joysticks, voice, scripts and camera tracking over Wi-Fi.
Wi-Fi
Servos ✕
Camera
Audio
UART ✕
I2C
ADC ✕
Digital ✕

Related Robot Skills (view all robot skills)
Control Parrot AR Drone v1/v2 via ARC: keyboard, joystick, speech, Wii, web; camera feed, face/color/motion/glyph tracking.
Bot Libre by Bot Libre
AIML2 chatbot client for ARC connecting robots to Bot Libre cloud for customizable, private chatbots and personalities.

ARC Pro

Upgrade to ARC Pro

ARC Pro is your gateway to a community of like-minded robot enthusiasts and professionals, all united by a passion for advanced robot programming.

Author Avatar
PRO
Canada
Twitter YouTube GitHub
#1  

Yes - this is a network topology issue first, and then a project design issue.

For an AR Parrot Drone + cloud skill setup, the most reliable approach is:

Option 1: Use two network paths

  • Wi-Fi adapter #1: connect to the AR.Drone’s WiFi
  • Ethernet or WiFi adapter #2: connect to your home/router/internet

This is the normal setup I recommend for ARC when a robot connection and an internet-dependent skill must both stay online.

Why this works better

  • The drone must be reached directly on its own WiFi network.
  • Bot Libre needs internet access to the cloud.
  • ARC itself doesn’t have a setting to bind one robot skill to one network adapter and another skill to another adapter - it relies on Windows networking.

Important Windows networking notes

If Bot Libre is unstable when both adapters are enabled, check these:

1) Avoid network conflicts

The most common problem is that the drone and your home network are using the same subnet, usually:

  • 192.168.1.x

That causes routing confusion.

The AR.Drone uses its own network, so if your home network is also 192.168.1.x, Windows may not know which interface to use.

2) Put your internet network on a different subnet

Best fix:

  • Keep the drone on its default network
  • Change your home router LAN to something else, like:
    • 192.168.0.x
    • 192.168.10.x

That’s the same best-practice used for EZ-B networking conflicts too: https://synthiam.com/Support/Tips-to-Make-a-Robot/Two-Network-Interfaces

3) Don’t bridge the adapters

You already noticed this, and you’re right: bridging/ICS usually causes more problems than it solves for drone control. The drone expects direct WiFi behavior, and Windows ICS can interfere with latency and routing.

4) Use a travel router if needed

If dual NICs remain flaky, the most stable workaround is often:

  • PC connects to a travel router
  • drone connects to its own WiFi
  • internet also comes through the router or a second adapter

But because the AR.Drone creates its own WiFi, many users still do best with:

  • drone on one adapter
  • internet on Ethernet

About Bot Libre + AR.Drone in ARC

Your overall idea is good, but I’d recommend a slightly better architecture:

Better pattern

Use Bot Libre only for speech/chat interpretation, then have it trigger scripts or control commands in ARC.

Instead of directly putting flight logic inside the Bot Libre skill itself, do this:

  1. Bot Libre returns text
  2. A script parses the reply
  3. Script sends the drone command

That keeps the AI layer separate from the movement layer.

Your JavaScript approach

Your example is close, but I’d recommend two improvements:

  1. Use getVar() instead of GetVariable()
  2. Use controlCommand() with the exact Movement Panel name

Here’s a cleaner ARC JavaScript example:

var text = getVar("$botlibre_response", "");

if (text.toLowerCase().includes("take off")) {
  controlCommand("Parrot AR Drone", "TakeOff");
} else if (text.toLowerCase().includes("land")) {
  controlCommand("Parrot AR Drone", "Land");
}

Better command parsing

Bot responses can vary, so it’s safer to check for multiple phrases:

var text = getVar("$botlibre_response", "").toLowerCase();

if (text.includes("take off") || text.includes("takeoff") || text.includes("launch")) {
  controlCommand("Parrot AR Drone", "TakeOff");
} else if (text.includes("land") || text.includes("come down")) {
  controlCommand("Parrot AR Drone", "Land");
} else if (text.includes("forward")) {
  controlCommand("Parrot AR Drone", "Forward");
}

Best practice in ARC

A more reliable method is to have Bot Libre write a command to a global variable like:

  • $droneCommand = takeoff
  • $droneCommand = land

Then a script reads that variable and runs the matching command. That’s more robust than parsing free-form text every time.

Example:

var cmd = getVar("$droneCommand", "").toLowerCase();

if (cmd == "takeoff") {
  controlCommand("Parrot AR Drone", "TakeOff");
} else if (cmd == "land") {
  controlCommand("Parrot AR Drone", "Land");
}

What I’d recommend you do next

  1. Confirm your home network subnet is not 192.168.1.x
  2. Use:
    • drone WiFi on one adapter
    • internet on Ethernet or a second WiFi adapter
  3. Keep ICS/bridging disabled
  4. Have Bot Libre output a simple command token into a global variable
  5. Use a JavaScript skill to translate that token into controlCommand()

One key question

What is your bigger goal here - do you want:

  • simple voice commands like "take off" / "land"
  • a full conversational pilot assistant
  • or autonomous flight behaviors driven by Bot Libre responses?

That will help me recommend the cleanest ARC structure.

I am a customer support AI and still learning. Please verify important answers in our support documentation. For advanced AI features, use the AI Script Agent built into ARC.