devagent-physical-engine 1.8.8__tar.gz → 1.8.9__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.
- {devagent_physical_engine-1.8.8/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.9}/PKG-INFO +40 -7
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/README.md +40 -7
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/pyproject.toml +2 -1
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +15 -2
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/doctor.py +2 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/gazebo_pose.py +169 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/preexecution.py +171 -39
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +262 -35
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/ros_gz_pose_service_probe.py +42 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/state_validity_probe.py +76 -8
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +71 -14
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/support_contact_acm_semantics_v189.py +195 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/task_adapter.py +284 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory.py +25 -1
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +83 -23
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/trajectory_feedback_tracking_v189.py +174 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_follow.py +71 -26
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +110 -109
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene.py +153 -26
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py +371 -0
- devagent_physical_engine-1.8.9/src/devagent_physical_engine/ros2/workpiece_transport.py +143 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/setup_profile.py +5 -5
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9/src/devagent_physical_engine.egg-info}/PKG-INFO +40 -7
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/SOURCES.txt +15 -1
- devagent_physical_engine-1.8.9/tests/test_explicit_detach_world_reassert_v189.py +113 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_industrial_motion_v170.py +2 -2
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_package_metadata_v184.py +2 -2
- devagent_physical_engine-1.8.9/tests/test_place_preexecution_acm_v189.py +228 -0
- devagent_physical_engine-1.8.9/tests/test_release_resting_pose_v189.py +143 -0
- devagent_physical_engine-1.8.9/tests/test_release_transaction_v189.py +68 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros2_production_receipts_v011.py +14 -1
- devagent_physical_engine-1.8.9/tests/test_support_contact_acm_semantics_v189.py +138 -0
- devagent_physical_engine-1.8.9/tests/test_trajectory_action_contract_v189.py +80 -0
- devagent_physical_engine-1.8.9/tests/test_trajectory_feedback_tracking_v189.py +222 -0
- devagent_physical_engine-1.8.9/tests/test_transfer_controller_policy_v189.py +83 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_transfer_place_diagnostic_v172.py +2 -2
- devagent_physical_engine-1.8.9/tests/test_workpiece_semantic_lifecycle_v186.py +469 -0
- devagent_physical_engine-1.8.9/tests/test_workpiece_transport_v189.py +195 -0
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -104
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/task_adapter.py +0 -160
- devagent_physical_engine-1.8.8/tests/test_workpiece_semantic_lifecycle_v186.py +0 -220
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/NOTICE +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-1.8.8 → devagent_physical_engine-1.8.9}/tests/test_workpiece_scene_probe_v185.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.9
|
|
4
4
|
Summary: Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
|
|
|
76
76
|
Python 3.11+ is required.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.9
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Verify the installed package:
|
|
@@ -88,7 +88,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
88
88
|
Expected:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
1.8.
|
|
91
|
+
1.8.9
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -448,6 +448,33 @@ The lifecycle receipt records the pre/post primitive type representation, canoni
|
|
|
448
448
|
|
|
449
449
|
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
450
450
|
|
|
451
|
+
## v1.8.9 target-proven complete Pick–Transport–Place lifecycle
|
|
452
|
+
|
|
453
|
+
v1.8.9 completes and target-proves the qualified UR5e nominal `pick_transport_place` report path on the intended ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz workstation. The acceptance run completed `approach_pick → grasp → lift_departure → transfer_departure → transfer_place → release → retreat_home → verify` and returned `SELECTIVE PASSED` for `TEST-PERF-001`.
|
|
454
|
+
|
|
455
|
+
The release fixes the lifecycle by separating engineering authorities instead of weakening checks:
|
|
456
|
+
|
|
457
|
+
```text
|
|
458
|
+
OEM / ros2_control controller
|
|
459
|
+
→ owns its configured FollowJointTrajectory execution tolerance
|
|
460
|
+
|
|
461
|
+
DevAgent
|
|
462
|
+
→ independently records desired-vs-actual controller feedback
|
|
463
|
+
→ preserves the 0.03 rad commissioning tracking gate
|
|
464
|
+
→ verifies exact Twin/MoveIt scene semantics
|
|
465
|
+
→ verifies carried workpiece pose before release
|
|
466
|
+
→ verifies Gazebo post-release resting pose within 5 mm / 1°
|
|
467
|
+
→ synchronizes MoveIt to the actual Gazebo-released pose before retreat
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
The qualified place verifier now evaluates the same exact workpiece↔destination-support contact contract used by the planner instead of checking the place path against inconsistent global ACM semantics. Controller feedback cadence is diagnostic evidence rather than an invented minimum-rate execution contract.
|
|
471
|
+
|
|
472
|
+
Release is a measured two-authority handoff: while the carrier owns the object, the tool/grasp-derived carried pose is authoritative; after the carrier stops, Gazebo physics owns the released object and the Twin resting pose is the verification target. DevAgent records every settle sample in `release-settle-trace.json` and does not teleport the object into tolerance.
|
|
473
|
+
|
|
474
|
+
MoveIt DETACH is deterministic. DevAgent removes attachment ownership while the robot is stationary, explicitly ADD/overwrites the world collision object with exact verified geometry at the actual Gazebo-settled pose, then requires full scene readback and semantic verification before retreat is permitted. A stale implicit MoveIt detach pose remains a hard failure.
|
|
475
|
+
|
|
476
|
+
This qualification is intentionally bounded to the packaged UR5e nominal report-test scope. It does not grant arbitrary customer-cell qualification, site qualification, functional-safety certification, or autonomous real-robot execution authority.
|
|
477
|
+
|
|
451
478
|
## Qualified visual-execution scope
|
|
452
479
|
|
|
453
480
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -648,9 +675,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
648
675
|
|
|
649
676
|
# Project status
|
|
650
677
|
|
|
651
|
-
**v1.8.
|
|
678
|
+
**v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
|
|
652
679
|
|
|
653
|
-
v1.8.
|
|
680
|
+
v1.8.9 is the first release in this line whose exact candidate completed the entire bounded UR5e nominal report lifecycle on the intended workstation: exact Twin readback, five-group Pilz preflight, approach, verified MoveIt GRASP, lift with scoped source-support contact, Gazebo carry, transfer, place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification. The selected target test returned `PASSED` with measured evidence recorded.
|
|
654
681
|
|
|
655
682
|
Production-oriented software capabilities include:
|
|
656
683
|
|
|
@@ -665,9 +692,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
665
692
|
truthful robot support tiers
|
|
666
693
|
qualified UR5e report-test visual execution contract
|
|
667
694
|
direct UR5e controller-manager/action readiness binding
|
|
695
|
+
controller-native execution tolerance + independent DevAgent tracking evidence
|
|
668
696
|
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
669
697
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
670
|
-
scoped destination-support place contact
|
|
698
|
+
scoped destination-support place contact with matching preexecution semantics
|
|
699
|
+
persistent ROS↔Gazebo workpiece carrier
|
|
700
|
+
separate carried-pose and released-resting-pose authorities
|
|
701
|
+
read-only Gazebo post-release settle verification at 5 mm / 1°
|
|
702
|
+
deterministic two-phase MoveIt detach/world reassert at measured Gazebo pose
|
|
703
|
+
release-settle trace evidence
|
|
671
704
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
672
705
|
industrial Pilz PTP / LIN planning
|
|
673
706
|
adaptive bounded blend selection
|
|
@@ -684,7 +717,7 @@ change impact + regression
|
|
|
684
717
|
provider-neutral optional AI front end
|
|
685
718
|
```
|
|
686
719
|
|
|
687
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
720
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim is limited to the qualified packaged nominal report path and exact acceptance environment. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
688
721
|
|
|
689
722
|
## Documentation
|
|
690
723
|
|
|
@@ -35,7 +35,7 @@ regression + FAT report + Evidence Viewer
|
|
|
35
35
|
Python 3.11+ is required.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
38
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.9
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Verify the installed package:
|
|
@@ -47,7 +47,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
47
47
|
Expected:
|
|
48
48
|
|
|
49
49
|
```text
|
|
50
|
-
1.8.
|
|
50
|
+
1.8.9
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -407,6 +407,33 @@ The lifecycle receipt records the pre/post primitive type representation, canoni
|
|
|
407
407
|
|
|
408
408
|
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
409
409
|
|
|
410
|
+
## v1.8.9 target-proven complete Pick–Transport–Place lifecycle
|
|
411
|
+
|
|
412
|
+
v1.8.9 completes and target-proves the qualified UR5e nominal `pick_transport_place` report path on the intended ROS 2 Jazzy + Gazebo Harmonic + MoveIt/Pilz workstation. The acceptance run completed `approach_pick → grasp → lift_departure → transfer_departure → transfer_place → release → retreat_home → verify` and returned `SELECTIVE PASSED` for `TEST-PERF-001`.
|
|
413
|
+
|
|
414
|
+
The release fixes the lifecycle by separating engineering authorities instead of weakening checks:
|
|
415
|
+
|
|
416
|
+
```text
|
|
417
|
+
OEM / ros2_control controller
|
|
418
|
+
→ owns its configured FollowJointTrajectory execution tolerance
|
|
419
|
+
|
|
420
|
+
DevAgent
|
|
421
|
+
→ independently records desired-vs-actual controller feedback
|
|
422
|
+
→ preserves the 0.03 rad commissioning tracking gate
|
|
423
|
+
→ verifies exact Twin/MoveIt scene semantics
|
|
424
|
+
→ verifies carried workpiece pose before release
|
|
425
|
+
→ verifies Gazebo post-release resting pose within 5 mm / 1°
|
|
426
|
+
→ synchronizes MoveIt to the actual Gazebo-released pose before retreat
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
The qualified place verifier now evaluates the same exact workpiece↔destination-support contact contract used by the planner instead of checking the place path against inconsistent global ACM semantics. Controller feedback cadence is diagnostic evidence rather than an invented minimum-rate execution contract.
|
|
430
|
+
|
|
431
|
+
Release is a measured two-authority handoff: while the carrier owns the object, the tool/grasp-derived carried pose is authoritative; after the carrier stops, Gazebo physics owns the released object and the Twin resting pose is the verification target. DevAgent records every settle sample in `release-settle-trace.json` and does not teleport the object into tolerance.
|
|
432
|
+
|
|
433
|
+
MoveIt DETACH is deterministic. DevAgent removes attachment ownership while the robot is stationary, explicitly ADD/overwrites the world collision object with exact verified geometry at the actual Gazebo-settled pose, then requires full scene readback and semantic verification before retreat is permitted. A stale implicit MoveIt detach pose remains a hard failure.
|
|
434
|
+
|
|
435
|
+
This qualification is intentionally bounded to the packaged UR5e nominal report-test scope. It does not grant arbitrary customer-cell qualification, site qualification, functional-safety certification, or autonomous real-robot execution authority.
|
|
436
|
+
|
|
410
437
|
## Qualified visual-execution scope
|
|
411
438
|
|
|
412
439
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -607,9 +634,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
607
634
|
|
|
608
635
|
# Project status
|
|
609
636
|
|
|
610
|
-
**v1.8.
|
|
637
|
+
**v1.8.9 — Production/Stable software workflow; target-proven qualified UR5e nominal Pick–Transport–Place report path**
|
|
611
638
|
|
|
612
|
-
v1.8.
|
|
639
|
+
v1.8.9 is the first release in this line whose exact candidate completed the entire bounded UR5e nominal report lifecycle on the intended workstation: exact Twin readback, five-group Pilz preflight, approach, verified MoveIt GRASP, lift with scoped source-support contact, Gazebo carry, transfer, place, physical release/settle, explicit MoveIt detach/world reassert, retreat, and final verification. The selected target test returned `PASSED` with measured evidence recorded.
|
|
613
640
|
|
|
614
641
|
Production-oriented software capabilities include:
|
|
615
642
|
|
|
@@ -624,9 +651,15 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
624
651
|
truthful robot support tiers
|
|
625
652
|
qualified UR5e report-test visual execution contract
|
|
626
653
|
direct UR5e controller-manager/action readiness binding
|
|
654
|
+
controller-native execution tolerance + independent DevAgent tracking evidence
|
|
627
655
|
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
628
656
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
629
|
-
scoped destination-support place contact
|
|
657
|
+
scoped destination-support place contact with matching preexecution semantics
|
|
658
|
+
persistent ROS↔Gazebo workpiece carrier
|
|
659
|
+
separate carried-pose and released-resting-pose authorities
|
|
660
|
+
read-only Gazebo post-release settle verification at 5 mm / 1°
|
|
661
|
+
deterministic two-phase MoveIt detach/world reassert at measured Gazebo pose
|
|
662
|
+
release-settle trace evidence
|
|
630
663
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
631
664
|
industrial Pilz PTP / LIN planning
|
|
632
665
|
adaptive bounded blend selection
|
|
@@ -643,7 +676,7 @@ change impact + regression
|
|
|
643
676
|
provider-neutral optional AI front end
|
|
644
677
|
```
|
|
645
678
|
|
|
646
|
-
Production/Stable describes the bounded software workflow. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
679
|
+
Production/Stable describes the bounded software workflow. The target-proven UR5e claim is limited to the qualified packaged nominal report path and exact acceptance environment. It does not claim arbitrary customer cells are physically qualified, site-qualified, functionally safe, or authorized for autonomous real execution.
|
|
647
680
|
|
|
648
681
|
## Documentation
|
|
649
682
|
|
|
@@ -679,4 +712,4 @@ Original creator: Tom Ha
|
|
|
679
712
|
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
680
713
|
All rights reserved.
|
|
681
714
|
|
|
682
|
-
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
715
|
+
See repository `LICENSE`, `NOTICE`, and `COPYRIGHT` for complete ownership and usage terms.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.9"
|
|
8
8
|
description = "Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -68,6 +68,7 @@ omit = [
|
|
|
68
68
|
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
|
|
69
69
|
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py",
|
|
70
70
|
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py",
|
|
71
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v189.py",
|
|
71
72
|
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
72
73
|
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
73
74
|
"src/devagent_physical_engine/ros2/ur5e_adapter.py",
|
|
@@ -33,8 +33,17 @@ def install_industrial_motion_v170() -> None:
|
|
|
33
33
|
``transfer_place`` execution/release boundary becomes one zero-blend LIN place
|
|
34
34
|
group. Only that single place request may allow the attached workpiece to contact
|
|
35
35
|
the declared destination support, and only through a request-local full-ACM diff.
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
|
|
37
|
+
v1.8.9 deliberately does *not* override the active robot controller's configured
|
|
38
|
+
FollowJointTrajectory path tolerances for this qualified task. The UR controller
|
|
39
|
+
owns its control-loop stability contract; DevAgent independently verifies observed
|
|
40
|
+
desired-vs-actual tracking against its stricter commissioning accuracy gate and
|
|
41
|
+
verifies the released workpiece pose in Gazebo. This prevents a DevAgent-authored
|
|
42
|
+
action tolerance from aborting an otherwise valid OEM/controller trajectory while
|
|
43
|
+
preserving independent fail-closed verification.
|
|
44
|
+
|
|
45
|
+
No real-execution authority, geometry, speed, Twin lineage, collision relationship,
|
|
46
|
+
or DevAgent verification tolerance is relaxed.
|
|
38
47
|
"""
|
|
39
48
|
|
|
40
49
|
from . import report_test_execution as base_exec
|
|
@@ -48,6 +57,10 @@ def install_industrial_motion_v170() -> None:
|
|
|
48
57
|
|
|
49
58
|
visual_v170.PilzIndustrialSequencePlannerV170 = PilzIndustrialSequencePlannerV182
|
|
50
59
|
visual_v170.reference_industrial_groups = reference_industrial_groups_v182
|
|
60
|
+
# Controller-native policy: absence of an explicit positive tolerance in the
|
|
61
|
+
# FollowJointTrajectory goal means joint_trajectory_controller resolves its own
|
|
62
|
+
# configured defaults. DevAgent still evaluates observed tracking independently.
|
|
63
|
+
visual_v170._CONTROLLER_PATH_TOLERANCE_RAD = None
|
|
51
64
|
|
|
52
65
|
base_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
53
66
|
strict_exec.run_report_test_visualization = run_report_test_visualization_v170
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import asdict, dataclass
|
|
4
|
+
from math import cos, isfinite, sin
|
|
5
|
+
|
|
6
|
+
from ..pose_math import RigidPose
|
|
7
|
+
from ..simulation_platform import SimulationPlatformError
|
|
8
|
+
from .commands import RosCommandRunner
|
|
9
|
+
from .gazebo_cli import parse_gz_model_pose
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True, slots=True)
|
|
13
|
+
class GazeboPoseUpdateReceipt:
|
|
14
|
+
verified: bool
|
|
15
|
+
model_name: str
|
|
16
|
+
requested_position_m: tuple[float, float, float]
|
|
17
|
+
observed_position_m: tuple[float, float, float]
|
|
18
|
+
max_position_error_m: float
|
|
19
|
+
requested_quaternion_xyzw: tuple[float, float, float, float]
|
|
20
|
+
observed_quaternion_xyzw: tuple[float, float, float, float]
|
|
21
|
+
orientation_error_rad: float
|
|
22
|
+
|
|
23
|
+
def to_dict(self) -> dict[str, object]:
|
|
24
|
+
return asdict(self)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _quaternion_from_rpy(
|
|
28
|
+
rpy: tuple[float, float, float],
|
|
29
|
+
) -> tuple[float, float, float, float]:
|
|
30
|
+
roll, pitch, yaw = (float(value) for value in rpy)
|
|
31
|
+
cr, sr = cos(roll / 2.0), sin(roll / 2.0)
|
|
32
|
+
cp, sp = cos(pitch / 2.0), sin(pitch / 2.0)
|
|
33
|
+
cy, sy = cos(yaw / 2.0), sin(yaw / 2.0)
|
|
34
|
+
return (
|
|
35
|
+
sr * cp * cy - cr * sp * sy,
|
|
36
|
+
cr * sp * cy + sr * cp * sy,
|
|
37
|
+
cr * cp * sy - sr * sp * cy,
|
|
38
|
+
cr * cp * cy + sr * sp * sy,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _parse_pose(
|
|
43
|
+
text: str,
|
|
44
|
+
) -> tuple[
|
|
45
|
+
tuple[float, float, float],
|
|
46
|
+
tuple[float, float, float, float],
|
|
47
|
+
]:
|
|
48
|
+
try:
|
|
49
|
+
position, rpy = parse_gz_model_pose(text)
|
|
50
|
+
quaternion = _quaternion_from_rpy(rpy)
|
|
51
|
+
pose = RigidPose(position, quaternion)
|
|
52
|
+
except (SimulationPlatformError, ValueError) as exc:
|
|
53
|
+
raise SimulationPlatformError("gazebo_pose_readback_invalid") from exc
|
|
54
|
+
return pose.position_m, pose.quaternion_xyzw
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _parse_position(text: str) -> tuple[float, float, float]:
|
|
58
|
+
"""Backward-compatible position-only view over the stricter full-pose parser."""
|
|
59
|
+
|
|
60
|
+
position, _quaternion = _parse_pose(text)
|
|
61
|
+
return position
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class GazeboPoseBridge:
|
|
65
|
+
"""Read/update a dynamic model pose and require full Gazebo pose evidence."""
|
|
66
|
+
|
|
67
|
+
def __init__(
|
|
68
|
+
self,
|
|
69
|
+
runner: RosCommandRunner,
|
|
70
|
+
*,
|
|
71
|
+
world_name: str = "default",
|
|
72
|
+
timeout_s: float = 5.0,
|
|
73
|
+
position_tolerance_m: float = 0.005,
|
|
74
|
+
orientation_tolerance_rad: float = 0.017453292519943295,
|
|
75
|
+
) -> None:
|
|
76
|
+
if timeout_s <= 0 or position_tolerance_m <= 0 or orientation_tolerance_rad <= 0:
|
|
77
|
+
raise ValueError("gazebo_pose_bridge_limits_invalid")
|
|
78
|
+
if not world_name.strip():
|
|
79
|
+
raise ValueError("gazebo_world_name_required")
|
|
80
|
+
self.runner = runner
|
|
81
|
+
self.world_name = world_name
|
|
82
|
+
self.timeout_s = float(timeout_s)
|
|
83
|
+
self.position_tolerance_m = float(position_tolerance_m)
|
|
84
|
+
self.orientation_tolerance_rad = float(orientation_tolerance_rad)
|
|
85
|
+
|
|
86
|
+
def read_pose(self, *, model_name: str) -> RigidPose:
|
|
87
|
+
"""Return the model's current Gazebo pose without mutating simulation state."""
|
|
88
|
+
|
|
89
|
+
if not model_name.strip():
|
|
90
|
+
raise SimulationPlatformError("gazebo_pose_model_required")
|
|
91
|
+
readback = self.runner.run(
|
|
92
|
+
("gz", "model", "-m", model_name, "--pose"),
|
|
93
|
+
timeout_s=self.timeout_s,
|
|
94
|
+
)
|
|
95
|
+
if not readback.ok:
|
|
96
|
+
raise SimulationPlatformError("gazebo_pose_readback_failed")
|
|
97
|
+
observed_position, observed_quaternion = _parse_pose(
|
|
98
|
+
readback.stdout + "\n" + readback.stderr
|
|
99
|
+
)
|
|
100
|
+
return RigidPose(observed_position, observed_quaternion)
|
|
101
|
+
|
|
102
|
+
def set_pose(
|
|
103
|
+
self,
|
|
104
|
+
*,
|
|
105
|
+
model_name: str,
|
|
106
|
+
position_m: tuple[float, float, float],
|
|
107
|
+
quaternion_xyzw: tuple[float, float, float, float],
|
|
108
|
+
) -> GazeboPoseUpdateReceipt:
|
|
109
|
+
if not model_name.strip():
|
|
110
|
+
raise SimulationPlatformError("gazebo_pose_model_required")
|
|
111
|
+
if any(not isfinite(float(value)) for value in (*position_m, *quaternion_xyzw)):
|
|
112
|
+
raise SimulationPlatformError("gazebo_pose_non_finite")
|
|
113
|
+
requested = RigidPose(tuple(position_m), tuple(quaternion_xyzw))
|
|
114
|
+
service = f"/world/{self.world_name}/set_pose"
|
|
115
|
+
services = self.runner.run(("gz", "service", "-l"), timeout_s=self.timeout_s)
|
|
116
|
+
if not services.ok or service not in {line.strip() for line in services.stdout.splitlines()}:
|
|
117
|
+
raise SimulationPlatformError("gazebo_set_pose_service_unavailable")
|
|
118
|
+
|
|
119
|
+
x, y, z = requested.position_m
|
|
120
|
+
qx, qy, qz, qw = requested.quaternion_xyzw
|
|
121
|
+
request = (
|
|
122
|
+
f'name: "{model_name}", '
|
|
123
|
+
f'position: {{x: {x:.12g}, y: {y:.12g}, z: {z:.12g}}}, '
|
|
124
|
+
f'orientation: {{x: {qx:.12g}, y: {qy:.12g}, z: {qz:.12g}, w: {qw:.12g}}}'
|
|
125
|
+
)
|
|
126
|
+
command = self.runner.run(
|
|
127
|
+
(
|
|
128
|
+
"gz",
|
|
129
|
+
"service",
|
|
130
|
+
"-s",
|
|
131
|
+
service,
|
|
132
|
+
"--reqtype",
|
|
133
|
+
"gz.msgs.Pose",
|
|
134
|
+
"--reptype",
|
|
135
|
+
"gz.msgs.Boolean",
|
|
136
|
+
"--timeout",
|
|
137
|
+
str(max(1000, int(self.timeout_s * 1000))),
|
|
138
|
+
"--req",
|
|
139
|
+
request,
|
|
140
|
+
),
|
|
141
|
+
timeout_s=self.timeout_s + 2.0,
|
|
142
|
+
)
|
|
143
|
+
if not command.ok:
|
|
144
|
+
raise SimulationPlatformError("gazebo_set_pose_failed")
|
|
145
|
+
|
|
146
|
+
observed = self.read_pose(model_name=model_name)
|
|
147
|
+
position_error = max(
|
|
148
|
+
abs(first - second)
|
|
149
|
+
for first, second in zip(requested.position_m, observed.position_m)
|
|
150
|
+
)
|
|
151
|
+
orientation_error = requested.orientation_error_rad(observed)
|
|
152
|
+
if position_error > self.position_tolerance_m:
|
|
153
|
+
raise SimulationPlatformError(
|
|
154
|
+
f"gazebo_pose_readback_mismatch:{position_error:.6f}"
|
|
155
|
+
)
|
|
156
|
+
if orientation_error > self.orientation_tolerance_rad:
|
|
157
|
+
raise SimulationPlatformError(
|
|
158
|
+
f"gazebo_orientation_readback_mismatch:{orientation_error:.6f}"
|
|
159
|
+
)
|
|
160
|
+
return GazeboPoseUpdateReceipt(
|
|
161
|
+
True,
|
|
162
|
+
model_name,
|
|
163
|
+
requested.position_m,
|
|
164
|
+
observed.position_m,
|
|
165
|
+
position_error,
|
|
166
|
+
requested.quaternion_xyzw,
|
|
167
|
+
observed.quaternion_xyzw,
|
|
168
|
+
orientation_error,
|
|
169
|
+
)
|