agx-bus 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of agx-bus might be problematic. Click here for more details.
- agx_bus-0.0.1/PKG-INFO +11 -0
- agx_bus-0.0.1/pyproject.toml +37 -0
- agx_bus-0.0.1/pyproject.toml.orig +37 -0
- agx_bus-0.0.1/src/agx_bus/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/bus.py +390 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/.log/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/__init__.py +13 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/__init__.pyi +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/__init__.py +12 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/__init__.pyi +6 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/agx_arm_factory.py +256 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/agx_arm_factory.pyi +530 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/arm_options.py +69 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/constants.py +194 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/firmware.py +118 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/firmware.pyi +1 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/DEMO.md +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/detect_nero_series.py +357 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/detect_piper_series.py +412 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/manage_vcan.py +95 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/nero/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/nero/test1.py +358 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper/test1.py +379 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_h/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_h/test1.py +379 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_l/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_l/test1.py +379 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_x/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_x/test1.py +379 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/extensions/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/__init__.py +14 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can20_canfd.py +407 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_comm.py +243 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/__init__.py +8 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/base_util.py +13 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/linux_util.py +76 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/comm_factory.py +50 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/comm_factory.pyi +27 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/can_comm_base.py +45 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/comm_abstract.py +27 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/comm_interface.py +61 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/__init__.py +67 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/__init__.py +5 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_abstract.py +506 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_context.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_interface.py +80 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/driver_context.py +337 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/effector_driver_context.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/protocol_parser_abstract.py +32 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/protocol_parser_interface.py +16 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/submodel_driver_context_abstract.py +41 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/submodel_driver_context_interface.py +19 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/table_driven.py +67 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/driver.py +587 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/parser.py +160 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/driver.py +407 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/parser.py +174 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/driver.py +1133 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/libstark_bridge.py +177 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/default/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/default/driver.py +131 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/__init__.py +13 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/driver.py +1950 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/parser.py +321 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/driver_load.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/driver.py +359 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/parser.py +97 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/driver.py +1038 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/parser.py +231 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v120/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v120/driver.py +194 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v121/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v121/driver.py +59 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/version_load.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/driver.py +3182 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/parser.py +1064 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/driver_load.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/__init__.py +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v183/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v183/driver.py +182 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/__init__.py +4 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/driver.py +281 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/parser.py +121 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v189/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v189/driver.py +33 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/version_load.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/default/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/default/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/__init__.py +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v183/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v183/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v188/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v188/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v189/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v189/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/default/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/default/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/__init__.py +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v183/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v183/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v188/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v188/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v189/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v189/driver.py +31 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/default/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/default/driver.py +77 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/__init__.py +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v183/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v183/driver.py +77 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v188/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v188/driver.py +92 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v189/__init__.py +3 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v189/driver.py +68 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/__init__.py +15 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/attritube_base.py +99 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/enum_base.py +77 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/msg_abstract.py +48 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/msg_interface.py +28 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/__init__.py +1 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/__init__.py +12 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/__init__.py +9 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/arm_feedback_gripper.py +86 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/arm_feedback_gripper_teaching_param.py +46 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/__init__.py +7 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/arm_gripper_ctrl.py +70 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/arm_gripper_teaching_param_config.py +55 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/__init__.py +15 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/__init__.py +12 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_current.py +46 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_pos.py +46 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_spd.py +46 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_hand_status.py +69 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/__init__.py +12 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_current_ctrl.py +55 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_pos_ctrl.py +55 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_pos_time_ctrl.py +66 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_spd_ctrl.py +55 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/__init__.py +85 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/__init__.py +93 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_cpv_response.py +8 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_crash_protection_rating.py +90 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_current_motor_angle_limit_max_spd.py +72 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_current_motor_max_acc_limit.py +57 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_high_spd.py +112 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_joint_states.py +59 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_leader_joint_states.py +104 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_low_spd.py +101 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_status.py +421 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/__init__.py +72 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_cpv_settings_and_queries.py +8 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_crash_protection_rating_config.py +81 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_config.py +79 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_ctrl.py +58 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_mit_ctrl.py +71 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_mode_ctrl.py +167 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_motor_angle_limit_max_spd_config.py +64 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_motor_enable_disable.py +59 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_search_motor_max_angle_spd_acc_limit.py +55 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/arm_feedback_status.py +36 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/arm_mode_ctrl.py +21 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v112/__init__.py +15 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v112/arm_feedback_ik.py +94 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/__init__.py +87 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/__init__.py +73 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_cpv_response.py +76 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_crash_protection_rating.py +95 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_end_vel_acc_param.py +76 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_motor_angle_limit_max_spd.py +80 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_motor_max_acc_limit.py +62 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_end_pose.py +78 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_firmware.py +16 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_high_spd.py +122 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_joint_assistance_rating.py +58 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_joint_states.py +78 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_low_spd.py +198 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_set_instruction_response.py +70 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_status.py +414 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/__init__.py +70 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_circular_pattern.py +50 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_cpv_settings_and_queries.py +79 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_crash_protection_rating_config.py +81 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_end_pose_ctrl.py +68 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_end_vel_acc_param_config.py +65 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_assistance_rating_config.py +49 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_config.py +95 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_ctrl.py +79 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_mit_ctrl.py +106 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_leader_arm_move_to_home.py +42 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_leader_follower_config.py +102 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_mode_ctrl.py +167 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motion_ctrl.py +120 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motor_angle_limit_max_spd_config.py +71 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motor_enable_disable.py +66 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_param_enquiry_and_config.py +139 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_req_firmware.py +8 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_search_motor_max_angle_spd_acc_limit.py +60 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/msg_load.py +84 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/msg_load.pyi +22 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/__init__.py +11 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/__init__.py +21 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_feedback_ik.py +82 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_feedback_status.py +36 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_mode_ctrl.py +21 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/py.typed +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_activate.sh +145 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_config.sh +282 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_find_and_config.sh +72 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_muti_activate.sh +188 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/find_all_can_port.sh +30 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/__init__.py +0 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_activate.sh +145 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_config.sh +282 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_find_and_config.sh +72 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_muti_activate.sh +188 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/find_all_can_port.sh +30 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/__init__.py +21 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/fps.py +145 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/logger_mag.py +265 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/mdh_kinematics.py +83 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/numeric_codec.py +412 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/tf.py +448 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/validator.py +187 -0
- agx_bus-0.0.1/src/agx_bus/pyAgxArm/version.py +4 -0
agx_bus-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: agx-bus
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Requires-Dist: numpy>=2.0.0,<2.3.0
|
|
5
|
+
Requires-Dist: python-can>=3.3.4
|
|
6
|
+
Requires-Dist: typing-extensions>=3.7.4.3
|
|
7
|
+
Requires-Dist: ruff ; extra == 'dev'
|
|
8
|
+
Requires-Dist: ty ; extra == 'dev'
|
|
9
|
+
Requires-Dist: mypy ; extra == 'dev'
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Provides-Extra: dev
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build >= 0.12.10, <0.13.0"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "agx-bus"
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
|
+
dependencies = [
|
|
9
|
+
"numpy>=2.0.0,<2.3.0",
|
|
10
|
+
"python-can>=3.3.4",
|
|
11
|
+
"typing-extensions>=3.7.4.3",
|
|
12
|
+
]
|
|
13
|
+
version = "0.0.1"
|
|
14
|
+
|
|
15
|
+
[project.optional-dependencies]
|
|
16
|
+
dev = [
|
|
17
|
+
"ruff",
|
|
18
|
+
"ty",
|
|
19
|
+
"mypy",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
[tool.ruff]
|
|
23
|
+
line-length = 88
|
|
24
|
+
exclude = ["src/agx_bus/pyAgxArm"]
|
|
25
|
+
|
|
26
|
+
[tool.ruff.lint]
|
|
27
|
+
select = [
|
|
28
|
+
"E",
|
|
29
|
+
"W",
|
|
30
|
+
"F",
|
|
31
|
+
"I",
|
|
32
|
+
]
|
|
33
|
+
ignore = []
|
|
34
|
+
|
|
35
|
+
[tool.ty.src]
|
|
36
|
+
include = ["src"]
|
|
37
|
+
exclude = ["src/agx_bus/pyAgxArm"]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build >= 0.12.10, <0.13.0"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[project]
|
|
7
|
+
name = "agx-bus"
|
|
8
|
+
requires-python = ">=3.10"
|
|
9
|
+
dependencies = [
|
|
10
|
+
"numpy>=2.0.0,<2.3.0",
|
|
11
|
+
# pyAgxArm dependencies
|
|
12
|
+
"python-can>=3.3.4",
|
|
13
|
+
"typing-extensions>=3.7.4.3",
|
|
14
|
+
]
|
|
15
|
+
version = "0.0.1"
|
|
16
|
+
|
|
17
|
+
[project.optional-dependencies]
|
|
18
|
+
dev = [
|
|
19
|
+
"ruff",
|
|
20
|
+
"ty",
|
|
21
|
+
"mypy",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
[tool.ruff]
|
|
26
|
+
line-length = 88
|
|
27
|
+
exclude = ["src/agx_bus/pyAgxArm"]
|
|
28
|
+
|
|
29
|
+
[tool.ruff.lint]
|
|
30
|
+
select = [
|
|
31
|
+
"E", "W", "F", "I"
|
|
32
|
+
]
|
|
33
|
+
ignore = []
|
|
34
|
+
|
|
35
|
+
[tool.ty.src]
|
|
36
|
+
include = ["src"]
|
|
37
|
+
exclude = ["src/agx_bus/pyAgxArm"]
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from enum import IntEnum, unique
|
|
4
|
+
from typing import Literal
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
from numpy.typing import ArrayLike, NDArray
|
|
8
|
+
|
|
9
|
+
from .pyAgxArm import (
|
|
10
|
+
AgxArmFactory,
|
|
11
|
+
ArmModel,
|
|
12
|
+
create_agx_arm_config,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class Joints:
|
|
18
|
+
timestamp: NDArray[np.float64]
|
|
19
|
+
|
|
20
|
+
position: NDArray[np.float64]
|
|
21
|
+
velocity: NDArray[np.float64]
|
|
22
|
+
|
|
23
|
+
torque: NDArray[np.float64]
|
|
24
|
+
current: NDArray[np.float64]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@dataclass(frozen=True)
|
|
28
|
+
class Gripper:
|
|
29
|
+
timestamp: float
|
|
30
|
+
|
|
31
|
+
width: float
|
|
32
|
+
force: float
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@unique
|
|
36
|
+
class ControlType(IntEnum):
|
|
37
|
+
STANDBY = 0x00
|
|
38
|
+
CAN = 0x01
|
|
39
|
+
TEACHING = 0x02
|
|
40
|
+
ETHERNET = 0x03
|
|
41
|
+
WIFI = 0x04
|
|
42
|
+
REMOTE = 0x05
|
|
43
|
+
LINKAGE_TEACHING_INPUT = 0x06
|
|
44
|
+
OFFLINE_TRAJECTORY = 0x07
|
|
45
|
+
UNKNOWN = 0xFF
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ArmStatus(IntEnum):
|
|
49
|
+
NORMAL = 0x00
|
|
50
|
+
EMERGENCY_STOP = 0x01
|
|
51
|
+
NO_SOLUTION = 0x02
|
|
52
|
+
SINGULARITY_POINT = 0x03
|
|
53
|
+
TARGET_POS_EXCEEDS_LIMIT = 0x04
|
|
54
|
+
JOINT_COMMUNICATION_ERR = 0x05
|
|
55
|
+
JOINT_BRAKE_NOT_RELEASED = 0x06
|
|
56
|
+
COLLISION_OCCURRED = 0x07
|
|
57
|
+
OVERSPEED_DURING_TEACHING_DRAG = 0x08
|
|
58
|
+
JOINT_STATUS_ERR = 0x09
|
|
59
|
+
OTHER_ERROR = 0x0A
|
|
60
|
+
TEACHING_RECORD = 0x0B
|
|
61
|
+
TEACHING_EXECUTION = 0x0C
|
|
62
|
+
TEACHING_PAUSE = 0x0D
|
|
63
|
+
MAIN_CONTROLLER_NTC_OVER_TEMPERATURE = 0x0E
|
|
64
|
+
RELEASE_RESISTOR_NTC_OVER_TEMPERATURE = 0x0F
|
|
65
|
+
UNKNOWN = 0xFF
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@unique
|
|
69
|
+
class MoveType(IntEnum):
|
|
70
|
+
POSITION = 0x00
|
|
71
|
+
JOINT = 0x01
|
|
72
|
+
LINE = 0x02
|
|
73
|
+
CURVE = 0x03
|
|
74
|
+
MIT = 0x04 # Piper firmware < v188; v188+ uses 0x06
|
|
75
|
+
CPV = 0x05
|
|
76
|
+
UNKNOWN = 0xFF
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@unique
|
|
80
|
+
class TeachingStatus(IntEnum):
|
|
81
|
+
DISABLED = 0x00 # Stop
|
|
82
|
+
START_RECORDING = 0x01 # Start recording (enter drag-to-teach mode)
|
|
83
|
+
STOP_RECORDING = 0x02 # Stop recording (exit drag-to-teach mode)
|
|
84
|
+
EXECUTE_TRAJECTORY = 0x03 # Execute trajectory (replay recorded trajectory)
|
|
85
|
+
PAUSE_EXECUTION = 0x04 # Pause execution
|
|
86
|
+
RESUME_EXECUTION = 0x05 # Resume execution (continue trajectory replay)
|
|
87
|
+
TERMINATE_EXECUTION = 0x06 # Terminate execution
|
|
88
|
+
MOVE_TO_START = 0x07 # Move to trajectory start point
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@unique
|
|
92
|
+
class MotionStatus(IntEnum):
|
|
93
|
+
REACHED = 0x00
|
|
94
|
+
MOVING = 0x01
|
|
95
|
+
UNKNOWN = 0xFF
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@dataclass
|
|
99
|
+
class Status:
|
|
100
|
+
arm: ArmStatus
|
|
101
|
+
control: ControlType
|
|
102
|
+
move: MoveType
|
|
103
|
+
|
|
104
|
+
motion: MotionStatus
|
|
105
|
+
teaching: TeachingStatus
|
|
106
|
+
|
|
107
|
+
comm_errors: dict[str, bool]
|
|
108
|
+
limit_exceeds: dict[str, bool]
|
|
109
|
+
|
|
110
|
+
def is_standby(self) -> bool | None:
|
|
111
|
+
if self.control == ControlType.STANDBY:
|
|
112
|
+
return True
|
|
113
|
+
elif self.control == ControlType.CAN:
|
|
114
|
+
return False
|
|
115
|
+
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
def reached(self) -> bool | None:
|
|
119
|
+
if self.move == MotionStatus.REACHED:
|
|
120
|
+
return True
|
|
121
|
+
elif self.move == MotionStatus.MOVING:
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
return None
|
|
125
|
+
|
|
126
|
+
def comm_ok(self) -> bool:
|
|
127
|
+
return not any(self.comm_errors)
|
|
128
|
+
|
|
129
|
+
def limit_exceeded(self) -> bool:
|
|
130
|
+
return any(self.limit_exceeds)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class Bus:
|
|
134
|
+
joint_names: tuple[str, ...] = (
|
|
135
|
+
"base",
|
|
136
|
+
"shoulder",
|
|
137
|
+
"elbow",
|
|
138
|
+
"wrist_roll",
|
|
139
|
+
"wrist_pitch",
|
|
140
|
+
"tool_roll",
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
def __init__(
|
|
144
|
+
self, channel: str, *, version: str = "default", timeout: float = 1.0
|
|
145
|
+
) -> None:
|
|
146
|
+
self.timeout = timeout
|
|
147
|
+
self.name_to_idx: dict[str, Literal[1, 2, 3, 4, 5, 6]] = {
|
|
148
|
+
"base": 1,
|
|
149
|
+
"shoulder": 2,
|
|
150
|
+
"elbow": 3,
|
|
151
|
+
"wrist_roll": 4,
|
|
152
|
+
"wrist_pitch": 5,
|
|
153
|
+
"tool_roll": 6,
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
version_map: dict[str, Literal["default", "v183", "v188", "v189"]] = {
|
|
157
|
+
"default": "default",
|
|
158
|
+
"v183": "v183",
|
|
159
|
+
"v188": "v188",
|
|
160
|
+
"v189": "v189",
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
cfg = create_agx_arm_config(
|
|
164
|
+
robot=ArmModel.PIPER,
|
|
165
|
+
channel=channel,
|
|
166
|
+
firmeware_version=version_map[version],
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
self.arm = arm = AgxArmFactory.create_arm(cfg)
|
|
170
|
+
self.ee = arm.init_effector(arm.OPTIONS.EFFECTOR.AGX_GRIPPER)
|
|
171
|
+
|
|
172
|
+
def connect(self) -> None:
|
|
173
|
+
self.arm.connect()
|
|
174
|
+
|
|
175
|
+
self.arm.set_speed_percent(percent=100)
|
|
176
|
+
time.sleep(0.1)
|
|
177
|
+
|
|
178
|
+
def disconnect(self) -> None:
|
|
179
|
+
self.arm.disconnect()
|
|
180
|
+
|
|
181
|
+
def __enter__(self):
|
|
182
|
+
self.connect()
|
|
183
|
+
return self
|
|
184
|
+
|
|
185
|
+
def __exit__(self, exc_type, exc_value, exc_tb):
|
|
186
|
+
self.disconnect()
|
|
187
|
+
return False
|
|
188
|
+
|
|
189
|
+
def enable_control(self, percent: int = 100) -> None:
|
|
190
|
+
if percent < 0 or percent > 100:
|
|
191
|
+
raise ValueError
|
|
192
|
+
|
|
193
|
+
self.arm.set_speed_percent(percent)
|
|
194
|
+
|
|
195
|
+
def enable_torque(self) -> None:
|
|
196
|
+
def enable():
|
|
197
|
+
result = set()
|
|
198
|
+
|
|
199
|
+
for name in self.joint_names:
|
|
200
|
+
result.add(self.arm.enable(self.name_to_idx[name]))
|
|
201
|
+
|
|
202
|
+
enabled = False not in result
|
|
203
|
+
return enabled
|
|
204
|
+
|
|
205
|
+
t0 = time.perf_counter()
|
|
206
|
+
|
|
207
|
+
enabled = enable()
|
|
208
|
+
while not enabled:
|
|
209
|
+
if time.perf_counter() - t0 >= self.timeout:
|
|
210
|
+
raise TimeoutError
|
|
211
|
+
|
|
212
|
+
time.sleep(0.01)
|
|
213
|
+
|
|
214
|
+
enabled = enable()
|
|
215
|
+
|
|
216
|
+
def disable_torque(self) -> None:
|
|
217
|
+
def disable():
|
|
218
|
+
result = set()
|
|
219
|
+
for name in self.joint_names:
|
|
220
|
+
result.add(self.arm.disable(self.name_to_idx[name]))
|
|
221
|
+
|
|
222
|
+
disabled = False not in result
|
|
223
|
+
return disabled
|
|
224
|
+
|
|
225
|
+
t0 = time.perf_counter()
|
|
226
|
+
|
|
227
|
+
disabled = disable()
|
|
228
|
+
while not disabled:
|
|
229
|
+
if time.perf_counter() - t0 >= self.timeout:
|
|
230
|
+
raise TimeoutError
|
|
231
|
+
|
|
232
|
+
time.sleep(0.01)
|
|
233
|
+
|
|
234
|
+
disabled = disable()
|
|
235
|
+
|
|
236
|
+
def move_joints(self, joints: ArrayLike) -> None:
|
|
237
|
+
joints = np.asarray(joints, dtype=np.float64)
|
|
238
|
+
self.arm.move_j(list(joints))
|
|
239
|
+
|
|
240
|
+
def move_mit(
|
|
241
|
+
self,
|
|
242
|
+
pos: ArrayLike,
|
|
243
|
+
vel: ArrayLike | None = None,
|
|
244
|
+
kp: float = 10.0,
|
|
245
|
+
kd: float = 0.5,
|
|
246
|
+
t_ff: float = 0.0,
|
|
247
|
+
):
|
|
248
|
+
pos = np.asarray(pos)
|
|
249
|
+
|
|
250
|
+
if vel is None:
|
|
251
|
+
vel = np.zeros_like(pos)
|
|
252
|
+
else:
|
|
253
|
+
vel = np.asarray(vel)
|
|
254
|
+
|
|
255
|
+
for i, name in enumerate(self.joint_names):
|
|
256
|
+
self.arm.move_mit(self.name_to_idx[name], pos[i], vel[i], kp, kd, t_ff)
|
|
257
|
+
|
|
258
|
+
def read_joints(self) -> Joints:
|
|
259
|
+
def read():
|
|
260
|
+
timestamp: list[float] = []
|
|
261
|
+
position: list[float] = []
|
|
262
|
+
velocity: list[float] = []
|
|
263
|
+
torque: list[float] = []
|
|
264
|
+
current: list[float] = []
|
|
265
|
+
|
|
266
|
+
motor_states = [
|
|
267
|
+
self.arm.get_motor_states(self.name_to_idx[name])
|
|
268
|
+
for name in self.joint_names
|
|
269
|
+
]
|
|
270
|
+
|
|
271
|
+
for ms in motor_states:
|
|
272
|
+
if ms is None:
|
|
273
|
+
return None
|
|
274
|
+
|
|
275
|
+
timestamp.append(ms.timestamp)
|
|
276
|
+
|
|
277
|
+
msg = ms.msg
|
|
278
|
+
|
|
279
|
+
position.append(msg.position)
|
|
280
|
+
velocity.append(msg.velocity)
|
|
281
|
+
torque.append(msg.torque)
|
|
282
|
+
current.append(msg.current)
|
|
283
|
+
|
|
284
|
+
def float64(x: ArrayLike):
|
|
285
|
+
return np.asarray(x, dtype=np.float64)
|
|
286
|
+
|
|
287
|
+
return Joints(
|
|
288
|
+
float64(timestamp),
|
|
289
|
+
float64(position),
|
|
290
|
+
float64(velocity),
|
|
291
|
+
float64(torque),
|
|
292
|
+
float64(current),
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
t0 = time.perf_counter()
|
|
296
|
+
|
|
297
|
+
joints = read()
|
|
298
|
+
while joints is None:
|
|
299
|
+
if time.perf_counter() - t0 >= self.timeout:
|
|
300
|
+
raise TimeoutError
|
|
301
|
+
|
|
302
|
+
time.sleep(0)
|
|
303
|
+
|
|
304
|
+
joints = read()
|
|
305
|
+
|
|
306
|
+
return joints
|
|
307
|
+
|
|
308
|
+
def move_gripper(
|
|
309
|
+
self,
|
|
310
|
+
width: float,
|
|
311
|
+
*,
|
|
312
|
+
force: float = 1.0,
|
|
313
|
+
) -> None:
|
|
314
|
+
self.ee.move_gripper_m(width, force)
|
|
315
|
+
|
|
316
|
+
def read_gripper(self) -> Gripper:
|
|
317
|
+
def read():
|
|
318
|
+
gs = self.ee.get_gripper_status()
|
|
319
|
+
|
|
320
|
+
if gs is None:
|
|
321
|
+
return None
|
|
322
|
+
|
|
323
|
+
msg = gs.msg
|
|
324
|
+
|
|
325
|
+
return Gripper(
|
|
326
|
+
timestamp=gs.timestamp,
|
|
327
|
+
width=msg.value,
|
|
328
|
+
force=msg.force,
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
t0 = time.perf_counter()
|
|
332
|
+
gripper = read()
|
|
333
|
+
while gripper is None:
|
|
334
|
+
if time.perf_counter() - t0 >= self.timeout:
|
|
335
|
+
raise TimeoutError
|
|
336
|
+
|
|
337
|
+
time.sleep(0)
|
|
338
|
+
|
|
339
|
+
gripper = read()
|
|
340
|
+
|
|
341
|
+
return gripper
|
|
342
|
+
|
|
343
|
+
def read_status(self) -> Status:
|
|
344
|
+
def read():
|
|
345
|
+
status = self.arm.get_arm_status()
|
|
346
|
+
|
|
347
|
+
if status is None:
|
|
348
|
+
return None
|
|
349
|
+
|
|
350
|
+
msg = status.msg
|
|
351
|
+
|
|
352
|
+
error = msg.err_status
|
|
353
|
+
|
|
354
|
+
comm_errors = {
|
|
355
|
+
name: getattr(error, f"communication_status_joint_{i + 1}")
|
|
356
|
+
for i, name in enumerate(self.joint_names)
|
|
357
|
+
}
|
|
358
|
+
limit_exceeds = {
|
|
359
|
+
name: getattr(error, f"joint_{i + 1}_angle_limit")
|
|
360
|
+
for i, name in enumerate(self.joint_names)
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return Status(
|
|
364
|
+
ArmStatus(msg.arm_status),
|
|
365
|
+
ControlType(msg.ctrl_mode),
|
|
366
|
+
MoveType(msg.mode_feedback),
|
|
367
|
+
MotionStatus(msg.motion_status),
|
|
368
|
+
TeachingStatus(msg.teach_status),
|
|
369
|
+
comm_errors,
|
|
370
|
+
limit_exceeds,
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
t0 = time.perf_counter()
|
|
374
|
+
|
|
375
|
+
status = read()
|
|
376
|
+
while status is None:
|
|
377
|
+
if time.perf_counter() - t0 >= self.timeout:
|
|
378
|
+
raise TimeoutError
|
|
379
|
+
|
|
380
|
+
time.sleep(0)
|
|
381
|
+
|
|
382
|
+
status = read()
|
|
383
|
+
|
|
384
|
+
return status
|
|
385
|
+
|
|
386
|
+
def calibrate(self, name: str) -> None:
|
|
387
|
+
self.arm.calibrate_joint(self.name_to_idx[name])
|
|
388
|
+
|
|
389
|
+
def reset(self):
|
|
390
|
+
self.arm.reset()
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from .api import create_agx_arm_config, AgxArmFactory, resolve_firmware_profile
|
|
2
|
+
from .api import ArmModel, PiperFW, NeroFW
|
|
3
|
+
from .version import __version__
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
'create_agx_arm_config',
|
|
7
|
+
'AgxArmFactory',
|
|
8
|
+
'ArmModel',
|
|
9
|
+
'PiperFW',
|
|
10
|
+
'NeroFW',
|
|
11
|
+
'resolve_firmware_profile',
|
|
12
|
+
'__version__',
|
|
13
|
+
]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from .api import create_agx_arm_config as create_agx_arm_config
|
|
2
|
+
from .api import AgxArmFactory as AgxArmFactory
|
|
3
|
+
from .api import ArmModel as ArmModel
|
|
4
|
+
from .api import PiperFW as PiperFW
|
|
5
|
+
from .api import NeroFW as NeroFW
|
|
6
|
+
from .api import resolve_firmware_profile as resolve_firmware_profile
|
|
7
|
+
from .version import __version__ as __version__
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from .agx_arm_factory import create_agx_arm_config, AgxArmFactory
|
|
2
|
+
from .arm_options import ArmModel, PiperFW, NeroFW
|
|
3
|
+
from .firmware import resolve_firmware_profile
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
'create_agx_arm_config',
|
|
7
|
+
'AgxArmFactory',
|
|
8
|
+
'ArmModel',
|
|
9
|
+
'PiperFW',
|
|
10
|
+
'NeroFW',
|
|
11
|
+
'resolve_firmware_profile',
|
|
12
|
+
]
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from .agx_arm_factory import create_agx_arm_config as create_agx_arm_config
|
|
2
|
+
from .agx_arm_factory import AgxArmFactory as AgxArmFactory
|
|
3
|
+
from .arm_options import ArmModel as ArmModel
|
|
4
|
+
from .arm_options import PiperFW as PiperFW
|
|
5
|
+
from .arm_options import NeroFW as NeroFW
|
|
6
|
+
from .firmware import resolve_firmware_profile as resolve_firmware_profile
|