Skip to content
This is the development version of the documentation. It may change before the next release. See 0.6.x for the latest release.

Multiple Devices

AUTD3 can compose several devices into one large array by daisy-chaining them. The SDK is designed so that multiple devices can be handled transparently.

When using multiple devices, pass Autd3 to the Geometry::new argument in the order the devices are connected. The following shows the procedure for connecting two devices.

For example, suppose the first device is placed on the left and the second on the right, and the global coordinates are taken to be the same as the first device’s local coordinates. The code then looks as follows.

Geometry::new(vec![
Autd3::new(Point3::origin(), UnitQuaternion::identity()),
Autd3::new(
Point3::new(Autd3::DEVICE_WIDTH, 0.0, 0.0),
UnitQuaternion::identity(),
),
]);

Here the first argument represents the device position in global coordinates, and the second argument represents the device rotation. Note that Autd3::DEVICE_WIDTH is the width of the device (including the board outline).

Loading model…
Two devices arranged with an offset of DEVICE_WIDTH in the +x direction

The origin and orientation of the global coordinates used by the SDK can be set freely by the user. For example, if the global coordinates are taken to be the same as the second device’s local coordinates, the code offsets the first device in the -x direction as follows.

Geometry::new(vec![
Autd3::new(
Point3::new(-Autd3::DEVICE_WIDTH, 0.0, 0.0),
UnitQuaternion::identity(),
),
Autd3::new(Point3::origin(), UnitQuaternion::identity()),
]);
Loading model…
Layout with the global coordinates aligned to the second device's local coordinates

The device rotation is specified with the second argument (UnitQuaternion) of Autd3::new. For example, placing the second device in the +z direction and rotating it 90° about the y axis gives the following.

Geometry::new(vec![
Autd3::new(Point3::origin(), UnitQuaternion::identity()),
Autd3::new(
Point3::new(0.0, 0.0, Autd3::DEVICE_WIDTH),
UnitQuaternion::from_axis_angle(&Vector3::y_axis(), FRAC_PI_2),
),
]);
Loading model…
Layout with the second device placed in +z and rotated 90° about the y axis