devagent-physical-engine 1.6.1__tar.gz → 1.6.2__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.6.1/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.6.2}/PKG-INFO +20 -5
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/README.md +19 -4
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/pyproject.toml +2 -2
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/__init__.py +3 -1
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +40 -4
- devagent_physical_engine-1.6.2/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +39 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2/src/devagent_physical_engine.egg-info}/PKG-INFO +20 -5
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
- devagent_physical_engine-1.6.2/tests/test_smooth_motion_hotfix_v162.py +81 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/NOTICE +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/setup.cfg +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.6.1 → devagent_physical_engine-1.6.2}/tests/test_workpiece_lifecycle_v011.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
|
|
|
82
82
|
Python 3.11+ is required.
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
python -m pip install --upgrade devagent-physical-engine==1.6.
|
|
85
|
+
python -m pip install --upgrade devagent-physical-engine==1.6.2
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
Verify the installed package:
|
|
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
94
94
|
Expected:
|
|
95
95
|
|
|
96
96
|
```text
|
|
97
|
-
1.6.
|
|
97
|
+
1.6.2
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
Run the normal customer workflow:
|
|
@@ -217,6 +217,21 @@ attached workpiece ↔ conveyor_a support surface
|
|
|
217
217
|
|
|
218
218
|
That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
|
|
219
219
|
|
|
220
|
+
## v1.6.2 smooth visual motion hotfix
|
|
221
|
+
|
|
222
|
+
v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
velocity scale: 12%
|
|
226
|
+
acceleration scale: 8%
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
|
|
230
|
+
|
|
231
|
+
The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
|
|
232
|
+
|
|
233
|
+
Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
|
|
234
|
+
|
|
220
235
|
## Exact lineage hardening
|
|
221
236
|
|
|
222
237
|
A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
|
|
@@ -512,9 +527,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
512
527
|
|
|
513
528
|
# Project status
|
|
514
529
|
|
|
515
|
-
**v1.6.
|
|
530
|
+
**v1.6.2 — Production/Stable software workflow**
|
|
516
531
|
|
|
517
|
-
v1.6.
|
|
532
|
+
v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
|
|
518
533
|
|
|
519
534
|
Production-oriented software capabilities include:
|
|
520
535
|
|
|
@@ -41,7 +41,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
|
|
|
41
41
|
Python 3.11+ is required.
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
python -m pip install --upgrade devagent-physical-engine==1.6.
|
|
44
|
+
python -m pip install --upgrade devagent-physical-engine==1.6.2
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Verify the installed package:
|
|
@@ -53,7 +53,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
53
53
|
Expected:
|
|
54
54
|
|
|
55
55
|
```text
|
|
56
|
-
1.6.
|
|
56
|
+
1.6.2
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
Run the normal customer workflow:
|
|
@@ -176,6 +176,21 @@ attached workpiece ↔ conveyor_a support surface
|
|
|
176
176
|
|
|
177
177
|
That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
|
|
178
178
|
|
|
179
|
+
## v1.6.2 smooth visual motion hotfix
|
|
180
|
+
|
|
181
|
+
v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
velocity scale: 12%
|
|
185
|
+
acceleration scale: 8%
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
|
|
189
|
+
|
|
190
|
+
The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
|
|
191
|
+
|
|
192
|
+
Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
|
|
193
|
+
|
|
179
194
|
## Exact lineage hardening
|
|
180
195
|
|
|
181
196
|
A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
|
|
@@ -471,9 +486,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
471
486
|
|
|
472
487
|
# Project status
|
|
473
488
|
|
|
474
|
-
**v1.6.
|
|
489
|
+
**v1.6.2 — Production/Stable software workflow**
|
|
475
490
|
|
|
476
|
-
v1.6.
|
|
491
|
+
v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
|
|
477
492
|
|
|
478
493
|
Production-oriented software capabilities include:
|
|
479
494
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.6.
|
|
7
|
+
version = "1.6.2"
|
|
8
8
|
description = "Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -81,4 +81,4 @@ omit = [
|
|
|
81
81
|
[tool.coverage.report]
|
|
82
82
|
fail_under = 75
|
|
83
83
|
show_missing = true
|
|
84
|
-
skip_covered = false
|
|
84
|
+
skip_covered = false
|
|
@@ -108,6 +108,7 @@ from .selective_verification import (
|
|
|
108
108
|
VerificationTestMappingRecorder,
|
|
109
109
|
)
|
|
110
110
|
from .selective_verification_v16 import SelectiveVerificationServiceV16
|
|
111
|
+
from .smooth_motion_hotfix_v162 import install_smooth_motion_hotfix_v162
|
|
111
112
|
from .support_contact_hotfix_v161 import install_support_contact_hotfix_v161
|
|
112
113
|
from .twin import TwinConfidenceLevel, TwinSpec, TwinValidationReport, TwinValidator
|
|
113
114
|
from .twin_codec import twin_from_dict, twin_from_revision
|
|
@@ -211,6 +212,7 @@ __all__ = [
|
|
|
211
212
|
]
|
|
212
213
|
|
|
213
214
|
install_support_contact_hotfix_v161()
|
|
215
|
+
install_smooth_motion_hotfix_v162()
|
|
214
216
|
install_one_command_runtime()
|
|
215
217
|
|
|
216
|
-
__version__ = "1.6.
|
|
218
|
+
__version__ = "1.6.2"
|
|
@@ -14,6 +14,29 @@ def _atomic_json(path: Path, payload: dict[str, object]) -> None:
|
|
|
14
14
|
temporary.replace(path)
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
def accepted_sample_time_ns(
|
|
18
|
+
*,
|
|
19
|
+
stamped_ns: int,
|
|
20
|
+
fallback_ns: int,
|
|
21
|
+
previous_ns: int | None,
|
|
22
|
+
) -> int | None:
|
|
23
|
+
"""Return one strictly increasing sample timestamp or reject the duplicate.
|
|
24
|
+
|
|
25
|
+
Some ros2_control/Gazebo publishers can emit more than one JointState callback
|
|
26
|
+
with the same ROS header stamp. Tracking interpolation requires a strictly
|
|
27
|
+
increasing time axis, so duplicate/backward source stamps are discarded rather
|
|
28
|
+
than silently perturbing their timestamps. The recorder reports how many samples
|
|
29
|
+
were discarded so the raw acquisition behavior remains auditable.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
candidate = int(stamped_ns) if int(stamped_ns) > 0 else int(fallback_ns)
|
|
33
|
+
if candidate < 0:
|
|
34
|
+
return None
|
|
35
|
+
if previous_ns is not None and candidate <= int(previous_ns):
|
|
36
|
+
return None
|
|
37
|
+
return candidate
|
|
38
|
+
|
|
39
|
+
|
|
17
40
|
def main() -> int:
|
|
18
41
|
parser = argparse.ArgumentParser()
|
|
19
42
|
parser.add_argument("--output", required=True)
|
|
@@ -30,6 +53,7 @@ def main() -> int:
|
|
|
30
53
|
samples: list[dict[str, object]] = []
|
|
31
54
|
overflow = False
|
|
32
55
|
ready_written = False
|
|
56
|
+
dropped_non_increasing = 0
|
|
33
57
|
|
|
34
58
|
import rclpy
|
|
35
59
|
from sensor_msgs.msg import JointState
|
|
@@ -37,20 +61,29 @@ def main() -> int:
|
|
|
37
61
|
rclpy.init()
|
|
38
62
|
node = rclpy.create_node("devagent_joint_state_recorder")
|
|
39
63
|
started_ns: int | None = None
|
|
64
|
+
previous_ns: int | None = None
|
|
40
65
|
|
|
41
66
|
def callback(message: JointState) -> None:
|
|
42
|
-
nonlocal started_ns, overflow, ready_written
|
|
67
|
+
nonlocal started_ns, previous_ns, overflow, ready_written, dropped_non_increasing
|
|
43
68
|
stamp = message.header.stamp
|
|
44
69
|
stamped_ns = int(stamp.sec) * 1_000_000_000 + int(stamp.nanosec)
|
|
45
|
-
|
|
70
|
+
selected_ns = accepted_sample_time_ns(
|
|
71
|
+
stamped_ns=stamped_ns,
|
|
72
|
+
fallback_ns=node.get_clock().now().nanoseconds,
|
|
73
|
+
previous_ns=previous_ns,
|
|
74
|
+
)
|
|
75
|
+
if selected_ns is None:
|
|
76
|
+
dropped_non_increasing += 1
|
|
77
|
+
return
|
|
78
|
+
previous_ns = selected_ns
|
|
46
79
|
if started_ns is None:
|
|
47
|
-
started_ns =
|
|
80
|
+
started_ns = selected_ns
|
|
48
81
|
if len(samples) >= int(args.max_samples):
|
|
49
82
|
overflow = True
|
|
50
83
|
return
|
|
51
84
|
samples.append(
|
|
52
85
|
{
|
|
53
|
-
"time_s": (
|
|
86
|
+
"time_s": (selected_ns - started_ns) / 1_000_000_000.0,
|
|
54
87
|
"names": list(message.name),
|
|
55
88
|
"positions_rad": list(message.position),
|
|
56
89
|
}
|
|
@@ -62,6 +95,7 @@ def main() -> int:
|
|
|
62
95
|
"ready": True,
|
|
63
96
|
"topic": args.topic,
|
|
64
97
|
"first_sample_received": True,
|
|
98
|
+
"strictly_increasing_time": True,
|
|
65
99
|
},
|
|
66
100
|
)
|
|
67
101
|
ready_written = True
|
|
@@ -77,6 +111,8 @@ def main() -> int:
|
|
|
77
111
|
"sample_count": len(samples),
|
|
78
112
|
"overflow": overflow,
|
|
79
113
|
"ready_observed": ready_written,
|
|
114
|
+
"strictly_increasing_time": True,
|
|
115
|
+
"dropped_non_increasing_count": dropped_non_increasing,
|
|
80
116
|
"samples": samples,
|
|
81
117
|
}
|
|
82
118
|
_atomic_json(output, payload)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from functools import wraps
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from .ros2.moveit_task_planner import MoveItTaskPlanner
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
VISUAL_MOVEIT_VELOCITY_SCALE = 0.12
|
|
10
|
+
VISUAL_MOVEIT_ACCELERATION_SCALE = 0.08
|
|
11
|
+
_PATCH_MARKER = "_devagent_smooth_motion_v162"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def install_smooth_motion_hotfix_v162() -> None:
|
|
15
|
+
"""Install conservative defaults for the task-specific visual MoveIt planner.
|
|
16
|
+
|
|
17
|
+
MoveItTaskPlanner is used only by the packaged task/report visual execution paths.
|
|
18
|
+
Those paths previously inherited 25% velocity and 25% acceleration. On the
|
|
19
|
+
qualified UR5e reference cell that made short pick/lift phases visually abrupt
|
|
20
|
+
and also reduced controller tracking margin on a real Gazebo/ros2_control stack.
|
|
21
|
+
|
|
22
|
+
v1.6.2 lowers only the planner defaults used when the caller did not explicitly
|
|
23
|
+
request a scale. Explicit planner scales remain authoritative. Collision checking,
|
|
24
|
+
endpoint tolerances, tracking tolerances, exact-Twin lineage, and real-execution
|
|
25
|
+
authority are not relaxed.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
current = MoveItTaskPlanner.__init__
|
|
29
|
+
if getattr(current, _PATCH_MARKER, False):
|
|
30
|
+
return
|
|
31
|
+
|
|
32
|
+
@wraps(current)
|
|
33
|
+
def patched(self: MoveItTaskPlanner, *args: Any, **kwargs: Any) -> None:
|
|
34
|
+
kwargs.setdefault("velocity_scale", VISUAL_MOVEIT_VELOCITY_SCALE)
|
|
35
|
+
kwargs.setdefault("acceleration_scale", VISUAL_MOVEIT_ACCELERATION_SCALE)
|
|
36
|
+
current(self, *args, **kwargs)
|
|
37
|
+
|
|
38
|
+
setattr(patched, _PATCH_MARKER, True)
|
|
39
|
+
MoveItTaskPlanner.__init__ = patched
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.2
|
|
4
4
|
Summary: Production-grade verification-first robotics evidence runtime with one-command customer intake, validated requirement mapping, report-test Gazebo visualization, requirement-driven test generation, selective verification, deterministic Twin lineage, measured physical verification, replay inspection, regression, and FAT evidence.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -82,7 +82,7 @@ DevAgent is designed to answer: **What can be proven about this cell, what faile
|
|
|
82
82
|
Python 3.11+ is required.
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
python -m pip install --upgrade devagent-physical-engine==1.6.
|
|
85
|
+
python -m pip install --upgrade devagent-physical-engine==1.6.2
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
Verify the installed package:
|
|
@@ -94,7 +94,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
94
94
|
Expected:
|
|
95
95
|
|
|
96
96
|
```text
|
|
97
|
-
1.6.
|
|
97
|
+
1.6.2
|
|
98
98
|
```
|
|
99
99
|
|
|
100
100
|
Run the normal customer workflow:
|
|
@@ -217,6 +217,21 @@ attached workpiece ↔ conveyor_a support surface
|
|
|
217
217
|
|
|
218
218
|
That allowance is scoped to lift departure only. Transfer/place keep normal collision checking, no global PlanningScene collision policy is disabled, and the live ACM is never replaced by a sparse two-object matrix.
|
|
219
219
|
|
|
220
|
+
## v1.6.2 smooth visual motion hotfix
|
|
221
|
+
|
|
222
|
+
v1.6.2 makes the packaged UR5e visual task deliberately slower and easier to inspect. The task-specific MoveIt planner defaults are reduced from 25% velocity / 25% acceleration to:
|
|
223
|
+
|
|
224
|
+
```text
|
|
225
|
+
velocity scale: 12%
|
|
226
|
+
acceleration scale: 8%
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
This is real trajectory time parameterization through MoveIt and `FollowJointTrajectory`; DevAgent does not fake smoothness with teleports or sleeps. Explicit planner scales remain authoritative. Collision checks, endpoint tolerances, tracking tolerances, Twin lineage, and real-execution authority are unchanged.
|
|
230
|
+
|
|
231
|
+
The joint-state recorder also rejects duplicate/backward ROS source timestamps before trajectory interpolation while recording the number of dropped samples. This removes the false `trajectory_tracking_time_not_increasing` failure caused by duplicate Gazebo/ros2_control JointState stamps without manufacturing synthetic timestamps.
|
|
232
|
+
|
|
233
|
+
Because the visual trajectory now executes more slowly, cycle-time requirements are evaluated against the actual slower simulation execution. DevAgent does not normalize the observed duration back to a faster value or claim performance that was not executed.
|
|
234
|
+
|
|
220
235
|
## Exact lineage hardening
|
|
221
236
|
|
|
222
237
|
A case ID such as `case-0001` is local to its verification plan. v1.6 therefore requires the complete lineage:
|
|
@@ -512,9 +527,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
512
527
|
|
|
513
528
|
# Project status
|
|
514
529
|
|
|
515
|
-
**v1.6.
|
|
530
|
+
**v1.6.2 — Production/Stable software workflow**
|
|
516
531
|
|
|
517
|
-
v1.6.
|
|
532
|
+
v1.6.2 slows the packaged UR5e task/report visual motion to conservative 12% velocity / 8% acceleration defaults and hardens JointState acquisition against duplicate/backward ROS timestamps. It retains the v1.6.1 lift support-contact fix, exact-Twin report execution, immutable Requirement→Mapping→Verification Plan→Case lineage, typed simulation measurements, and fail-closed authority boundaries.
|
|
518
533
|
|
|
519
534
|
Production-oriented software capabilities include:
|
|
520
535
|
|
|
@@ -50,6 +50,7 @@ src/devagent_physical_engine/setup_profile.py
|
|
|
50
50
|
src/devagent_physical_engine/sim_real_qualification.py
|
|
51
51
|
src/devagent_physical_engine/simulation.py
|
|
52
52
|
src/devagent_physical_engine/simulation_platform.py
|
|
53
|
+
src/devagent_physical_engine/smooth_motion_hotfix_v162.py
|
|
53
54
|
src/devagent_physical_engine/support_contact_hotfix_v161.py
|
|
54
55
|
src/devagent_physical_engine/tool_collision.py
|
|
55
56
|
src/devagent_physical_engine/trajectory_qualification.py
|
|
@@ -200,6 +201,7 @@ tests/test_selective_verification_v14.py
|
|
|
200
201
|
tests/test_setup_profile.py
|
|
201
202
|
tests/test_sim_real_qualification_v011.py
|
|
202
203
|
tests/test_simulation_platform_v08.py
|
|
204
|
+
tests/test_smooth_motion_hotfix_v162.py
|
|
203
205
|
tests/test_support_contact_hotfix_v161.py
|
|
204
206
|
tests/test_tool_collision_v011.py
|
|
205
207
|
tests/test_tool_scene_v0124.py
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import unittest
|
|
4
|
+
|
|
5
|
+
from devagent_physical_engine.ros2.joint_state_recorder import accepted_sample_time_ns
|
|
6
|
+
from devagent_physical_engine.ros2.moveit_task_planner import MoveItTaskPlanner
|
|
7
|
+
from devagent_physical_engine.smooth_motion_hotfix_v162 import (
|
|
8
|
+
VISUAL_MOVEIT_ACCELERATION_SCALE,
|
|
9
|
+
VISUAL_MOVEIT_VELOCITY_SCALE,
|
|
10
|
+
install_smooth_motion_hotfix_v162,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SmoothMotionHotfixV162Tests(unittest.TestCase):
|
|
15
|
+
def test_default_visual_planner_is_slow_and_conservative(self) -> None:
|
|
16
|
+
install_smooth_motion_hotfix_v162()
|
|
17
|
+
install_smooth_motion_hotfix_v162()
|
|
18
|
+
planner = MoveItTaskPlanner(object())
|
|
19
|
+
self.assertEqual(planner.velocity_scale, VISUAL_MOVEIT_VELOCITY_SCALE)
|
|
20
|
+
self.assertEqual(planner.acceleration_scale, VISUAL_MOVEIT_ACCELERATION_SCALE)
|
|
21
|
+
self.assertEqual(planner.velocity_scale, 0.12)
|
|
22
|
+
self.assertEqual(planner.acceleration_scale, 0.08)
|
|
23
|
+
|
|
24
|
+
def test_explicit_planner_scales_are_not_overridden(self) -> None:
|
|
25
|
+
planner = MoveItTaskPlanner(
|
|
26
|
+
object(),
|
|
27
|
+
velocity_scale=0.21,
|
|
28
|
+
acceleration_scale=0.13,
|
|
29
|
+
)
|
|
30
|
+
self.assertEqual(planner.velocity_scale, 0.21)
|
|
31
|
+
self.assertEqual(planner.acceleration_scale, 0.13)
|
|
32
|
+
|
|
33
|
+
def test_joint_state_timestamp_uses_positive_source_stamp(self) -> None:
|
|
34
|
+
self.assertEqual(
|
|
35
|
+
accepted_sample_time_ns(
|
|
36
|
+
stamped_ns=2_000_000_000,
|
|
37
|
+
fallback_ns=9_000_000_000,
|
|
38
|
+
previous_ns=1_000_000_000,
|
|
39
|
+
),
|
|
40
|
+
2_000_000_000,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def test_joint_state_timestamp_falls_back_when_source_stamp_is_zero(self) -> None:
|
|
44
|
+
self.assertEqual(
|
|
45
|
+
accepted_sample_time_ns(
|
|
46
|
+
stamped_ns=0,
|
|
47
|
+
fallback_ns=3_000_000_000,
|
|
48
|
+
previous_ns=2_000_000_000,
|
|
49
|
+
),
|
|
50
|
+
3_000_000_000,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def test_duplicate_and_backward_joint_state_timestamps_are_rejected(self) -> None:
|
|
54
|
+
self.assertIsNone(
|
|
55
|
+
accepted_sample_time_ns(
|
|
56
|
+
stamped_ns=2_000_000_000,
|
|
57
|
+
fallback_ns=8_000_000_000,
|
|
58
|
+
previous_ns=2_000_000_000,
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
self.assertIsNone(
|
|
62
|
+
accepted_sample_time_ns(
|
|
63
|
+
stamped_ns=1_999_999_999,
|
|
64
|
+
fallback_ns=8_000_000_000,
|
|
65
|
+
previous_ns=2_000_000_000,
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
def test_first_sample_can_start_at_zero_fallback_clock(self) -> None:
|
|
70
|
+
self.assertEqual(
|
|
71
|
+
accepted_sample_time_ns(
|
|
72
|
+
stamped_ns=0,
|
|
73
|
+
fallback_ns=0,
|
|
74
|
+
previous_ns=None,
|
|
75
|
+
),
|
|
76
|
+
0,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
unittest.main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|