Monorepo for the left and right Dobot M1 Pro drivers and PUDA edge services.
driver— shareddobot-driverspackage exportingM1ProLeftandM1ProRightdobot-left-edge— PUDA edge service for machinedobot-leftdobot-right-edge— PUDA edge service for machinedobot-right
The edge services depend on the shared driver workspace package. Driver tests
and development notebooks are kept under driver/tests.
Create an environment file for each edge:
Copy-Item dobot-left-edge\.env.example dobot-left-edge\.env
Copy-Item dobot-right-edge\.env.example dobot-right-edge\.envSet these values in each .env:
MACHINE_ID— must be unique (dobot-leftordobot-right)NATS_SERVERS— comma-separated NATS server URLsDOBOT_IP— IP address of the corresponding robotAUTO_HOME_ON_STARTUP— send startup controller commands (trueorfalse)
The example files use 192.168.2.6 for the left robot and 192.168.2.7 for
the right robot. Update them to match the actual controllers.
cd dobot-left-edge
.\start_edge.batIn another terminal:
cd dobot-right-edge
.\start_edge.batFrom the repository root:
uv sync --all-packages
uv run --package dobot-left-edge python dobot-left-edge\main.py
uv run --package dobot-right-edge python dobot-right-edge\main.pydocker compose -f dobot-left-edge\compose.yml up -d --build
docker compose -f dobot-right-edge\compose.yml up -d --buildView logs:
docker compose -f dobot-left-edge\compose.yml logs -f
docker compose -f dobot-right-edge\compose.yml logs -fStop:
docker compose -f dobot-left-edge\compose.yml down
docker compose -f dobot-right-edge\compose.yml downRun puda machine commands dobot-left or puda machine commands dobot-right
for the advertised commands, parameters, and safety metadata.
M1ProRight.safe_move and M1ProRight.pick_and_place accept an optional
keyword-only arm_orientation. Pass integer 0 or 1 to apply that
orientation before every motion segment of that call, including an initial lift
and the approach, lateral, descent, and retraction segments. A boolean, float,
or string is rejected before any hardware call or pose read. The value applies
to that call. set_arm_orientation(orientation) sets the controller branch on
its own. pick_from, place_to, and home keep their existing parameters.
Omitting arm_orientation, or passing None, keeps the built-in selection.
safe_move uses the current Y for the lift and the target Y for travel and
descent. pick_and_place uses the source Y and the destination Y, and leaves
the initial lift orientation unchanged. Positive Y selects 1. Zero or negative
Y selects 0. Inside these two commands that selection is what runs; a
preceding set_arm_orientation does not replace it.
uv run --package dobot-drivers python -m unittest discover driver\tests -p "test_left_*.py"
uv run --package dobot-drivers python -m unittest discover driver\tests -p "test_right_*.py"