We were kindly allowed to use a shaker module that Dr. Josh Kangas’ previous students created. However, the shaker module relied on a dynamic power supply that could be adjusted using a knob. Rather than attempting to control this knob using APEX Labs, we created a custom PCB to put the shaker module on the network. This allows us to control the shaker module remotely, turning it on and off via REST API calls.

Dr. Josh Kangas also provided us with access to an OT-2 Liquid Handler. The OT-2 will provide us with the ability to precisely dispense and mix liquids. Similar to the custom shaker, we needed to be able to command this machine remotely. Therefore, we built out a REST API that we could use to control the machine atomically. That is, we will not be writing a fully script ahead of time to execute a routine on the OT-2. Rather, we will be issuing API requests to command the OT-2 directly.
We are planning on using the YOLO and SAM models to perform object detection and segmentation. Right now, we are able to stream data out of our ZED cameras over HTTP. Our next steps are to get the ZED cameras streaming over ROS2 and feeding this data into our YOLO and SAM models.
Currently we are able to visualize our planning subsystem through RViz. We have proven basic collision avoidance and path planning. The next step for this work is to generate output that can be fed into the manipulation submodule to execute arm and gripper movements.
This subsystem has required a significant amount of hardware work. As part of our solution, we’ve had to design, develop, and manufacture our own custom gripper. This is because the grippers on the market either did not meet our needs exactly, or were too expensive for our budget. We have been able to deploy this gripper on our XArm 6 and have tested out our ability to open and close it, while also testing out our positional control.
The ultimate plan for this monitoring subsystem is to accumulate logs and data from the APEX Labs system using the ElasticSearch ecosystem. We have tested this concept by setting up a docker compose file that launches: