Agilent Bravo
You'll go from a powered-on Bravo to an installed, initialized connector, and confirm it with one script. The Agilent manuals cover instrument installation, maintenance, and safety. To operate the instrument, see the Agilent Bravo guides.
This page applies to connector version 0.9.0 and later.
What you need
| Item | Detail |
|---|---|
| Instrument | An Agilent Bravo with a 96LT, 96ST, or 384ST head, powered on. The gripper is retracted and the deck holds no loose labware. For a 96AM head, contact UniteLabs support before you start |
| Cable | An Ethernet cable from the Bravo to the computer, or to a network both are on |
| Network | The Bravo's IP address, and a computer on the same subnet. See Connect the Bravo to the computer |
| Connector | Agilent Bravo from the UniteLabs registry, version 0.9.0 or later |
| Vendor software | None. Close VWorks and any other program connected to the Bravo. If VWorks drove the Bravo since it was last powered on, power-cycle the Bravo first |
| Machine | Windows, Linux, or macOS running GroundControl |
| Access | A tenant, the SDK, and the Liquid Handling SDK installed. See Setup |
Connect the Bravo to the computer
The Bravo talks to the connector over Ethernet, at a fixed IP address set on the Bravo's controller. The computer needs an address on the same subnet to reach it.
- Find the Bravo's IP address and subnet mask. Start with
192.168.0.8, the connector's default. If the Bravo doesn't answer there, find its address with Bravo Diagnostics, as described in Creating and managing profiles in Agilent's Bravo Platform User Guide. - Connect the Bravo's Ethernet cable to the computer, or to a network switch the computer is also on.
- On a direct cable, give the computer's Ethernet connection a static address in the Bravo's
subnet, with the same subnet mask and no gateway. For example, for a Bravo at
192.168.0.8with the mask255.255.255.0, use192.168.0.10:- Windows: Settings, Network & internet, Ethernet, IP assignment, Edit. Choose Manual and turn on IPv4.
- macOS: System Settings, Network, Ethernet, Details, TCP/IP. Set Configure IPv4 to Manually.
- Linux (GNOME): Settings, Network, the wired connection, IPv4. Choose Manual.
- With no gateway on the Ethernet connection, internet traffic keeps using your other connection. On macOS, also keep Wi-Fi above Ethernet in the service order.
Install and configure the connector
- In GroundControl, add a device. Search the registry
for
Agilent Bravoand download the newest release (how to add a connector). - Fill in the general configuration:
Field Value Simulation Mode Off for the real instrument, which is the default Bravo IP The Bravo's IP address. The default is 192.168.0.8Head Type The installed head: 96LT(the default),96ST, or384STHead AD Counts Leave empty. The connector checks the head type when it connects and logs what it reads Safe Z Height 0, the default. Z0is the top of the head's travel, and the head moves in X and Y only above this heightGripper Y Offset 0, the default. The gripper offset is set during calibrationTeachpoint Calibrations Leave empty. Calibration sets the teachpoints. Edit them only through calibration XML Config Path Leave empty. The connector uses the Agilent system configuration bundled for your head type. Set it only to a system configuration file from Agilent Service Utility for your instrument Position Poll Interval 0.1, the default - Under Local Network, note the Name. Scripts find the connector by this name. It's
Bravoby default, and this page uses that. - Start the connector.
- Check the logs. Expand the connector row in GroundControl, or open
~/.unitelabs/connectors/<connector-id>/connector.log. Look for three things:Connected to Bravo successfully,- A line confirming the head type, for example
Head type 96LT verified, - No errors logged during startup.
If a move error was logged during startup, restart the connector before you continue.
To change the configuration later, edit it in the existing connector row, save it, then restart the connector. That keeps the connector's UUID, so the platform still recognizes it.
First successful test
The script initializes the Bravo with the Liquid Handling SDK and reads back where each axis is. Run it with the SDK authenticated (Connect to Platform), using the connector's name from step 3.
import asyncio
from unitelabs.liquid_handling.agilent import Bravo
from unitelabs.sdk import AsyncApiClient
async def main():
client = AsyncApiClient()
bravo = Bravo(name="Bravo", client=client)
# Homes the axes that need it and switches the motors on
await bravo.initialize()
print("Connected:", await bravo.is_connected())
for axis, position in (await bravo.get_all_positions()).items():
print(f"{axis}: {position} mm")
asyncio.run(main())
Run it with uv run first_connection.py. Expected:
Connected: True.x,y,z, andwclose to0, for example0.0001. That's the home position and the safest place to start from.gripperis the gap between the gripper jaws, andgripper_zis the gripper's height.
Next steps
A fresh Bravo has no teachpoints, the known positions of its 9 deck locations. The Liquid Handling SDK loads them from the connector when it configures the Bravo, so pipetting starts after calibration.
- Calibrate the teachpoints: bring a tip to the cross on one deck location and set the whole deck from it.
- Tip handling and Basic pipetting: the first liquid handling scripts, once the teachpoints are set.
- Liquid classes and Gripper: tune pipetting and move plates around the deck.
- Recover from a stop: bring the Bravo back after a light-curtain break or an emergency stop.
- Liquid handling: how the SDK models a liquid handler.
Known quirks and errors
| You see | It means | Do this |
|---|---|---|
| A move fails right after the Bravo is powered on | The axes haven't been homed since power-on. This is expected | Run await bravo.initialize(). It homes them |
Refusing to move BravoX: it is ... on a move command | The axis isn't homed or is switched off, and the connector only moves axes that are ready | Run await bravo.initialize(), then await bravo.activate() |
| Initialization doesn't finish after VWorks ran | The Bravo still holds state from the VWorks session | Close VWorks, power-cycle the Bravo, restart the connector, then run the script again |
| A move error in the connector log at startup | A command from before the restart left an error on the controller | Restart the connector, then run the script again |
Gripper Zg is extended past the safe plane | The head only moves with the gripper retracted | Run await bravo.activate(). It parks the gripper, then try again |
| The Bravo stops mid-run and the status light blinks red | The light curtain was broken or the emergency stop was pressed | Clear the deck area, then run await bravo.initialize() and await bravo.activate(). See Recover from a stop |
Head type reported by firmware and configuration do not match in the log | The Head Type in the configuration differs from the head the Bravo reports | Set Head Type to the installed head and restart the connector |
| The connector stops right after it starts | The Teachpoint Calibrations field holds a value the connector can't read | Clear the field, save, and start the connector again |
The SDK finds no connector named Bravo | The name in the script differs from the connector's Local Network name | Use the name from GroundControl, under Local Network |
| The connector stays offline, or the log shows no connection to the Bravo | The computer doesn't reach the Bravo's IP address | Run ping <Bravo IP>, then check the cable, the computer's network settings, and the Bravo IP in the configuration |
IncompatibleConnectorError from the Liquid Handling SDK | The connector is older than 0.9.0 | Update the connector in GroundControl and restart it |
Connector reference
Drive the Bravo from Python through the Liquid Handling SDK's
Bravo class. It runs the
connector's commands in the order the Bravo needs. Use the connector's own modules in GroundControl
only for calibration.
Vendor documentation
Operating limits, deck accessories, maintenance, and safety are covered by Agilent's Bravo user guide. This page only covers getting the Bravo connected and tested.
Last updated
Hamilton Microlab VANTAGE
Get a Hamilton Microlab VANTAGE connected through GroundControl and confirm the connection from Python without moving the instrument.
Brooks PreciseFlex 400
Get a Brooks PreciseFlex 400 robot arm connected through GroundControl, with the connector installing its own controller software, and confirm the connection from Python.