diff --git a/src/dual_arm_sim/CMakeLists.txt b/src/dual_arm_sim/CMakeLists.txt
index 8d15fff54..25f7b14b3 100644
--- a/src/dual_arm_sim/CMakeLists.txt
+++ b/src/dual_arm_sim/CMakeLists.txt
@@ -34,12 +34,46 @@ if(BUILD_TESTING)
target_link_libraries(test_sort_blocks tinyxml2::tinyxml2)
target_compile_definitions(test_sort_blocks PRIVATE
SORT_BLOCKS_XML="${CMAKE_CURRENT_SOURCE_DIR}/objectives/sort_blocks.xml")
+ find_package(moveit_pro_behavior_interface REQUIRED)
+ find_package(moveit_pro_base REQUIRED)
+ find_package(moveit_pro_task_constructor_core REQUIRED)
+ find_package(nlohmann_json REQUIRED)
+ find_package(pluginlib REQUIRED)
+ find_package(sensor_msgs REQUIRED)
+ find_package(geometry_msgs REQUIRED)
+ find_package(rclcpp REQUIRED)
+ find_package(pcl_conversions REQUIRED)
+ find_package(PCL REQUIRED COMPONENTS common io)
+ ament_add_gtest(test_block_surface test/test_block_surface.cpp)
+ ament_target_dependencies(test_block_surface
+ behaviortree_cpp_picknik moveit_pro_behavior_interface pluginlib
+ sensor_msgs geometry_msgs rclcpp pcl_conversions)
+ target_link_libraries(test_block_surface tinyxml2::tinyxml2 ${PCL_LIBRARIES})
+ target_compile_features(test_block_surface PRIVATE cxx_std_17)
+ target_compile_definitions(test_block_surface PRIVATE
+ FIND_WITH_PROMPT_XML="${CMAKE_CURRENT_SOURCE_DIR}/objectives/find_with_prompt.xml"
+ BLOCK_CLOUD_DATA="${CMAKE_CURRENT_SOURCE_DIR}/test/data")
+ add_executable(block_transfer_plan_probe test/block_transfer_plan_probe.cpp)
+ target_compile_features(block_transfer_plan_probe PRIVATE cxx_std_20)
+ target_link_libraries(block_transfer_plan_probe PRIVATE
+ moveit_pro_behavior_interface::behavior_context
+ moveit_pro_base::robot_model_loader
+ moveit_pro_base::moveit_pro_base_planning_scene
+ moveit_pro_task_constructor_core::moveit_pro_task_constructor_core
+ pluginlib::pluginlib nlohmann_json::nlohmann_json tinyxml2::tinyxml2)
find_package(ament_lint_auto REQUIRED)
find_package(ament_cmake_pytest REQUIRED)
ament_lint_auto_find_test_dependencies()
ament_add_pytest_test(
scene_test test/test_scene.py
TIMEOUT 120)
+ ament_add_pytest_test(
+ grasp_contacts_test test/test_grasp_contacts.py
+ TIMEOUT 120)
+ ament_add_pytest_test(
+ block_transfer_test test/test_block_transfer.py
+ TIMEOUT 210
+ ENV BLOCK_TRANSFER_PROBE=$)
ament_add_pytest_test(
base_twist_to_planar_test test/test_base_twist_to_planar.py
TIMEOUT 30)
diff --git a/src/dual_arm_sim/README.md b/src/dual_arm_sim/README.md
index bac052724..03d40322d 100644
--- a/src/dual_arm_sim/README.md
+++ b/src/dual_arm_sim/README.md
@@ -90,6 +90,18 @@ rather than overlooked.
| "Whole Body Move to Pose", "Whole Body Move to Joint State" | the shared subtrees: IK on a `*_manipulator_with_base` group, then plan, switch, execute and switch back |
| "Move Base to Ready", "Navigate to Clicked Point" | stow the arms, then drive with Nav2 to the Base Ready pose or to a clicked point |
+### Sort Blocks grasp assumptions
+
+`Sort Blocks` uses the overhead scene camera to pick the 50 mm blocks from the front table. `Find Red Block` and `Find Green Block` fit the dominant plane before computing its centroid, rejecting mask-edge points on the sides, table or floor. The top must account for at least 60% of the segmented cloud within 1 mm. This covers the default scene and the measured displaced block resting on another face; it does not infer a safe grasp for arbitrary tilted or touching blocks.
+
+A Find Objective still returns failure when it has no pose. Its `detections_empty` output is true only after successful segmentation with no objects, and is cleared on every attempt. `Sort Blocks` checks both colors before reporting exhaustion and propagates perception, pose-conversion and motion errors instead of treating them as an empty table. Inspect the mask and point-cloud capture after a surface-fit error; separate or reset displaced blocks before retrying.
+
+The Simulator uses stiffer block/finger contacts (`solref="0.006 1"`, `solimp="0.95 0.99 0.001"`), finger sliding friction 4, and elliptic constraints with `impratio=10`. Lift and carry use `carry_speed=0.25` and its square for acceleration scaling; empty-hand moves keep their existing settings. Some within-grip movement remains; these are simulation settings, not hardware tuning guidance.
+
+`Plan Block Transfer` plans approach, descent, lift and carry together before pickup, evaluating up to 64 grasp IK solutions for a branch that can finish the transfer. It lifts 100 mm, keeps the grasp orientation while clearing the front table through a corner, then moves to the saved Place pose with 50 mm extra height for the destination stack. The solution splits at gripper closure: pickup ends after descent, carry starts with lift. A planning failure leaves the arm at its starting pose with the gripper open. Joint limits, table geometry and robot collision checks remain unchanged.
+
+Two consecutive default-scene Sort Blocks runs placed all six blocks on the correct tables, with no loss of hand contact or unintended block/table contact during the measured post-lift carries. This is not an object-aware planner: displaced obstacles or arbitrary stacks need a new plan and validation. `test/test_grasp_contacts.py` exercises both hands and replays near/far articulated carries; `test/test_block_transfer.py` plans recorded pickups through the real subtree and checks split continuity and a full-block clearance envelope including 25 mm within-grip displacement. [test/data/README.md](test/data/README.md) describes the regression inputs.
+
## Build and run
```bash
@@ -108,4 +120,4 @@ moveit_pro run -c dual_arm_sim
| `maps/`, `params/` | the Nav2 map and parameters |
| `objectives/`, `waypoints/` | Objectives, drawing paths and saved waypoints |
| `scripts/` | the odometry and `/cmd_vel` bridges, the map generator, and the SVG drawing tools (see `scripts/README.md`) |
-| `test/` | the scene, bridge and Objectives integration tests |
+| `test/` | the scene, bridge and Objectives integration tests, and the block grasp, surface and transfer regressions with their recorded inputs in `test/data/` |
diff --git a/src/dual_arm_sim/description/mujoco/mobile_fr3_duo.xml b/src/dual_arm_sim/description/mujoco/mobile_fr3_duo.xml
index 4ef670e71..8da46a52c 100644
--- a/src/dual_arm_sim/description/mujoco/mobile_fr3_duo.xml
+++ b/src/dual_arm_sim/description/mujoco/mobile_fr3_duo.xml
@@ -9,6 +9,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -1429,6 +1439,7 @@
@@ -1493,6 +1504,7 @@
@@ -2100,6 +2113,7 @@
-
+
+
@@ -177,7 +178,7 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -17,6 +18,11 @@
+
diff --git a/src/dual_arm_sim/objectives/find_red_block.xml b/src/dual_arm_sim/objectives/find_red_block.xml
index 6e77dce29..6d2fc7d09 100644
--- a/src/dual_arm_sim/objectives/find_red_block.xml
+++ b/src/dual_arm_sim/objectives/find_red_block.xml
@@ -8,6 +8,7 @@
_collapsed="false"
prompt="a red block"
object_centroid="{object_centroid}"
+ detections_empty="{detections_empty}"
/>
@@ -17,6 +18,11 @@
+
diff --git a/src/dual_arm_sim/objectives/find_with_prompt.xml b/src/dual_arm_sim/objectives/find_with_prompt.xml
index 92f58ebf4..d2b1f1709 100644
--- a/src/dual_arm_sim/objectives/find_with_prompt.xml
+++ b/src/dual_arm_sim/objectives/find_with_prompt.xml
@@ -3,6 +3,7 @@
+
+
+
+
+
+
+
+ True only when segmentation succeeded with no objects; failures leave
+ this false.
+
diff --git a/src/dual_arm_sim/objectives/plan_block_transfer.xml b/src/dual_arm_sim/objectives/plan_block_transfer.xml
new file mode 100644
index 000000000..dd7922990
--- /dev/null
+++ b/src/dual_arm_sim/objectives/plan_block_transfer.xml
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/dual_arm_sim/objectives/sort_blocks.xml b/src/dual_arm_sim/objectives/sort_blocks.xml
index 6bc44d4da..057652163 100644
--- a/src/dual_arm_sim/objectives/sort_blocks.xml
+++ b/src/dual_arm_sim/objectives/sort_blocks.xml
@@ -2,7 +2,7 @@
@@ -11,127 +11,62 @@
log_level="warn"
message="Work in progress. The robot may miss blocks. Enable 'info' logs to see cycle time"
/>
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
@@ -275,7 +144,7 @@
-
+
diff --git a/src/dual_arm_sim/package.xml b/src/dual_arm_sim/package.xml
index 51095860a..d9808b306 100644
--- a/src/dual_arm_sim/package.xml
+++ b/src/dual_arm_sim/package.xml
@@ -44,6 +44,17 @@
ament_flake8ament_lint_autobehaviortree_cpp_picknik
+ geometry_msgs
+ moveit_pro_base
+ moveit_pro_behavior_interface
+ moveit_pro_task_constructor_core
+ moveit_studio_utils_py
+ nlohmann-json-dev
+ pcl_conversions
+ pluginlib
+ python3-numpy
+ rclcpp
+ sensor_msgspicknik_ament_copyrightpython3-pytestpython3-yaml
diff --git a/src/dual_arm_sim/test/block_transfer_plan_probe.cpp b/src/dual_arm_sim/test/block_transfer_plan_probe.cpp
new file mode 100644
index 000000000..ed273b576
--- /dev/null
+++ b/src/dual_arm_sim/test/block_transfer_plan_probe.cpp
@@ -0,0 +1,248 @@
+// Copyright 2026 PickNik Inc.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// * Neither the name of the PickNik Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+// Plan-only companion for test_block_transfer.py. No execution or live-scene clients.
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace
+{
+using Json = nlohmann::json;
+using Solution = moveit_task_constructor_msgs::msg::Solution;
+
+[[nodiscard]] Json trajectories(const Solution& solution)
+{
+ Json result = Json::array();
+ for (const auto& stage : solution.sub_trajectory)
+ {
+ const auto& trajectory = stage.trajectory.joint_trajectory;
+ Json row{ { "joints", trajectory.joint_names }, { "points", Json::array() } };
+ for (const auto& point : trajectory.points)
+ {
+ row["points"].push_back(
+ { { "t", point.time_from_start.sec + point.time_from_start.nanosec * 1e-9 }, { "q", point.positions } });
+ }
+ result.push_back(row);
+ }
+ return result;
+}
+} // namespace
+
+int main(int argc, char** argv)
+{
+ if (argc < 4)
+ {
+ std::cerr << "Expected cases JSON, Objective XML, and result JSON paths.\n";
+ return 2;
+ }
+ rclcpp::init(argc, argv);
+ const auto node = std::make_shared(
+ "block_transfer_plan_test", rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true));
+ const auto context = std::make_shared(
+ node, std::make_unique(), false, false);
+ const auto model_loader = moveit_pro::base::robot_model_loader::RobotModelLoader::create(
+ node, moveit_pro::base::robot_model_loader::RobotModelLoader::Options());
+ if (!model_loader)
+ {
+ std::cerr << model_loader.error() << '\n';
+ return 2;
+ }
+ context->robot_model = (*model_loader)->getModel();
+ geometry_msgs::msg::TransformStamped anchor;
+ anchor.header.frame_id = "odom";
+ anchor.child_frame_id = "test_anchor";
+ anchor.transform.rotation.w = 1;
+ context->transform_buffer_ptr->setTransform(anchor, "fixture", true);
+ pluginlib::ClassLoader loader(
+ "moveit_pro_behavior_interface", "moveit_pro::behaviors::SharedResourcesNodeLoaderBase");
+ std::vector> plugins;
+ BT::BehaviorTreeFactory factory;
+ for (const auto* name : { "CoreBehaviorsLoader", "MTCCoreBehaviorsLoader", "ConverterBehaviorsLoader" })
+ {
+ plugins.push_back(loader.createSharedInstance(std::string("moveit_pro::behaviors::") + name));
+ plugins.back()->registerBehaviors(factory, context);
+ }
+ auto scene = std::make_shared(context->robot_model);
+ moveit_msgs::msg::RobotState waypoint;
+ // Replace service-backed state acquisition only; all pose math, planners and solution splitting are real.
+ std::ignore = factory.unregisterBuilder("GetCurrentPlanningScene");
+ factory.registerSimpleAction("GetCurrentPlanningScene",
+ [&](BT::TreeNode& behavior) {
+ moveit_msgs::msg::PlanningScene message;
+ scene->getPlanningSceneMsg(message);
+ behavior.setOutput("planning_scene_msg", message);
+ return BT::NodeStatus::SUCCESS;
+ },
+ { BT::OutputPort("planning_scene_msg") });
+ std::ignore = factory.unregisterBuilder("RetrieveWaypoint");
+ factory.registerSimpleAction("RetrieveWaypoint",
+ [&](BT::TreeNode& behavior) {
+ behavior.setOutput("waypoint_joint_state", waypoint);
+ return BT::NodeStatus::SUCCESS;
+ },
+ { BT::InputPort("joint_group_name"),
+ BT::InputPort("waypoint_name"),
+ BT::OutputPort("waypoint_joint_state") });
+ std::ignore = factory.unregisterBuilder("SetupMTCCurrentState");
+ factory.registerSimpleAction(
+ "SetupMTCCurrentState",
+ [&](BT::TreeNode& behavior) {
+ const auto task = behavior.getInput("task").value();
+ auto state = std::make_unique("current state");
+ state->setState(scene);
+ // CurrentState does not check fixed table/table-leg overlaps; moving-group checks remain enabled below.
+ state->setIgnoreCollisions(true);
+ task->add(std::move(state));
+ return BT::NodeStatus::SUCCESS;
+ },
+ { BT::InputPort("task") });
+ tinyxml2::XMLDocument xml;
+ if (xml.LoadFile(argv[2]) != tinyxml2::XML_SUCCESS)
+ {
+ std::cerr << "Cannot load Plan Block Transfer Objective XML.\n";
+ return 2;
+ }
+ // No telemetry server is needed by an offline planning test.
+ std::function disable_telemetry = [&](tinyxml2::XMLElement* element) {
+ if (element->Attribute("ID") && std::string(element->Attribute("ID")) == "InitializeMTCTask")
+ {
+ element->SetAttribute("enable_introspection", "false");
+ }
+ for (auto* child = element->FirstChildElement(); child; child = child->NextSiblingElement())
+ {
+ disable_telemetry(child);
+ }
+ };
+ disable_telemetry(xml.RootElement());
+ tinyxml2::XMLPrinter printer;
+ xml.Print(&printer);
+ factory.registerBehaviorTreeFromText(printer.CStr());
+ std::ifstream input(argv[1]);
+ const Json cases = Json::parse(input);
+ Json results = Json::array();
+ for (const auto& item : cases)
+ {
+ const std::string arm = item.at("arm");
+ const std::string group = arm + "_manipulator_without_spine";
+ auto& state = scene->getCurrentStateNonConst();
+ state.setToDefaultValues();
+ for (const auto& [name, value] : item.at("joints").items())
+ {
+ if (context->robot_model->hasJointModel(name))
+ {
+ state.setVariablePosition(name, value.get());
+ }
+ }
+ state.update();
+ moveit_pro::base::collision_detection::CollisionResult::ContactMap contacts;
+ scene->getCollidingPairs(contacts, state, group);
+ if (!contacts.empty())
+ {
+ std::cerr << "Recorded moving group starts in collision: " << item.at("name") << '\n';
+ return 3;
+ }
+ waypoint = moveit_msgs::msg::RobotState{};
+ for (const auto& [name, value] : item.at("waypoint").items())
+ {
+ waypoint.joint_state.name.push_back(name);
+ waypoint.joint_state.position.push_back(value.get());
+ }
+ auto board = BT::Blackboard::create();
+ geometry_msgs::msg::PoseStamped pose;
+ pose.header.frame_id = "odom";
+ const auto& xyz = item.at("approach").at("xyz");
+ const auto& quat = item.at("approach").at("wxyz");
+ pose.pose.position.x = xyz[0];
+ pose.pose.position.y = xyz[1];
+ pose.pose.position.z = xyz[2];
+ pose.pose.orientation.w = quat[0];
+ pose.pose.orientation.x = quat[1];
+ pose.pose.orientation.y = quat[2];
+ pose.pose.orientation.z = quat[3];
+ board->set("approach_pose", pose);
+ board->set("planning_group", group);
+ board->set("hand_frame", arm + "_fr3v2_hand_tcp");
+ board->set("place_waypoint", "fixture");
+ board->set("corner_y", arm == "right" ? -.4 : .4);
+ board->set("carry_speed", .25);
+ board->set("carry_acceleration", .0625);
+ auto tree = factory.createTree("Plan Block Transfer", board);
+ const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(20);
+ BT::NodeStatus status;
+ do
+ {
+ status = tree.tickExactlyOnce();
+ if (status != BT::NodeStatus::RUNNING)
+ {
+ break;
+ }
+ tree.sleep(std::chrono::milliseconds(1));
+ } while (std::chrono::steady_clock::now() < deadline);
+ Json result{ { "name", item.at("name") }, { "status", BT::toStr(status) } };
+ Solution pickup;
+ Solution carry;
+ if (board->get("pickup_solution", pickup))
+ {
+ result["pickup"] = trajectories(pickup);
+ }
+ if (board->get("carry_solution", carry))
+ {
+ result["carry"] = trajectories(carry);
+ }
+ if (status != BT::NodeStatus::SUCCESS)
+ {
+ result["error"] = context->logger->consumeErrorLogBuffer();
+ tree.haltTree();
+ }
+ std::cout << result.at("name") << ": " << BT::toStr(status) << '\n';
+ results.push_back(result);
+ }
+ std::ofstream(argv[3]) << results.dump(2);
+ factory.clearRegisteredBehaviorTrees();
+ rclcpp::shutdown();
+ return 0;
+}
diff --git a/src/dual_arm_sim/test/data/README.md b/src/dual_arm_sim/test/data/README.md
new file mode 100644
index 000000000..a007fc957
--- /dev/null
+++ b/src/dual_arm_sim/test/data/README.md
@@ -0,0 +1,15 @@
+# Block surface regression captures
+
+`red3_before_pick.pcd` and `red3_after_drop.pcd` are binary-compressed XYZRGB clouds of the same simulated 50 mm block, captured from `SendPointCloudToUI` before picking and after a dropped grasp. Coordinates are in the fixed world/model frame, in metres; the PCD format does not preserve ROS frame or timestamp headers. The test supplies its own header and verifies its preservation.
+
+The block's independently measured MuJoCo top is at world z = 0.804362824 m in both captures. Before picking, the mask includes the top and sides (1,925 points). After dropping, the block has moved from (0.8500, -0.2500) m to (0.7338, -0.2575) m and rests on a different face with yaw; the mask contains 1,825 points including 32 floor points. Whole-cloud centroids are 7.99 mm and 20.13 mm below the top. These captures cover this displacement and face change, not arbitrary tilted or merged objects.
+
+`red3_on_floor.pcd` captures a later dropped block at world centre (0.64484, -0.78819, 0.02497) m. Only 55% of its segmented cloud belongs to the largest plane, below the configured 60% acceptance fraction. The test verifies that this rejected surface is an error, not empty detections.
+
+`test_block_surface.cpp` replays the clouds through the shipped Find subtree with only inference and marker publication replaced. Point selection, plane extraction and centroid computation use the installed Behaviors. All geometry and colour data are synthetic Simulator output; no camera images, credentials or operational logs are included.
+
+`right_arm_carry.json` and `right_arm_far_block_carry.json` hold recorded pregrasp joint states and measured position samples of the arm/spine actuators during a 100 mm lift followed by a carry to the right table, for the near and far red blocks. Sample times are elapsed simulation seconds; joint positions are radians or metres according to the model joint type. The offline test uses these samples as actuator position references, not as kinematic constraints: it sets the initial state once, then steps the complete articulated scene, including both fingers and free blocks. The gripper closes after 0.45 s and stays commanded closed; the trajectory is replayed at the Objective's quarter-speed carry setting. This is a deterministic contact regression that reproduces a block yawing out during carry; it does not replay the live controller's internal references or guarantee hardware performance.
+
+`block_transfer_states.json` contains seven recorded pre-pickup states: all six default-scene pickups in sequence, including previously placed blocks, and a second red-block pickup from a different joint configuration. `qpos` follows the compiled scene's joint order; free-body quaternions and approach orientations are `wxyz`. Each approach is the measured surface pose plus the existing 75 mm standoff. The active hand is opened to 40 mm per finger to match the Objective's preplanning step. Joint angles are radians and distances are metres; there are no timestamps, camera images or logs.
+
+`test_block_transfer.py` derives robot parameters and Place waypoints from the current config. Its C++ companion runs the shipped `Plan Block Transfer` with installed planners and solution splitting, substituting only scene and waypoint acquisition. The test checks that the two solutions join at the grasp, that lift precedes carry, and that every post-lift sample clears the other recorded blocks and tables with a cube bounding sphere plus 25 mm for measured within-grip movement. Initial lift begins in intended table support contact. An unreachable target must fail without executable solutions. These are planning regressions, not a replacement for the live contact and end-to-end tests.
diff --git a/src/dual_arm_sim/test/data/block_transfer_states.json b/src/dual_arm_sim/test/data/block_transfer_states.json
new file mode 100644
index 000000000..da235d0ce
--- /dev/null
+++ b/src/dual_arm_sim/test/data/block_transfer_states.json
@@ -0,0 +1,653 @@
+[
+ {
+ "name": "block_red_1",
+ "arm": "right",
+ "block": "block_red_1",
+ "qpos": [
+ -0.2999999998970231,
+ -6.537762335216726e-11,
+ -1.9234008874376335e-10,
+ -2.0130636094609887e-09,
+ 3.7108036177619536e-14,
+ -7.440523194806135e-10,
+ -5.694224698434518e-16,
+ -5.6197175940036076e-14,
+ -1.7602888063957921e-10,
+ -4.8822274800284704e-14,
+ -7.440523194804467e-10,
+ 1.4541937242458227e-15,
+ 0.40000000102009925,
+ -1.3319500491937586e-09,
+ -0.7854000026915481,
+ -1.1327837272047215e-09,
+ -2.356200023072752,
+ 1.4238816983342758e-07,
+ 1.5707000071938908,
+ 0.7852999933616556,
+ 1.989171670349477e-05,
+ 1.977230679853082e-05,
+ -9.162404506215337e-10,
+ -0.7854000026477249,
+ -9.973433815955474e-10,
+ -2.3562000184534644,
+ 1.1402865248061795e-07,
+ 1.5707000053151559,
+ 0.7852999946601485,
+ 0.04,
+ 0.04,
+ 0.6500000000097855,
+ 0.24999972229417788,
+ 0.7799658719765066,
+ 0.999999999999982,
+ 3.4240805633284714e-16,
+ -6.237468820654503e-17,
+ 1.9226465163820988e-07,
+ 0.7499999999992808,
+ -0.24999962625186695,
+ 0.7799658719765065,
+ 0.99999999999998,
+ 1.0145576422471341e-18,
+ 7.681355722508402e-17,
+ -2.0258142454551038e-07,
+ 0.8499999999818251,
+ 0.2499997222789486,
+ 0.7799658719765067,
+ 0.9999999999999807,
+ -7.14525626793999e-17,
+ -2.3155978730098907e-17,
+ -1.9913358879701078e-07,
+ 0.6499999999908456,
+ -0.24999962625279915,
+ 0.7799658719765071,
+ 0.9999999999999811,
+ -7.814467827134703e-17,
+ 1.6937788351903577e-16,
+ -1.9945548744320488e-07,
+ 0.750000000011128,
+ 0.24999972227857875,
+ 0.779965871976507,
+ 0.9999999999999802,
+ 7.32899885621256e-17,
+ -7.362784427204542e-17,
+ -1.9938402577831874e-07,
+ 0.8499999999992626,
+ -0.24999962625514568,
+ 0.7799658719765066,
+ 0.9999999999999806,
+ -4.3106432563614015e-17,
+ 7.26889708159141e-17,
+ -1.9933616764423272e-07
+ ],
+ "approach": {
+ "xyz": [
+ 0.6500955233143435,
+ -0.2500679247282646,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_red_2",
+ "arm": "right",
+ "block": "block_red_2",
+ "qpos": [
+ -0.2999732979399056,
+ 1.3789000080831217e-05,
+ 1.6965783913978274e-05,
+ 0.0005341014132092198,
+ 5.5333086151681464e-14,
+ 0.0010019409091855036,
+ -8.962451727651269e-16,
+ 1.4124508812125776e-05,
+ 0.000407158315212273,
+ 1.5945948567229267e-11,
+ 0.0010019409090320712,
+ 2.8056326406507835e-08,
+ 0.4000150375545029,
+ 3.834821446986088e-07,
+ -0.785396212944955,
+ 1.6633782005026109e-06,
+ -2.356198228671776,
+ -5.863920391295188e-08,
+ 1.5706999586750614,
+ 0.7853000478932213,
+ 2.000103399431051e-05,
+ 1.999537349622884e-05,
+ -8.289608377855614e-06,
+ -0.7854279983258516,
+ -8.152017208263898e-06,
+ -2.3562035443943152,
+ -9.425061317030628e-06,
+ 1.570706813897042,
+ 0.7852973268723414,
+ 0.04,
+ 0.04,
+ 0.6500000000097828,
+ 0.2499997222941771,
+ 0.7799658719765068,
+ 0.9999999999998991,
+ 3.8951362714845625e-17,
+ 1.821171984378494e-16,
+ 4.511990391410513e-07,
+ 0.749999999999275,
+ -0.24999962625186922,
+ 0.7799658719765071,
+ 0.9999999999998955,
+ 1.7311604362191962e-16,
+ 1.8491452509507931e-16,
+ -4.5861673347559536e-07,
+ 0.8499999999818466,
+ 0.2499997222789397,
+ 0.7799658719765072,
+ 0.9999999999998959,
+ -1.0578050402964435e-16,
+ -1.5683032160585448e-16,
+ -4.579127812127506e-07,
+ 0.1412060375900795,
+ -0.7565187777455816,
+ 0.7799658719765066,
+ 0.4449311720379394,
+ -1.9951526864120287e-13,
+ -7.971972323110937e-12,
+ 0.8955647671435859,
+ 0.7500000000111223,
+ 0.24999972227862183,
+ 0.7799658719765072,
+ 0.9999999999998967,
+ 3.7394372200510465e-16,
+ -4.567586579349809e-16,
+ -4.564507927868655e-07,
+ 0.8499999999992658,
+ -0.24999962625515113,
+ 0.7799658719765072,
+ 0.9999999999998956,
+ 3.159704362275692e-16,
+ -1.3292795076943456e-16,
+ -4.568737737114423e-07
+ ],
+ "approach": {
+ "xyz": [
+ 0.7495775848627091,
+ 0.25006792472826467,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_red_3",
+ "arm": "right",
+ "block": "block_red_3",
+ "qpos": [
+ -0.29991200994326866,
+ 3.370334465801933e-05,
+ 1.790965547261024e-05,
+ 0.0017353060840044788,
+ 6.973082250387666e-14,
+ 0.0018536666856603355,
+ -1.2187857529759385e-15,
+ 9.640876442299311e-05,
+ 0.0012594409065585653,
+ 4.09192791341857e-11,
+ 0.0018536666822556442,
+ 1.5417570245518579e-07,
+ 0.4000743864373964,
+ 1.4462124432202361e-06,
+ -0.7853900245372248,
+ 4.007300328549959e-06,
+ -2.356190708767968,
+ -1.0550773097804403e-06,
+ 1.5706968560789387,
+ 0.7853001485816125,
+ 2.0026821082993667e-05,
+ 1.9969586407529002e-05,
+ -5.690672971025263e-05,
+ -0.7854850315904188,
+ -5.22530026653146e-05,
+ -2.356222575837023,
+ -7.358467579449285e-05,
+ 1.5707660851382341,
+ 0.7852520612013522,
+ 0.04,
+ 0.04,
+ 0.6500000000096359,
+ 0.24999972229429945,
+ 0.7799658719765067,
+ 0.9999999999997694,
+ -3.100073792978735e-16,
+ 1.8164733098311654e-16,
+ 6.797466651473825e-07,
+ 0.749999999999246,
+ -0.24999962625183786,
+ 0.7799658719765067,
+ 0.999999999999761,
+ 2.6037851783356956e-16,
+ 2.932037310766968e-17,
+ -6.922328045421208e-07,
+ 0.8499999999818196,
+ 0.24999972227898873,
+ 0.779965871976507,
+ 0.9999999999997649,
+ -2.4771878883909023e-16,
+ 5.408623061932443e-16,
+ -6.867315354917471e-07,
+ 0.14117474554038004,
+ -0.7565607469809333,
+ 0.7799320786992354,
+ 0.44361949810702545,
+ 5.0146419233979364e-05,
+ 8.312424081501395e-05,
+ 0.8962152260896747,
+ 0.14421681274204218,
+ -0.7546180094102988,
+ 0.8299264269307861,
+ -0.3315697571018477,
+ -8.014959033667982e-05,
+ -7.321710027112803e-05,
+ -0.9434306993047876,
+ 0.8499999999993118,
+ -0.24999962625513414,
+ 0.7799658719765069,
+ 0.9999999999997623,
+ 1.8750016623519097e-16,
+ -1.433256613725682e-16,
+ -6.897010921788775e-07
+ ],
+ "approach": {
+ "xyz": [
+ 0.8497410311489492,
+ -0.25006792472826467,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_green_2",
+ "arm": "left",
+ "block": "block_green_2",
+ "qpos": [
+ -0.2985081084008341,
+ 0.00047772917532929284,
+ 0.001260262247951973,
+ 0.0012252275649566027,
+ 8.896714327064932e-14,
+ 0.002015153577376339,
+ -1.5817207035477967e-15,
+ 0.00022932885587493288,
+ 0.0010246448573884518,
+ 3.1656155055895905e-10,
+ 0.0020151535682711745,
+ 2.3482403146234086e-07,
+ 0.4000005492913064,
+ 2.3198524428280156e-08,
+ -0.7853994104438062,
+ 1.2737147799004548e-07,
+ -2.3561999075083775,
+ 2.1849196306215755e-09,
+ 1.5706999874191325,
+ 0.7853000014307306,
+ 0.04,
+ 0.04,
+ -2.1329598599030903e-07,
+ -0.785403806375759,
+ -2.616191672567191e-07,
+ -2.356200040157225,
+ -1.7174145527735756e-07,
+ 1.5706998157740544,
+ 0.7852999800068975,
+ 0.03500000350394418,
+ 0.03499999649605652,
+ 0.650000000009649,
+ 0.24999972229448683,
+ 0.7799658719765067,
+ 0.9999999999995633,
+ -7.29595645732797e-17,
+ 2.844070568207481e-16,
+ 9.347992900674373e-07,
+ 0.7499999999992649,
+ -0.2499996262518411,
+ 0.7799658719765065,
+ 0.9999999999995517,
+ -3.482983993302103e-16,
+ 1.6121531107630606e-16,
+ -9.478023099065628e-07,
+ 0.8499999999818072,
+ 0.24999972227899078,
+ 0.7799658719765071,
+ 0.9999999999995571,
+ 1.3546137831305444e-16,
+ -3.243210681208437e-16,
+ -9.412400766030183e-07,
+ 0.13990717622416654,
+ -0.7534705533443682,
+ 0.7799322099344381,
+ 0.3857596912873735,
+ -0.0004290732543432324,
+ 0.00015626486690340378,
+ 0.9225991827740283,
+ 0.12742102503322847,
+ -0.7419494385769239,
+ 0.8299071175154573,
+ 0.01640694871968042,
+ 0.0004202688366226837,
+ -0.0003954247047246669,
+ -0.999865230442142,
+ 0.2216894576748766,
+ -0.6584497639397485,
+ 0.7799658719765068,
+ 0.7070265583022214,
+ 0.010651096425912426,
+ 0.7070265583027703,
+ -0.010651096412207774
+ ],
+ "approach": {
+ "xyz": [
+ 0.7501147817910637,
+ -0.24995177402862462,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_green_1",
+ "arm": "left",
+ "block": "block_green_1",
+ "qpos": [
+ -0.29862113905379783,
+ 0.00046790084195967927,
+ 0.0012371353642302223,
+ -0.000660581510007777,
+ 9.702522739944603e-14,
+ 0.0008946072467620346,
+ -1.883515809286532e-15,
+ 0.00047951139336616284,
+ 0.00043260008310714963,
+ 3.1676163873844355e-10,
+ 0.0008946072972303129,
+ -2.973996170464375e-07,
+ 0.40000127962612936,
+ 7.58789841908908e-07,
+ -0.7854095873794369,
+ 5.871577591750029e-07,
+ -2.356199881978428,
+ 3.8149825673523063e-07,
+ 1.5706999462776148,
+ 0.7853000476122275,
+ 0.04,
+ 0.04,
+ -4.0577747836862255e-08,
+ -0.7854000596776678,
+ -2.7440726130712054e-07,
+ -2.356199835772646,
+ -2.8754586957191596e-08,
+ 1.5706999810068791,
+ 0.7852999996742591,
+ 0.0350000003239518,
+ 0.03499999967604836,
+ 0.6500000000096541,
+ 0.24999972229448658,
+ 0.7799658719765071,
+ 0.9999999999993211,
+ -1.6303136563722658e-17,
+ 1.7031089210545818e-16,
+ 1.1654835291847861e-06,
+ 0.09877744988474829,
+ 0.736970254814955,
+ 0.7799658719765065,
+ 0.5102056561702624,
+ 1.3343341979582497e-11,
+ 9.29508733880287e-13,
+ 0.8600524335247653,
+ 0.8499999999818038,
+ 0.24999972227899744,
+ 0.7799658719765068,
+ 0.9999999999993119,
+ -2.0805254614514716e-17,
+ 1.0077663926216859e-16,
+ -1.1735966376326678e-06,
+ 0.13990717486603463,
+ -0.7534705526972129,
+ 0.7799322099517281,
+ 0.3857601034661903,
+ -0.0004291002817385294,
+ 0.00015627467312162574,
+ 0.9225990104183555,
+ 0.12742024068006985,
+ -0.7419487069564464,
+ 0.8299071152709083,
+ 0.016406368657582,
+ 0.0004202991872413348,
+ -0.00039545322601215515,
+ -0.9998652399362682,
+ 0.2216894576723524,
+ -0.6584497638378908,
+ 0.7799658719765069,
+ 0.7070265602551405,
+ 0.010650966800426457,
+ 0.7070265602551408,
+ -0.010650966800426442
+ ],
+ "approach": {
+ "xyz": [
+ 0.6500955233143437,
+ 0.2500679247282647,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_green_3",
+ "arm": "left",
+ "block": "block_green_3",
+ "qpos": [
+ -0.29864871683234523,
+ 0.0004625934647616484,
+ 0.001247809823561847,
+ -0.0013747697927651132,
+ 1.1441216140047767e-13,
+ 0.0005643066196338757,
+ -2.1674301301507846e-15,
+ 0.0007733383104246772,
+ 0.00021359322996268354,
+ 1.869590953824619e-10,
+ 0.000564306773802834,
+ -7.283917079251536e-07,
+ 0.40000023570677384,
+ 1.2292099943172127e-07,
+ -0.7854036990693511,
+ 1.0955374303002368e-07,
+ -2.3561999353488132,
+ 4.408360821833069e-08,
+ 1.5706999194945594,
+ 0.7853000047268749,
+ 0.04,
+ 0.04,
+ -9.899892242763813e-09,
+ -0.7854000233858829,
+ -6.544273310826079e-08,
+ -2.3561999519006798,
+ -6.1733247706750545e-09,
+ 1.5706999817670038,
+ 0.7852999995576629,
+ 0.03500000006272571,
+ 0.03499999993727431,
+ 0.09823865056496586,
+ 0.7372324503927766,
+ 0.8299224574930913,
+ 0.5147446615050365,
+ -2.1718911649583587e-05,
+ 3.814702295410259e-07,
+ 0.8573435326519995,
+ 0.09883699548921257,
+ 0.7368597862387246,
+ 0.779932072716846,
+ 0.5102011467948526,
+ -1.8954960767272653e-05,
+ 4.097947106258385e-07,
+ 0.8600551083795502,
+ 0.8499999999818021,
+ 0.24999972227900627,
+ 0.7799658719765068,
+ 0.9999999999990561,
+ 1.686117095088259e-16,
+ 1.4408057296309262e-17,
+ -1.3742211909621194e-06,
+ 0.13990717366704564,
+ -0.7534705521172169,
+ 0.7799322099670625,
+ 0.3857604624272676,
+ -0.0004291242551944627,
+ 0.00015628337503549163,
+ 0.9225988603156734,
+ 0.12741954484225984,
+ -0.741948058059633,
+ 0.8299071132797475,
+ 0.016405857901027745,
+ 0.0004203261076563134,
+ -0.00039547852940069613,
+ -0.9998652482956027,
+ 0.22168945767234627,
+ -0.6584497638378963,
+ 0.7799658719765067,
+ 0.7070265624363723,
+ 0.01065082200611065,
+ 0.7070265624363727,
+ -0.010650822006110876
+ ],
+ "approach": {
+ "xyz": [
+ 0.8497410311489493,
+ 0.25006792472826467,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ },
+ {
+ "name": "block_red_2_alternate",
+ "arm": "right",
+ "block": "block_red_2",
+ "qpos": [
+ -0.29997213595364575,
+ 1.3403512740376194e-05,
+ 1.7254751403312423e-05,
+ 0.0006047862510923191,
+ 8.552885043704041e-14,
+ 0.0010090816903090072,
+ -1.2101239838938369e-15,
+ 1.4114657649381014e-05,
+ 0.00045179641291565346,
+ 1.028368533151771e-11,
+ 0.0010090816901489716,
+ 2.848071293743572e-08,
+ 0.400020564251914,
+ 4.946698725761315e-07,
+ -0.7853954721683641,
+ 2.0364373839638996e-06,
+ -2.3561975823384054,
+ -1.0712046628229295e-07,
+ 1.5706998573099753,
+ 0.785300063152624,
+ 2.0003850514785856e-05,
+ 1.9993518933733292e-05,
+ -1.194681241670375e-05,
+ -0.7854345153752477,
+ -1.1555199287517402e-05,
+ -2.356205287698097,
+ -1.3992278488505474e-05,
+ 1.5707116456840562,
+ 0.7852954459126665,
+ 0.04,
+ 0.04,
+ 0.6500000000098531,
+ 0.24999972229413708,
+ 0.7799658719765067,
+ 0.9999999999997435,
+ 2.1800735679816633e-16,
+ -2.1411306864590157e-18,
+ 7.169404125043943e-07,
+ 0.7499999999992812,
+ -0.24999962625186725,
+ 0.7799658719765066,
+ 0.9999999999997364,
+ -4.3204663019338186e-17,
+ -3.8406779168311037e-16,
+ -7.265310271791467e-07,
+ 0.8499999999818286,
+ 0.24999972227894038,
+ 0.7799658719765068,
+ 0.9999999999997389,
+ -5.802951728034028e-16,
+ -3.7200154997678673e-16,
+ -7.227860753437822e-07,
+ 0.14119232837666446,
+ -0.7564727036166675,
+ 0.7799658719765065,
+ 0.44074391032494314,
+ -1.0132930590926292e-12,
+ -6.8650244634794694e-12,
+ 0.8976328901680675,
+ 0.7500000000110967,
+ 0.24999972227853653,
+ 0.7799658719765068,
+ 0.9999999999997373,
+ -9.682343613954287e-17,
+ 1.1550180685329848e-16,
+ -7.251118999832157e-07,
+ 0.8499999999993257,
+ -0.2499996262551101,
+ 0.7799658719765072,
+ 0.999999999999738,
+ 3.225038553378274e-16,
+ 3.3048284264440787e-16,
+ -7.249797810972268e-07
+ ],
+ "approach": {
+ "xyz": [
+ 0.7495775848627091,
+ 0.25006792472826467,
+ 0.879960389137268
+ ],
+ "wxyz": [
+ 0.0,
+ -0.7071067811865475,
+ 0.7071067811865476,
+ 0.0
+ ]
+ }
+ }
+]
diff --git a/src/dual_arm_sim/test/data/red3_after_drop.pcd b/src/dual_arm_sim/test/data/red3_after_drop.pcd
new file mode 100644
index 000000000..56f6a02da
Binary files /dev/null and b/src/dual_arm_sim/test/data/red3_after_drop.pcd differ
diff --git a/src/dual_arm_sim/test/data/red3_before_pick.pcd b/src/dual_arm_sim/test/data/red3_before_pick.pcd
new file mode 100644
index 000000000..56fbf8676
Binary files /dev/null and b/src/dual_arm_sim/test/data/red3_before_pick.pcd differ
diff --git a/src/dual_arm_sim/test/data/red3_on_floor.pcd b/src/dual_arm_sim/test/data/red3_on_floor.pcd
new file mode 100644
index 000000000..6aa1b943e
Binary files /dev/null and b/src/dual_arm_sim/test/data/red3_on_floor.pcd differ
diff --git a/src/dual_arm_sim/test/data/right_arm_carry.json b/src/dual_arm_sim/test/data/right_arm_carry.json
new file mode 100644
index 000000000..5c02fc3ed
--- /dev/null
+++ b/src/dual_arm_sim/test/data/right_arm_carry.json
@@ -0,0 +1 @@
+{"initial_joint_positions":{"planar_x":[-0.3000065360351928],"planar_y":[-5.3804343264078154e-06],"planar_theta":[-6.822927830980049e-05],"caster_front_left_steering_joint":[0.0002847040095919906],"caster_front_left_joint":[7.001615973455022e-14],"tmrv0_2_joint_0":[-0.0027451269896475224],"tmrv0_2_joint_1":[-1.9178901585354344e-15],"rocker_arm_joint":[0.0005703797940169742],"caster_rear_right_steering_joint":[0.0013118050150153643],"caster_rear_right_joint":[1.8841744187102604e-09],"tmrv0_2_joint_2":[-0.0027451269577879072],"tmrv0_2_joint_3":[-4.1960786391136077e-07],"franka_spine_vertical_joint":[0.39990047259684786],"left_fr3v2_joint1":[-1.4340961101590847e-06],"left_fr3v2_joint2":[-0.7854210026513052],"left_fr3v2_joint3":[-2.9163457062285616e-06],"left_fr3v2_joint4":[-2.3562081337563523],"left_fr3v2_joint5":[1.8524679427146324e-06],"left_fr3v2_joint6":[1.570702190742674],"left_fr3v2_joint7":[0.785299890331633],"left_fr3v2_finger_joint1":[0.03499996254416677],"left_fr3v2_finger_joint2":[0.035000037455841154],"right_fr3v2_joint1":[-0.6922973602595487],"right_fr3v2_joint2":[0.07474675316854905],"right_fr3v2_joint3":[-0.008146204891513879],"right_fr3v2_joint4":[-2.4427787236733227],"right_fr3v2_joint5":[-1.4744952271615146],"right_fr3v2_joint6":[2.3636652922721093],"right_fr3v2_joint7":[-2.8644049489309675],"right_fr3v2_finger_joint1":[0.03500150949524395],"right_fr3v2_finger_joint2":[0.03499849050530791],"block_green_1":[0.08560111539027009,0.7351982532028367,0.8294181080906252,0.49834171892628315,-0.0010967980484610893,0.00038967146066806036,0.8669799169345225],"block_green_2":[0.09054547038771091,0.7295806026308853,0.7795268976112296,0.4995762205243763,-0.0007500320601397391,0.0002540674135730557,0.8662695728168216],"block_green_3":[0.8499999602090549,0.24999993912551083,0.7797002770963214,1.0,-1.6644647955075325e-11,1.0787211464937484e-11,-1.1706196306759527e-08],"block_red_1":[0.6499999701037404,-0.25000001310998266,0.7797002770963214,0.9999999999999989,1.1099826265542329e-11,-2.5266241580094883e-11,4.21447788845104e-08],"block_red_2":[0.7499999602110018,0.24999993912308952,0.7797002770963214,1.0,-1.6642194975824778e-11,1.0831762390224237e-11,-1.1706818351784544e-08],"block_red_3":[0.8499999701065017,-0.2500000131069271,0.7797002770963214,0.9999999999999989,1.1092467923233945e-11,-2.5231750860725696e-11,4.214427351084591e-08]},"actuator_names":["franka_spine_vertical_joint","left_fr3v2_joint1","left_fr3v2_joint2","left_fr3v2_joint3","left_fr3v2_joint4","left_fr3v2_joint5","left_fr3v2_joint6","left_fr3v2_joint7","right_fr3v2_joint1","right_fr3v2_joint2","right_fr3v2_joint3","right_fr3v2_joint4","right_fr3v2_joint5","right_fr3v2_joint6","right_fr3v2_joint7"],"time":[0.0,0.015000000000000568,0.03300000000000125,0.04800000000000182,0.0660000000000025,0.08400000000000318,0.09900000000000375,0.11700000000000443,0.132000000000005,0.15000000000000568,0.16500000000000625,0.18300000000000693,0.1980000000000075,0.21600000000000819,0.23100000000000875,0.24900000000000944,0.26400000000001,0.2820000000000107,0.30000000000001137,0.31500000000001194,0.3330000000000126,0.3480000000000132,0.36300000000001376,0.38100000000001444,0.396000000000015,0.4140000000000157,0.42900000000001626,0.44700000000001694,0.4620000000000175,0.4800000000000182,0.49500000000001876,0.5130000000000194,0.52800000000002,0.5460000000000207,0.5610000000000213,0.5790000000000219,0.5940000000000225,0.6120000000000232,0.6270000000000238,0.6450000000000244,0.660000000000025,0.6780000000000257,0.6930000000000263,0.7110000000000269,0.7170000000000272,0.7320000000000277,0.7470000000000283,0.7620000000000289,0.7800000000000296,0.7950000000000301,0.8010000000000304,0.8160000000000309,0.8310000000000315,0.8490000000000322,0.8640000000000327,0.8820000000000334,0.897000000000034,0.9150000000000347,0.9330000000000354,0.9480000000000359,0.9660000000000366,0.9810000000000372,0.9990000000000379,1.0140000000000384,1.029000000000039,1.0470000000000397,1.0620000000000402,1.080000000000041,1.0950000000000415,1.1130000000000422,1.1280000000000427,1.1460000000000434,1.161000000000044,1.1790000000000447,1.1940000000000452,1.2090000000000458,1.2240000000000464,1.239000000000047,1.2570000000000476,1.2750000000000483,1.2900000000000489,1.3080000000000496,1.3230000000000501,1.3410000000000508,1.3560000000000514,1.374000000000052,1.3890000000000526,1.4070000000000533,1.4220000000000539,1.4370000000000545,1.4550000000000551,1.4700000000000557,1.4850000000000563,1.503000000000057,1.5180000000000575,1.5360000000000582,1.5510000000000588,1.5690000000000595,1.58400000000006,1.6020000000000607,1.6170000000000613,1.635000000000062,1.6500000000000625,1.665000000000063,1.6830000000000638,1.6980000000000643,1.716000000000065,1.7310000000000656,1.7460000000000662,1.7640000000000668,1.7790000000000674,1.797000000000068,1.8120000000000687,1.8300000000000693,1.84500000000007,1.8630000000000706,1.8780000000000712,1.8960000000000719,1.9110000000000724,1.929000000000073,1.9440000000000737,1.9620000000000744,1.977000000000075,1.9950000000000756,2.010000000000076,2.028000000000077,2.0430000000000774,2.061000000000078,2.079000000000079,2.0940000000000794,2.11200000000008,2.1240000000000805,2.139000000000081,2.1570000000000817,2.169000000000082,2.187000000000083,2.2020000000000834,2.220000000000084,2.2350000000000847,2.2530000000000854,2.268000000000086,2.2830000000000865,2.301000000000087,2.3160000000000878,2.3340000000000884,2.349000000000089,2.3670000000000897,2.3820000000000903,2.397000000000091,2.4150000000000915,2.433000000000092,2.4480000000000928,2.4630000000000933,2.481000000000094,2.4960000000000946,2.5140000000000953,2.529000000000096,2.5470000000000965,2.565000000000097,2.5800000000000978,2.5980000000000985,2.613000000000099,2.6280000000000996,2.6460000000001003,2.661000000000101,2.6790000000001015,2.694000000000102,2.7090000000001027,2.7240000000001032,2.742000000000104,2.7570000000001045,2.772000000000105,2.7870000000001056,2.8050000000001063,2.820000000000107,2.8380000000001075,2.853000000000108,2.871000000000109,2.8860000000001094,2.90100000000011,2.9190000000001106,2.934000000000111,2.952000000000112,2.9670000000001124,2.985000000000113,3.0000000000001137,3.0180000000001144,3.036000000000115,3.0510000000001156,3.0690000000001163,3.084000000000117,3.1020000000001176,3.117000000000118,3.135000000000119,3.1500000000001194,3.16800000000012,3.1830000000001206,3.2010000000001213,3.219000000000122,3.2340000000001226,3.249000000000123],"commands":[[0.39990047259684786,-1.4340961101590847e-06,-0.7854210026513052,-2.9163457062285616e-06,-2.3562081337563523,1.8524679427146324e-06,1.570702190742674,0.785299890331633,-0.6922973602595487,0.07474675316854905,-0.008146204891513879,-2.4427787236733227,-1.4744952271615146,2.3636652922721093,-2.8644049489309675],[0.39991171963171873,-1.3031264704884207e-06,-0.7854196112256973,-2.949993652680027e-06,-2.3562070760747105,1.5579931067501075e-06,1.5707017791055597,0.78529989680693,-0.6923000113996823,0.07475509112507316,-0.008150019575492193,-2.442771667879905,-1.4744991560783707,2.3636673864723368,-2.864403885460444],[0.39992369359485663,-1.159247143776727e-06,-0.7854180130576139,-2.9334181690071497e-06,-2.356205959093664,1.2577620831712428e-06,1.5707013722137344,0.7852999046819426,-0.692302727055542,0.07476400796596754,-0.008153934621663297,-2.4427643453617742,-1.4745022695893688,2.363669256521434,-2.8644031490970945],[0.39993252327493223,-1.0508734631840193e-06,-0.785416753943637,-2.8843904863452234e-06,-2.3562051457800046,1.046084909395944e-06,1.570701093312942,0.78529991131825,-0.6923046593991719,0.07477072333964944,-0.008156725514091879,-2.4427590587241705,-1.4745038780785933,2.3636703969705346,-2.8644028553797507],[0.3999418799002198,-9.337163374452045e-07,-0.7854153403236803,-2.793291357661867e-06,-2.356204297862731,8.325575772219663e-07,1.5707008183254283,0.785299919254112,-0.6923066437177715,0.07477805808187624,-0.008159594613397391,-2.442753548609845,-1.4745049725511394,2.3636713829251774,-2.8644027605087428],[0.39995002534768004,-8.292162983428142e-07,-0.7854140352163359,-2.6752803262517768e-06,-2.356203574957212,6.575153548625156e-07,1.5707005978987783,0.7852999269917686,-0.6923083206468293,0.0747846983086455,-0.008162018970588028,-2.442748818867178,-1.4745054425787008,2.3636720513717746,-2.8644028447998098],[0.3999559875766949,-7.507736993010053e-07,-0.7854130284664474,-2.5617311010474872e-06,-2.356203057076549,5.36949913706201e-07,1.5707004492977976,0.7852999331773225,-0.6923095204849405,0.07478975638572695,-0.008163750661981556,-2.4427453903027057,-1.474505522020823,2.3636724247934096,-2.86440299494936],[0.3999622614106704,-6.659206529035016e-07,-0.7854119125238951,-2.412742776225576e-06,-2.356202524719675,4.180890719072541e-07,1.570700306412346,0.7852999401939774,-0.6923107604851085,0.07479530990871201,-0.008165534060595833,-2.4427418068760636,-1.4745053858192765,2.3636727063613496,-2.864403223124782],[0.39996683468579874,-6.021921314414409e-07,-0.7854110548268138,-2.281706682448004e-06,-2.356202146407164,3.373259247554929e-07,1.570700212327649,0.7852999456621298,-0.6923116518728645,0.07479954484544292,-0.00816680914496444,-2.442739206063133,-1.4745051597753893,2.3636728347147993,-2.8644034274734462],[0.3999716286919987,-5.33256924692659e-07,-0.7854101062415123,-2.1202456422474465e-06,-2.356201760453996,2.587112733680613e-07,1.5707001243396743,0.7852999517470992,-0.6923125774371856,0.07480419744785723,-0.008168123330927797,-2.4427364848901494,-1.4745048248873607,2.3636728932323123,-2.8644036681256533],[0.3999751108233307,-4.815102360573788e-07,-0.7854093782605285,-1.984819524647165e-06,-2.3562014881928173,2.059614984343256e-07,1.570700068302109,0.7852999564195247,-0.6923132458719538,0.07480774678657964,-0.008169063546804247,-2.4427345080005023,-1.4745045303070252,2.363672881904688,-2.864403854485683],[0.399978749125362,-4.255894052522911e-07,-0.785408573916545,-1.8240056275056776e-06,-2.3562012123828846,1.5524932521782188e-07,1.570700017947544,0.7852999615598918,-0.6923139429317584,0.07481164727068099,-0.008170033103027798,-2.442732437883055,-1.4745041887162316,2.3636728156253097,-2.864404053856909],[0.3999813837572404,-3.836665790001431e-07,-0.7854079570255628,-1.6931254356126932e-06,-2.3562010191615097,1.2165902731052022e-07,1.5706999874556722,0.7852999654697203,-0.6923144483430197,0.07481462350831464,-0.008170727081709314,-2.442730932852971,-1.4745039280379755,2.3636727284495618,-2.864404197401064],[0.39998412888348206,-3.3843294903935484e-07,-0.7854072756780542,-1.5415216683690072e-06,-2.356200824722333,8.979602512878316e-08,1.570699961791423,0.7852999697360974,-0.6923149772100062,0.07481789480817902,-0.008171443039261714,-2.4427293558588863,-1.4745036531393163,2.363672597558742,-2.864404342292274],[0.3999861115706642,-3.0458218263994103e-07,-0.785406753213605,-1.4207196442927093e-06,-2.356200689399551,6.89942669443388e-08,1.5706999476268144,0.7852999729566424,-0.6923153617897305,0.074820391369595,-0.008171955754338068,-2.442728208744405,-1.4745034581100576,2.3636724740685464,-2.8644044414370344],[0.3999881725296312,-2.6812793521868965e-07,-0.7854061761689609,-1.2832928240544353e-06,-2.356200554087038,4.9565892354246914e-08,1.5706999372866204,0.7852999764455458,-0.6923157651279911,0.07482313585106169,-0.008172485017995407,-2.442727006300632,-1.4745032642135247,2.3636723161503728,-2.864404537040523],[0.3999896578121587,-2.409025622538163e-07,-0.7854057336386511,-1.17550670037391e-06,-2.3562004605053146,3.709928636819306e-08,1.570699932913734,0.7852999790603219,-0.6923160589121248,0.07482523065048174,-0.008172864311307645,-2.4427261313826936,-1.474503133670154,2.363672181127429,-2.8644045996184677],[0.3999911986814197,-2.1164446592871859e-07,-0.785405244778063,-1.054570693519264e-06,-2.356200367499394,2.5675447409497804e-08,1.5706999313996348,0.7852999818727562,-0.6923163673284756,0.07482753376461446,-0.008173256195355848,-2.4427252141066162,-1.4745030099472913,2.3636720196648473,-2.864404657364739],[0.39999251156576127,-1.85740358245774e-07,-0.7854047980886485,-9.429202358382036e-07,-2.356200292076942,1.7283754549048155e-08,1.570699932773709,0.7852999843580122,-0.6923166338083759,0.07482962702873593,-0.008173589144908682,-2.442724422715922,-1.4745029168842712,2.363671862698004,-2.864404699509703],[0.3999934552282206,-1.664585941748868e-07,-0.7854044553644239,-8.569189879470927e-07,-2.356200240396305,1.2093650912983402e-08,1.57069993540609,0.7852999861997567,-0.6923168279232356,0.07483122504623618,-0.008173828192371002,-2.442723846874391,-1.4745028587392053,2.3636717375493372,-2.864404725040806],[0.3999944319230835,-1.4580614397034193e-07,-0.7854040765548702,-7.619675785989817e-07,-2.356200189494521,7.535694356806464e-09,1.5706999396837098,0.7852999881586353,-0.692317031537944,0.07483298225421621,-0.00817407570671419,-2.4427232432335333,-1.4745028077614954,2.363671596051099,-2.864404746624989],[0.3999951330637581,-1.3046673968336017e-07,-0.7854037857997175,-6.894833676338431e-07,-2.3562001548170954,4.818274168938094e-09,1.5706999437811457,0.7852999895997714,-0.6923171796630908,0.07483432384359832,-0.008174253716483964,-2.4427228041008453,-1.474502777793324,2.3636714863682045,-2.8644047587180723],[0.39999574522307246,-1.1666160535100512e-07,-0.7854035159166263,-6.227761569149118e-07,-2.35620012600039,2.8554940962424672e-09,1.5706999480878627,0.7852999908827877,-0.6923173105003856,0.07483556296690756,-0.008174409594019657,-2.442722415945506,-1.4745027567085678,2.3636713847265094,-2.8644047667186614],[0.39999637790987375,-1.0192066616450776e-07,-0.7854032174529608,-5.499608369453986e-07,-2.3562000978512314,1.2577208467881896e-09,1.5706999532687629,0.7852999922334456,-0.6923174473594523,0.07483692568259818,-0.008174571441456547,-2.4427220092416713,-1.4745027403670905,2.363671273706414,-2.8644047722841233],[0.3999968315603559,-9.100551893924833e-08,-0.7854029882450171,-4.949579392493978e-07,-2.3562000788341693,3.994079512832714e-10,1.5706999574411913,0.7852999932170971,-0.6923175465958011,0.07483796619354377,-0.008174688185513911,-2.442721713539955,-1.4745027323082398,2.3636711903360585,-2.864404774481357],[0.39999730016983565,-7.937427148734783e-08,-0.7854027346807361,-4.3530071454148623e-07,-2.35620006036474,-2.201059775062264e-10,1.570699962143215,0.7852999942457977,-0.6923176501287333,0.07483911055680048,-0.008174809656785766,-2.4427214038479588,-1.4745027273580473,2.363671101020903,-2.864404775112286],[0.39999763604962507,-7.077912757249985e-08,-0.7854025398957627,-3.9050509133484525e-07,-2.3562000479618925,-4.895828592763395e-10,1.570699965746074,0.7852999949902072,-0.6923177249911723,0.0748399843923155,-0.008174897463360175,-2.4427211787921186,-1.474502725969,2.3636710351737524,-2.864404774522997],[0.3999977281816348,-9.625877380223392e-08,-0.7854023665391322,-4.984142529459269e-07,-2.3562001195033444,-7.018308654599046e-09,1.5706999691683003,0.7852999941516778,-0.6923162235585394,0.07483982536659985,-0.008172980632893349,-2.442717996560789,-1.4745031450288042,2.3636718093395825,-2.864404797184513],[0.3999979382718237,-6.67156942975967e-08,-0.7854022178663174,-3.682418851162023e-07,-2.356200089324956,-7.051818265254115e-09,1.5706999677772309,0.7852999959432497,-0.6923156552938865,0.07484002821452088,-0.008172245477485752,-2.4427158539055265,-1.4745038089690754,2.3636723826372212,-2.8644048163039644],[0.39999828713681157,-4.330051719870802e-08,-0.7854020272494329,-2.8129630638892916e-07,-2.3562000306039925,-8.623113300709609e-09,1.5706999642023223,0.7852999976481674,-0.6923158758651109,0.07484094874707709,-0.008172503548254604,-2.442715414319496,-1.4745042868527078,2.363672616223056,-2.8644047908027424],[0.3999985284839376,-3.676629190817749e-08,-0.7854018785433089,-2.4726186596821016e-07,-2.3562000053656464,-8.652569630594727e-09,1.5706999619315118,0.7852999983335248,-0.6923161507849255,0.07484171606995808,-0.008172838148989368,-2.4427155260215088,-1.4745044413320012,2.3636726666140695,-2.8644047509801682],[0.3999987532215015,-3.259222507327525e-08,-0.7854017138024109,-2.151039576229315e-07,-2.3561999923956765,-6.6923467761782424e-09,1.5706999623455795,0.7852999986307336,-0.6923164610131929,0.07484253455388241,-0.008173223218949378,-2.442715801061618,-1.4745044435467027,2.363672623715677,-2.8644047043440026],[0.39999889832642804,-2.969108019048914e-08,-0.785401586972428,-1.9008938162324299e-07,-2.356199988550589,-4.3593397607763555e-09,1.570699965179803,0.7852999986631591,-0.6923166866164429,0.0748431391397762,-0.008173508827462853,-2.4427160575209723,-1.4745043584209254,2.363672530801746,-2.8644046745750313],[0.3999990364883001,-2.6280128749444444e-08,-0.7854014464836218,-1.6168594173172946e-07,-2.3561999876029844,-1.614673725259542e-09,1.5706999703725335,0.7852999986322692,-0.692316917735914,0.0748437903217857,-0.008173806786084963,-2.442716362807916,-1.4745042053278827,2.3636723779175064,-2.864404652061104],[0.3999991305059526,-2.348730081992927e-08,-0.7854013386624541,-1.397793303726264e-07,-2.3561999881878277,2.9896570194823366e-10,1.5706999752587387,0.7852999986250191,-0.6923170809621351,0.07484428185020145,-0.008174020496066912,-2.442716605819126,-1.4745040605919326,2.3636722322026715,-2.8644046431134],[0.39999922612822847,-2.0288996143054825e-08,-0.7854012197035983,-1.1605803701542539e-07,-2.3561999895204164,2.027011351606716e-09,1.5706999809488784,0.7852999986729134,-0.6923172467960734,0.07484481969338276,-0.00817424011678815,-2.4427168792694816,-1.4745038853468015,2.3636720504629567,-2.8644046413568005],[0.39999929592421607,-1.78171745069305e-08,-0.785401128680757,-9.859902075968781e-08,-2.356199990765347,3.0163649309060986e-09,1.570699985161943,0.78529999875889,-0.6923173637201164,0.07484522977191463,-0.008174396153102195,-2.442717090809969,-1.4745037464708084,2.363671901479647,-2.864404645118315],[0.3999993716374787,-1.5135114969480748e-08,-0.7854010284262467,-8.043531771630591e-08,-2.3561999921728454,3.750407702876713e-09,1.5706999893608076,0.7852999989007071,-0.692317482658194,0.07484568118273388,-0.008174555462383762,-2.442717324878941,-1.4745035941471092,2.363671732450018,-2.8644046534489953],[0.39999942997256893,-1.3154344231735906e-08,-0.7854009517781069,-6.752419185395901e-08,-2.356199993184921,4.06414329552894e-09,1.5706999921115203,0.7852999990353228,-0.692317566726731,0.07484602667612508,-0.008174668115231279,-2.4427175038699436,-1.4745034811572417,2.3636716028526146,-2.8644046620888677],[0.3999994957848922,-1.1082585602349483e-08,-0.7854008673793396,-5.448959288267834e-08,-2.356199994167145,4.1776719576015275e-09,1.5706999945758227,0.7852999991990705,-0.6923176525133773,0.07484640793027697,-0.008174782788978352,-2.4427177002900984,-1.4745033629154203,2.363671462827474,-2.8644046731413275],[0.39999954780780284,-9.598513933387345e-09,-0.7854008028553902,-4.5472376203469847e-08,-2.3561999947942147,4.115936732653034e-09,1.570699996023642,0.7852999993273642,-0.692317713365607,0.0748467002374602,-0.008174863757895078,-2.4427178495400512,-1.4745032783797514,2.3636713594906267,-2.8644046822163816],[0.39999960726489775,-8.08408308455332e-09,-0.7854007318015466,-3.658627614879253e-08,-2.3561999953418127,3.9181701927586545e-09,1.570699997171126,0.7852999994637032,-0.6923177756959147,0.07484702320682997,-0.008174946184005336,-2.4427180125282684,-1.4745031924771363,2.363671251134596,-2.864404692393528],[0.39999965444224816,-7.021129414727811e-09,-0.7854006774744546,-3.057444140369916e-08,-2.3561999956550905,3.6887236148115225e-09,1.5706999977431773,0.7852999995597855,-0.6923178200853188,0.07484727106887529,-0.008175004467577253,-2.442718135895314,-1.4745031325785345,2.3636711731240285,-2.864404700050322],[0.39999970818463915,-5.95353957834336e-09,-0.7854006176432566,-2.4766784796444133e-08,-2.3561999958975566,3.372154778957699e-09,1.570699998093264,0.785299999653484,-0.6923178657380561,0.07484754513904977,-0.008175063966187281,-2.4427182702094847,-1.474503072983795,2.363671092964545,-2.8644047081335637],[0.39999972538435785,-5.642404916490361e-09,-0.7854005989132913,-2.3126065658004468e-08,-2.3561999959529203,3.2616851675310788e-09,1.5706999981486847,0.7852999996797204,-0.6923178793396985,0.07484763120107948,-0.008175081596352581,-2.442718311873386,-1.474503055773451,2.3636710692400618,-2.8644047105582566],[0.39999976676948307,-4.950518648005438e-09,-0.7854005545683828,-1.9578166103160194e-08,-2.3561999960495337,2.9829059152895406e-09,1.5706999981909373,0.7852999997353518,-0.6923179102442144,0.07484783552117942,-0.008175121478892813,-2.44271840969853,-1.474503017873612,2.36367101588151,-2.864404716052436],[0.39999980578175437,-4.366799884250991e-09,-0.7854005135511587,-1.671252028976755e-08,-2.356199996102631,2.7082518259158368e-09,1.570699998136672,0.785299999778351,-0.6923179372180003,0.07484802527571574,-0.00817515608705783,-2.4427184990563484,-1.474502986455034,2.3636709702456353,-2.8644047207870265],[0.3999998423502977,-3.874471024579735e-09,-0.7854004756098713,-1.4407231853298938e-08,-2.3561999961296434,2.4447552890159463e-09,1.5706999980275318,0.7852999998108476,-0.6923179608049159,0.0748482015284684,-0.0081751862011403,-2.442718580638044,-1.4745029605466011,2.363670931393456,-2.8644047248398454],[0.39999988294117894,-3.3834722861755836e-09,-0.7854004338139515,-1.223333840480013e-08,-2.3561999961472293,2.1494377871368254e-09,1.570699997867655,0.7852999998389272,-0.6923179852881237,0.07484839658441954,-0.008175217330693941,-2.4427186691791505,-1.474502935514742,2.363670892496345,-2.8644047289226053],[0.39999991400351764,-3.0424449876271003e-09,-0.7854004018445978,-1.0811925204550481e-08,-2.3561999961619553,1.923566087521335e-09,1.5706999977358935,0.7852999998554653,-0.6923180029663076,0.07484854647824125,-0.008175239746137517,-2.4427187358671567,-1.4745029188196421,2.3636708655884378,-2.864404731772716],[0.39999992572706994,-2.920672119165382e-09,-0.7854003897366745,-1.0324397728953485e-08,-2.3561999961698024,1.8386474638274337e-09,1.5706999976872567,0.7852999998607417,-0.6923180094267376,0.07484860341786378,-0.008175247929661867,-2.442718760871431,-1.4745029130411313,2.36367085605166,-2.8644047327914173],[0.3999999533011687,-2.6474581661605152e-09,-0.785400361062492,-9.272567547915475e-09,-2.3561999961974935,1.6400658453703783e-09,1.5706999975813642,0.7852999998713852,-0.6923180242167997,0.07484873865826695,-0.00817526665920911,-2.4427188194956635,-1.4745029005212857,2.363670834911758,-2.864404735075304],[0.399999978440969,-2.412233377583318e-09,-0.7854003345288996,-8.416339405149381e-09,-2.3561999962397797,1.4607884545582609e-09,1.570699997502606,0.7852999998793387,-0.692318037271164,0.07484886432680621,-0.008175283199689659,-2.442718872955414,-1.4745028903528037,2.363670817164972,-2.864404737035496],[0.4000000055009862,-2.1702749637550707e-09,-0.7854003052864132,-7.584434822493398e-09,-2.356199996312868,1.2700038795064814e-09,1.570699997447623,0.7852999998866654,-0.6923180509662766,0.07484900345264518,-0.00817530058452503,-2.4427189309226556,-1.4745028806500515,2.363670799619165,-2.8644047390400496],[0.3999987927125956,-3.677256280972472e-07,-0.785401789070562,-6.175769329169621e-07,-2.356200870050959,1.1820161117494582e-07,1.5706997910112495,0.7853000019554308,-0.6923135503702551,0.07483569217231567,-0.008169055462392815,-2.442723445462652,-1.4744919940835186,2.3636675255620077,-2.86440872899671],[0.39998632947994905,-2.9015398461767487e-06,-0.7854079791493289,-3.056098808228271e-06,-2.3562072922379915,2.3357029528375183e-06,1.5706997982990305,0.7852999670624017,-0.6922647046395854,0.0746651963986968,-0.00810088225781685,-2.4428107103162198,-1.4743153312210089,2.3635781016934057,-2.8645018271459795],[0.39996031020647327,-6.160575410072475e-06,-0.7854124663733595,-5.402614650074202e-06,-2.356211189100901,7.174409937292772e-06,1.570702742069237,0.785299851587112,-0.6921506871975818,0.07427791994805587,-0.007939386377667702,-2.4430302151655967,-1.4739070110791166,2.3633603847637445,-2.8647265493071363],[0.3999058274368051,-1.0795533408210302e-05,-0.7854170992345803,-7.609018106639335e-06,-2.356214338147725,1.610084495470786e-05,1.5707095426935513,0.7852996387815901,-0.6918856240099255,0.0733911555011996,-0.007555455282697854,-2.443542433742653,-1.4729761371864127,2.3628613825255225,-2.8652442278387205],[0.3998247878021797,-1.581548383398144e-05,-0.7854208039063605,-8.421353857725014e-06,-2.356216934515409,2.7513677011525084e-05,1.570719149608146,0.7852993793444286,-0.6914437247080669,0.07192789770116476,-0.006905288674915016,-2.444390637741294,-1.4714470871455456,2.362046019813379,-2.866097246659671],[0.399737488415945,-2.014548929801328e-05,-0.7854231526063508,-8.178094416601072e-06,-2.35621891662395,3.702297250302311e-05,1.5707290850281064,0.7852991045735893,-0.690911180464536,0.07018296193150081,-0.006119288386577414,-2.445389775490816,-1.4696322521096032,2.3610813640822856,-2.867111043747612],[0.3996102081190404,-2.520720805365251e-05,-0.7854264240048919,-5.5161286347270676e-06,-2.356221751466176,4.6842998646372184e-05,1.5707415966677425,0.7852987878039774,-0.6900362270106436,0.0673407511086372,-0.004828002818351509,-2.4469955242717063,-1.4666873450557736,2.3595196150968225,-2.868754205235334],[0.39949294718038053,-2.849245068197068e-05,-0.7854291038211088,-8.643302759858133e-07,-2.3562249562601796,5.396823335682268e-05,1.5707501735928768,0.7852986269667502,-0.6891041309296911,0.06434599017899008,-0.0034569019832060583,-2.448656144648114,-1.4635892823531036,2.3578809254597717,-2.870480825615438],[0.39934347351415334,-3.156146538217762e-05,-0.7854321052216824,5.703528412005356e-06,-2.356228976335835,6.135758435966038e-05,1.5707587002356835,0.7852984927638665,-0.6877131086550837,0.05996469149007096,-0.0014440202248412728,-2.4510476327050346,-1.4590454775576511,2.355479838286929,-2.8730083591330393],[0.39920400676610507,-3.4113530501933625e-05,-0.785433525461638,7.186584719220445e-06,-2.356230406248834,6.626679699981489e-05,1.5707650291127233,0.7852983266115983,-0.6862589092668215,0.055494144312283195,0.0006043271109872712,-2.453459621042303,-1.4543653387247704,2.353002362922644,-2.87560564619396],[0.3990650466090129,-3.558540746194257e-05,-0.7854363768837577,1.478476551488563e-05,-2.356234486393755,7.107492353861493e-05,1.570769777517423,0.7852982546236967,-0.6845379036740313,0.05037795668781791,0.0029549001927503676,-2.4561578685090932,-1.4490052178772717,2.3501695653451478,-2.8785723583236424],[0.3989042205343218,-3.678492986695353e-05,-0.7854389503987226,2.410678084809168e-05,-2.356239706993279,7.608396662416278e-05,1.570774414538055,0.7852981827710448,-0.6820946543899518,0.043401121977884774,0.006143846999955855,-2.459765689833093,-1.4416427693936418,2.346272597564503,-2.882634549513782],[0.39877713582577246,-3.7552809050669465e-05,-0.7854405624426511,3.123440910799446e-05,-2.3562438738292766,7.965116699277475e-05,1.5707775989606403,0.7852981172917219,-0.6797008029753437,0.036885730205568505,0.009074521070614242,-2.463065949070529,-1.434707908860383,2.3425915150474803,-2.886447980237981],[0.3986336736145615,-3.8304038810516925e-05,-0.78544218893409,3.868797089569809e-05,-2.356248203474292,8.329323241279653e-05,1.5707808116568907,0.7852980197402633,-0.676319104664468,0.02821765166921624,0.012871700174947324,-2.4673553025904202,-1.4253907646301316,2.3376206663364543,-2.8915523644145464],[0.3985233619306557,-3.8775018156226164e-05,-0.7854435876974434,4.491308575809281e-05,-2.3562517012164617,8.595011403800566e-05,1.5707829710730978,0.7852979361647445,-0.6730036666999029,0.02029911029280493,0.01621227652217919,-2.4711722528328255,-1.4167952164248125,2.333001490239512,-2.8962427614740123],[0.39840931422969683,-3.893686367196573e-05,-0.7854456067050379,5.4367260080626784e-05,-2.356256799162465,8.893426186685276e-05,1.5707848200331076,0.785297882284098,-0.6683622642203281,0.010052384453392479,0.02032504975505474,-2.4759675203454994,-1.4055727267122142,2.326914625468149,-2.902341806253235],[0.3983383516971989,-3.861429351865627e-05,-0.7854475387635804,6.454760119995282e-05,-2.356262224388856,9.137098540971627e-05,1.5707857304200896,0.7852979158504383,-0.6639253327046278,0.0010258240582350683,0.023730589654671563,-2.4800605747748596,-1.3956086135916188,2.321450086508803,-2.907735316675306],[0.3982927237548535,-3.643464396541572e-05,-0.7854491680210779,7.555084243532733e-05,-2.356269173544073,9.397305357047336e-05,1.5707848336631594,0.7852980948892295,-0.6579302450477361,-0.010176655033122307,0.02763488706893348,-2.4849743001183597,-1.383150254144263,2.314522666813476,-2.914453715267407],[0.3982889605894147,-3.200615735507195e-05,-0.785450287807128,8.19976570191192e-05,-2.356271020491113,9.364852765560201e-05,1.5707791004927256,0.7852984064334745,-0.6523621112945636,-0.01970408657014515,0.03063082657276111,-2.4890209304243878,-1.372481199233422,2.308485830215577,-2.920183191022553],[0.3983361801724477,-2.330470516198879e-05,-0.7854509435058009,8.71215700871984e-05,-2.3562607606837433,8.628255605151204e-05,1.5707622946329531,0.7852990343788605,-0.6451362467543819,-0.031078741787179433,0.03380506741519319,-2.4936840901070596,-1.3596841116483769,2.301109304468531,-2.9270453713256313],[0.39841638107015187,-1.486077549835216e-05,-0.7854493758238397,8.691282943891585e-05,-2.3562512692886615,7.35736413650071e-05,1.5707389996436565,0.7852996281469915,-0.6387318193395651,-0.040383577533513015,0.03604281270938201,-2.497378216743432,-1.349161447749944,2.2949162331508757,-2.932683643311116],[0.3985213480924177,-7.222402721673318e-06,-0.7854412050776063,8.083284610412909e-05,-2.356240219947335,5.6821392646275496e-05,1.5707184520793405,0.7852999111099769,-0.6319366565395863,-0.04953038998114741,0.037860654797294335,-2.500910463513803,-1.338737535246542,2.2886460476844666,-2.93823592688963],[0.39864925242221083,1.0646617906978228e-06,-0.7854324727016354,7.406440642707369e-05,-2.3562313666900776,3.704532305195992e-05,1.570700721701876,0.7853000640976044,-0.6248490543434596,-0.05843064119398736,0.03928303272433664,-2.5042382819593487,-1.3285588501699004,2.2823969221332523,-2.9436385221819124],[0.3988020393589035,8.46877355228952e-06,-0.7854224371602148,6.627503120654181e-05,-2.356223680237567,1.8550898292413724e-05,1.5706855691245407,0.7853002708012513,-0.6176341560982312,-0.06695263792151894,0.04032567871320905,-2.50732973517051,-1.3187880393471823,2.276273160705339,-2.9488062809720303],[0.3990117069458993,1.5733646278908905e-05,-0.785411351538619,5.620425405851123e-05,-2.3562148537557848,-3.3147014417761035e-07,1.5706704063691717,0.7853005762399607,-0.6089679944663345,-0.0765900138380802,0.04112526294925173,-2.510720668084585,-1.3077218051778332,2.2691812816051167,-2.95464018323657],[0.39924244862184494,2.1164985808504387e-05,-0.785401244419746,4.4865275185712486e-05,-2.3562057470268254,-1.6371724306278542e-05,1.5706581963050141,0.7853008455213326,-0.6004891663544617,-0.08549408861965671,0.041502753606612534,-2.5137618824442005,-1.2974788153303614,2.2624659637534648,-2.9600235346883697],[0.3994432237726321,2.3515374734313486e-05,-0.7853937303425879,3.507483128909736e-05,-2.356197882249414,-2.7897347401258792e-05,1.570651379334474,0.7853009564923735,-0.5936803207976268,-0.09232597394365655,0.04154876161493299,-2.5160397603253606,-1.2896075936379752,2.257195591641355,-2.964150040302643],[0.39968511056636946,2.363568480270079e-05,-0.7853860620099844,2.3603992568562603e-05,-2.3561880391922196,-3.94010035212244e-05,1.570653599505044,0.785300760460311,-0.585939979379739,-0.09979697142389708,0.04137814911351587,-2.518479259116137,-1.2809896613064755,2.2513120111491123,-2.9686583751954347],[0.39988281061252395,2.2005051812630382e-05,-0.7853810587965178,1.4951452276157782e-05,-2.3561847335369728,-4.587646075150013e-05,1.5706662896305206,0.785300364060421,-0.5799428529473598,-0.10540596801416927,0.04110737923121166,-2.520277764089511,-1.2745135139295303,2.246829843180112,-2.9720399461397395],[0.4001104087405292,1.8332566322272284e-05,-0.785375920183826,5.86321170090374e-06,-2.356192597208086,-4.868100260924495e-05,1.5706890260234072,0.7852999371428071,-0.5733817678881418,-0.11139077614015386,0.040692566270069445,-2.522168928512748,-1.2675986854530636,2.2419893620773363,-2.9756450688632343],[0.4002884363942085,1.402880086615381e-05,-0.7853716071918051,-4.961832144782027e-07,-2.3561987563729803,-4.60531201387365e-05,1.5707054526050006,0.7852999022882755,-0.5685035993332862,-0.11575995905862438,0.0403206618841217,-2.52353506868297,-1.262547526279238,2.2384232198873564,-2.9782755964218834],[0.4004851006066233,7.852462396842938e-06,-0.7853671643598397,-6.554528579651826e-06,-2.3562045478316698,-3.8136715409330506e-05,1.5707222191152657,0.7852999830891884,-0.5634219706888223,-0.12027229192109844,0.0399015421389425,-2.524939524504621,-1.2573284939320017,2.234723492088738,-2.980992118049439],[0.40063193486987686,2.910203302785486e-06,-0.7853631156238697,-1.2021772312697036e-05,-2.356208357080364,-2.9389971484062465e-05,1.5707341945410713,0.7853000051226577,-0.5598363425390699,-0.1234631085128534,0.03959005522230532,-2.525934166106256,-1.2536460044470727,2.2321084924818715,-2.9828875443451492],[0.4007806266862694,-1.8644257292191087e-06,-0.7853563997410943,-2.1218848135616387e-05,-2.356212916818365,-1.9847043335993704e-05,1.5707465018362352,0.7852999005406753,-0.5562290376444597,-0.12680142466337316,0.03919020984252328,-2.526958741474472,-1.2499235809821219,2.229442284947537,-2.984624230469965],[0.4008782159577331,-4.711113656154704e-06,-0.7853506006043961,-2.971259796140497e-05,-2.3562167219888073,-1.3888675105031836e-05,1.5707551850201125,0.7852997468276319,-0.5537414512149685,-0.12934273641062716,0.03877190440450695,-2.5276906434469066,-1.2473279389342262,2.227546906205715,-2.9855369511005554],[0.40095111113575105,-6.616871339490299e-06,-0.7853459499449902,-3.749885989917021e-05,-2.3562203944454034,-9.988671595497119e-06,1.570762467018186,0.7852995919872583,-0.5516840538840919,-0.13181491731709877,0.03821579410855897,-2.528321872922306,-1.2451372425959806,2.2258944419556106,-2.985880439846409],[0.4010076121179122,-7.691787350297478e-06,-0.7853425403335788,-4.490075344737358e-05,-2.356223954384385,-7.461961005570591e-06,1.5707697809968033,0.785299444362273,-0.5497224856441978,-0.13480019528102846,0.03733432367858098,-2.5289588815094186,-1.2429733332414852,2.2241775809046045,-2.9855257632681362],[0.40103072878332974,-7.708530897042777e-06,-0.7853397566034055,-5.0080322202391085e-05,-2.3562236526868063,-7.013213798665936e-06,1.5707739298445222,0.7852994046197348,-0.548475488081961,-0.13742346051607188,0.03637260110395534,-2.52940419498177,-1.2415147894864256,2.2229380546224813,-2.9845066826836777],[0.4010344933233196,-7.091998591493024e-06,-0.785338884183738,-5.375761398182272e-05,-2.356217365480433,-7.65295437794519e-06,1.5707744884650185,0.7852995078854524,-0.5475568070602972,-0.14026524012313496,0.03516486696109646,-2.529777018001016,-1.2403355055728809,2.221842204626822,-2.9827754058478386],[0.4010177088037307,-5.822625856790506e-06,-0.7853399592405469,-5.541136743833259e-05,-2.3562053772012783,-9.199953210021584e-06,1.570769356450364,0.7852997741907733,-0.5468490168667745,-0.1440153030519627,0.03338178256229164,-2.5301324326622456,-1.2392438969803894,2.2206630533965837,-2.9797823314964513],[0.40098877426593565,-4.531604257058948e-06,-0.7853439130455624,-5.551699752059246e-05,-2.356195799147272,-1.1023277739320198e-05,1.5707596570354279,0.7853000546923588,-0.5465601963246518,-0.1474692655470719,0.03161565139458497,-2.5303626754551583,-1.2385744774021734,2.21976857466313,-2.97651050259979],[0.4009406464380928,-2.528843963768999e-06,-0.7853531868655691,-5.4328298708562014e-05,-2.356187280293852,-1.3962017043973777e-05,1.5707410855363242,0.7853004171302269,-0.54655388688864,-0.15207072629034987,0.029128414470623715,-2.5305686141765813,-1.2380282971056706,2.218776277763317,-2.971623786244155],[0.4008919538675216,-5.038145964307607e-07,-0.7853641264082895,-5.283204370336072e-05,-2.356181478127509,-1.7029077236559605e-05,1.5707217673492357,0.7853006553635822,-0.5468130676299755,-0.1563286547859563,0.026727010576246716,-2.5306866142881277,-1.2377673516903622,2.217998337971551,-2.9667314694365796],[0.40082570658718497,2.0541943288043572e-06,-0.785376620212644,-5.044965872262648e-05,-2.3561755828378597,-2.1355555259632484e-05,1.5707014165868072,0.785300674367721,-0.5474171023246669,-0.16199225246474688,0.023435222582897933,-2.5307693876913375,-1.2376653397373851,2.217104988199312,-2.9598557197880933],[0.40076600529564516,4.229867979156212e-06,-0.7853857438065194,-4.807742784755834e-05,-2.35617164368745,-2.5137913455771496e-05,1.5706870054782704,0.7853005880901425,-0.5481525298903098,-0.16720355324030758,0.020339804007174597,-2.5307931646083794,-1.2377416834978587,2.2163816320726224,-2.9532749865453143],[0.4006911683858745,6.828381855449181e-06,-0.785395277209414,-4.4974159415723034e-05,-2.3561678947393268,-2.964388863555643e-05,1.5706722919429972,0.7853004629541214,-0.5493009182816294,-0.17408017594315492,0.016190387202393238,-2.530771538977947,-1.2380113808706508,2.2155254049563724,-2.944341224339383],[0.40062683175042696,9.4551844014961e-06,-0.7853984124277801,-4.476725861231985e-05,-2.356167912227034,-3.4649535000887626e-05,1.570661871362727,0.7853003236677164,-0.5504894707368864,-0.1804532335087196,0.012298911630866131,-2.530727632376838,-1.2383888280576254,2.2148067379162724,-2.9358389768949342],[0.40054959789202854,1.204625419776966e-05,-0.7854076679076446,-4.09473391501186e-05,-2.3561647711614566,-3.9545890953796825e-05,1.5706510537825884,0.7853003033555215,-0.5521918590420383,-0.1888541094898869,0.0071231669697357685,-2.530611430922009,-1.2390030161699062,2.213926715802122,-2.9245075516522063],[0.4004860753784568,1.4353221381889892e-05,-0.7854122849124527,-3.913464221798248e-05,-2.356163395819386,-4.350846599026378e-05,1.5706436209560133,0.7853002859449244,-0.5538170834701117,-0.1964686616396098,0.0024026708269043228,-2.5304831435410082,-1.2396419716539673,2.213177859345063,-2.9141046722303057],[0.40042418391206874,1.622946652667081e-05,-0.7854186704312376,-3.592969576970481e-05,-2.356161106200697,-4.679695458913665e-05,1.570637068359887,0.7853003378841723,-0.5556328143337189,-0.2046563959900281,-0.0026955346247381677,-2.530316031608553,-1.2403885866687543,2.2124077712090284,-2.9028540133316],[0.4003530635564881,1.8275015547037392e-05,-0.7854251604626066,-3.230574817777291e-05,-2.356158411809859,-4.987965063940029e-05,1.5706305633212223,0.7853004163542818,-0.5580353209083148,-0.2151790220048574,-0.009270767510956767,-2.530075935896773,-1.2414132106581046,2.211456887483951,-2.888306207179024],[0.4002964428281555,2.0034363668134206e-05,-0.7854268281541802,-3.1403565801520515e-05,-2.3561582407840977,-5.285201497230644e-05,1.570626047701121,0.7853004445391512,-0.5602235859998459,-0.22457232518379605,-0.015155634570309618,-2.529855074705269,-1.242375698523887,2.2106366730851286,-2.8752295131116328],[0.40023185943667516,2.173952516367564e-05,-0.7854314099382954,-2.8910200709875345e-05,-2.356157028041159,-5.621110842815635e-05,1.5706211189547499,0.785300546442565,-0.5630928990940348,-0.2366615755889539,-0.02274568213601727,-2.5295475708099118,-1.243660147279276,2.2096074892996964,-2.8583568322184365],[0.4001807047559305,2.3279819523695286e-05,-0.7854327082470529,-2.8656173396469124e-05,-2.3561572489808613,-5.964318094267378e-05,1.5706177393296814,0.7853006038543682,-0.5656831044915535,-0.247449246910797,-0.029528992933558176,-2.529270113968359,-1.2448407417838074,2.2087099425469203,-2.84323066861338],[0.4001322136702428,2.472345037206103e-05,-0.7854344462625364,-2.833451666814272e-05,-2.356157066293043,-6.300289290551739e-05,1.5706148387393215,0.7853006773770417,-0.5684563194757294,-0.25888940697191637,-0.03673083581326011,-2.528965214383958,-1.246117371542241,2.207772912063355,-2.827158210640217],[0.40007843048588704,2.6149389753513856e-05,-0.7854407187005299,-2.517023580390202e-05,-2.3561537465612643,-6.515891954581577e-05,1.5706119721293512,0.7853008348667163,-0.5720057617287474,-0.27338611264868284,-0.04586650089356096,-2.5285502081079714,-1.2477587858561479,2.2066001579011116,-2.8067988324021425],[0.400037644088197,2.7106399621552667e-05,-0.7854441819377992,-2.2958492993204612e-05,-2.3561516690789235,-6.620826876786686e-05,1.5706100511072865,0.7853009397264781,-0.5751285594895079,-0.2860618369189981,-0.05386128308002465,-2.5281832427767887,-1.2492104622589597,2.205584639527597,-2.788971748717628],[0.3999927543875751,2.801155665807463e-05,-0.7854466298414212,-2.141859014848944e-05,-2.3561500979416587,-6.723771393589117e-05,1.5706080919546421,0.7853010277185122,-0.5790718275960997,-0.3019979052788908,-0.06391666285949393,-2.5277123656767153,-1.2510567502996246,2.2043209465379987,-2.766531729821886],[0.3999586025045097,2.8749668692246746e-05,-0.7854481869948166,-2.0568295114971116e-05,-2.35614916326154,-6.811002442704074e-05,1.5706066814971715,0.7853010812136367,-0.5825191316367361,-0.31589005344427334,-0.07268582743745376,-2.5272979232689994,-1.2526791200268566,2.2032272219710234,-2.7469500394510487],[0.3999212389054348,2.959273678066299e-05,-0.7854497828711792,-1.994116633158685e-05,-2.356148155959723,-6.929048142894738e-05,1.5706052573414262,0.7853011310206751,-0.5868447217333961,-0.3333023810287279,-0.08368099571698216,-2.5267752816188493,-1.254725563211607,2.20186403643017,-2.7223858367676965],[0.39989309289383396,3.016384025177323e-05,-0.7854508660570649,-1.9545034468300383e-05,-2.3561475039588156,-7.025094789046238e-05,1.5706042479636761,0.7853011677127658,-0.5906110692739575,-0.3484360423895042,-0.09323893200838262,-2.526318858206181,-1.2565132423131922,2.200685030670717,-2.701021487841347],[0.3998628553092817,3.08089942050858e-05,-0.7854521212139297,-1.9237799792684746e-05,-2.356146734619307,-7.133354877217152e-05,1.570603218551446,0.7853012076427106,-0.5953294262744924,-0.3673507969895899,-0.10518716900659664,-2.52574575991645,-1.2587566286410203,2.199217057970467,-2.6743054845356835],[0.39984020594914516,3.1406901650778526e-05,-0.7854511489188365,-2.0669717527500437e-05,-2.356147083100285,-7.284967865086824e-05,1.570602667095318,0.7853011990552752,-0.5994307126181969,-0.3837694745049052,-0.11555955132816145,-2.5252533668317008,-1.2607122048268438,2.197949181333429,-2.651080653846547],[0.3998144517694285,3.200090207535137e-05,-0.7854471100470929,-2.5012181605646605e-05,-2.356150482054484,-7.711015625092753e-05,1.570601511605516,0.7853011826318542,-0.6046149485712878,-0.40451189611391203,-0.12866537746433482,-2.5246491717235795,-1.2631912239615155,2.196348697603891,-2.6216965695415144],[0.3997951903821375,3.272053182027804e-05,-0.785449451373394,-2.3335182922348305e-05,-2.3561469533430404,-7.85637988958302e-05,1.5706008838509733,0.7853012989406433,-0.6091340705467647,-0.4225406327351529,-0.14005797616978913,-2.524092718015916,-1.2653475132978633,2.1949606205282337,-2.596213452149334],[0.39977654181025823,3.342504555335612e-05,-0.7854496835794679,-2.078821448458298e-05,-2.356143219508275,-7.882301069629511e-05,1.570600560477504,0.7853014114897575,-0.6147471167735195,-0.44490727774306993,-0.1541921781572209,-2.5233937491600757,-1.268025110681351,2.1932411436089643,-2.5646057204956145],[0.3997647773795451,3.3789764675195435e-05,-0.7854476540087577,-1.9301746556555335e-05,-2.356141445751487,-7.86588804464316e-05,1.5706003179875656,0.7853014673439035,-0.6195801072059182,-0.4641534060604968,-0.1663543306225139,-2.522791333105614,-1.2703324879201565,2.191763491802619,-2.5374029718656215],[0.39975502717695677,3.413207687636779e-05,-0.7854432281278845,-1.810264628242239e-05,-2.3561400525925826,-7.84339672213652e-05,1.5706000434037886,0.7853015004570478,-0.6255681921316025,-0.48798705025009503,-0.18141573538585082,-2.5220460051757403,-1.2731933449068238,2.1899350008971226,-2.503708791557045],[0.399750450977776,3.4413241871333384e-05,-0.7854380890920759,-1.7361170381817872e-05,-2.356139050980535,-7.831538064282616e-05,1.570599850937506,0.7853015112276218,-0.6307166602160998,-0.50846857750083,-0.19435939811770597,-2.5214060513117844,-1.2756541625526716,2.188364038068938,-2.474748594972343],[0.39974913460677874,3.475448551885019e-05,-0.7854301997787005,-1.6670474171024827e-05,-2.3561379744851974,-7.834123413812463e-05,1.5705996575174224,0.7853015138171443,-0.6370860804955342,-0.5337992384714085,-0.21036773705256226,-2.5206157009438144,-1.2786993104523705,2.186422192936213,-2.4389264705100064],[0.39975161361600536,3.511141400914067e-05,-0.7854239705281993,-1.6135786187576555e-05,-2.356137292002334,-7.852388067858862e-05,1.5705994978271058,0.7853015149169359,-0.6425545510084536,-0.5555418360452894,-0.22410692709937138,-2.5199331942794263,-1.2813171949780349,2.184756575844282,-2.4081772590164574],[0.3997584846530901,3.549259983469023e-05,-0.7854167648860649,-1.5849097037657888e-05,-2.3561361621486254,-7.893268512262176e-05,1.5705994389162203,0.785301513868116,-0.6493132123299051,-0.5823933834822237,-0.24108303316797589,-2.5191039385382457,-1.2845455084611603,2.182695490558631,-2.370192770699589],[0.3997670826981469,3.579680931976856e-05,-0.7854115033084381,-1.5692114395417843e-05,-2.3561353801088605,-7.931444363682204e-05,1.5705993939910805,0.7853015155022618,-0.6551049748407051,-0.6054037379711383,-0.2556286020507887,-2.518389777377086,-1.2873152504332224,2.180931008111005,-2.3376409516947922],[0.3997804094564019,3.609541491027018e-05,-0.7854062612063883,-1.555349184809134e-05,-2.3561345923118253,-7.990457342240855e-05,1.570599345759321,0.7853015204047834,-0.6622466316178026,-0.6337872444345234,-0.2735668776069019,-2.517507388636764,-1.2907325676143122,2.1787602220421105,-2.2974866168574968],[0.39979915782742637,3.65225656454821e-05,-0.7854021996362706,-1.4875643801455093e-05,-2.3561341392969664,-8.052554217199279e-05,1.570599211988453,0.7853015355052976,-0.6695977186004969,-0.6630161257049245,-0.2920313542198225,-2.5165919458824413,-1.2942552477342815,2.176529641306618,-2.256137960481962],[0.3998193911180215,3.6935206299177155e-05,-0.7853997507400631,-1.4179268040557256e-05,-2.356133457041954,-8.104909928928635e-05,1.5705991450931975,0.7853015525398046,-0.6758872034648621,-0.6880209234108954,-0.3078269115375093,-2.5158077498327995,-1.2972692538489567,2.174621704056143,-2.220765400948853],[0.39984909435683774,3.740964663696695e-05,-0.7853974474162181,-1.3383779205222729e-05,-2.356132446346744,-8.168196628262316e-05,1.5705991186831516,0.7853015740111043,-0.6836310411631846,-0.7188036469025073,-0.32727238626231014,-2.514842031158678,-1.3009802678266786,2.17227298538381,-2.177219126446173],[0.3998717018601946,3.651431448215699e-05,-0.7853882814168694,-1.7534308142995012e-05,-2.3561380679121373,-8.37526795068192e-05,1.5705988554134902,0.785301534411839,-0.6889540138731665,-0.7400274282737389,-0.3406786604796884,-2.514216593191789,-1.3035475139138688,2.170656512953692,-2.1471040473718053],[0.39990141550264624,3.468309614084362e-05,-0.7853841390448159,-2.0955534806487865e-05,-2.3561429924053554,-8.504614759679583e-05,1.5705980722816704,0.785301669026979,-0.6959055495243569,-0.7677540597891916,-0.3581912722460961,-2.513411919187604,-1.306900528526299,2.168544688987564,-2.10774928643271],[0.3999444721475653,3.3686252887686746e-05,-0.7854059733788991,-5.142218234120327e-06,-2.3561296299801775,-7.65123659790198e-05,1.5706019523788544,0.7853019528528689,-0.7044078292243677,-0.8014160547551683,-0.3794550595512022,-2.5122984256363505,-1.3109456983524752,2.165972910709588,-2.060307262552508],[0.3999792618970232,3.252505006753566e-05,-0.7854066376168818,1.5661081894630195e-07,-2.3561300254263626,-7.157739916811678e-05,1.5706044749225887,0.7853019391588318,-0.710098773286001,-0.8239922943546935,-0.3937164243907673,-2.5115649355815406,-1.3136646836605692,2.164249806089903,-2.028417931195754],[0.40003782961878476,2.969384830075614e-05,-0.7854093707866698,8.378575227150997e-06,-2.3561340239800663,-6.432311573889659e-05,1.5706065642449154,0.7853019077047727,-0.7187411142941487,-0.8582177567154351,-0.41533490278403556,-2.510439805807485,-1.3177956938686617,2.1616342428520836,-1.9801444137401327],[0.4000926023953863,2.567545020509149e-05,-0.7854187868400616,2.0069321955012418e-05,-2.356140168130444,-5.316628658269572e-05,1.570614824858864,0.7853017094239808,-0.7259173520034428,-0.886558953200142,-0.43323636830191153,-2.509472690233315,-1.3212233655353867,2.1594540356308576,-1.940253830322537],[0.4001639408436258,1.9833630075174033e-05,-0.785427820633131,3.0587987081589626e-05,-2.3561502216307577,-3.663637846412622e-05,1.5706336631300786,0.7853011984056696,-0.7344123534496024,-0.9200963679381223,-0.45442019151782825,-2.508331813785338,-1.3252756796151564,2.156857562382277,-1.8930541939295977],[0.4002259441371712,1.4696584089945575e-05,-0.7854301471703943,3.614146447321517e-05,-2.3561597808262826,-2.247485644177977e-05,1.5706543293360828,0.7853006911521556,-0.7413799074636558,-0.94760587006441,-0.47179660351083785,-2.5074094832673794,-1.3285980675091504,2.1547301679285042,-1.8543250463518797],[0.40030095665995347,8.673114618516199e-06,-0.7854299813592582,4.008810645846578e-05,-2.356171210136985,-6.1906920265130135e-06,1.5706799009357477,0.7853002151898805,-0.7495957723276251,-0.9800482589175892,-0.4922886786522412,-2.5063386835958315,-1.3325148596494463,2.152224604030637,-1.808633288555609],[0.4003622996324137,3.8103038197473572e-06,-0.7854287888247332,4.18466523831391e-05,-2.356180107098564,6.437550764952937e-06,1.570697978199357,0.7853000024900706,-0.7563135357006991,-1.0065759027239134,-0.5090447797450215,-2.5054756921973222,-1.3357165451707522,2.1501779625218806,-1.77126115815323],[0.40042147101462994,-1.1853317957001239e-07,-0.7854255954515064,4.1276904597558524e-05,-2.3561879631288747,1.7391130349854157e-05,1.5707132503319383,0.7852998531869732,-0.7629098833835041,-1.032643348574745,-0.5255106967233936,-2.504643687353645,-1.3388583829997787,2.1481749212947268,-1.7345023705476543],[0.4004911299202032,-2.760806267649578e-06,-0.7854180415282647,3.5324755883438594e-05,-2.356197226912272,2.1604018536798654e-05,1.5707231558805235,0.7852997953021416,-0.7707948375630039,-1.063896385405835,-0.5452497969425181,-2.5037031591594556,-1.3426334864790352,2.1457874624687427,-1.690331560137116],[0.40054316502348203,-6.816596390899563e-06,-0.7854233345313475,3.772083229342504e-05,-2.356199571812518,2.9632139104904926e-05,1.5707350744773012,0.7852997403105662,-0.7772423321218391,-1.089335279074905,-0.5613185745795503,-2.502892001046784,-1.3457009398994801,2.1438263366722734,-1.6544894067341203],[0.40059915810004837,-1.1665165233299363e-05,-0.7854232772910142,3.858361618295951e-05,-2.3562054470381515,4.0364030811125415e-05,1.5707472964052462,0.785299663177066,-0.7847716960084178,-1.119045691315652,-0.580087197686535,-2.5019544175206256,-1.349283678220526,2.141537303746367,-1.6126128812554201],[0.40063979716418113,-1.5497226646747324e-05,-0.785420983839073,3.798722879104357e-05,-2.3562115396525383,4.876079100315423e-05,1.5707557221660629,0.7852995665596704,-0.7908725420625131,-1.1431252456144865,-0.5953000357655577,-2.501206207678407,-1.3521876983727663,2.1396831143075814,-1.5786575175650224],[0.40068068236150395,-1.9612018755639258e-05,-0.7854178089825898,3.6349978478305406e-05,-2.356218903209092,5.720200452976818e-05,1.5707641103211705,0.785299412138297,-0.7979857720370104,-1.1712089104374053,-0.613043988569209,-2.500347151042609,-1.35557506960786,2.137521681244483,-1.5390374569981544],[0.4007078695582151,-2.260139417849252e-05,-0.7854154972262584,3.4590071224156516e-05,-2.3562246342580666,6.3040229218306e-05,1.5707699084480995,0.7852992743478253,-0.8037411441699321,-1.1939378340077564,-0.627405864835059,-2.4996618371916477,-1.3583168914948354,2.1357731177305856,-1.5069585086463648],[0.40072984132754114,-2.3854222774805485e-05,-0.7854114685175595,3.092459698361403e-05,-2.3562302703617917,6.679822399419164e-05,1.5707744187195787,0.7852991143611064,-0.8093478332905899,-1.2161236567729603,-0.6414247309698456,-2.499013922375679,-1.360986010662471,2.134078282861163,-1.4755921916485215],[0.4007501532421199,-2.592997054931608e-05,-0.7854116318304847,2.778461227884387e-05,-2.35623514601002,6.865029086080636e-05,1.5707785421477856,0.7852989954687981,-0.8159465174174031,-1.2422229847268915,-0.6579177197561693,-2.498257694478091,-1.3641376400914902,2.1320818660721126,-1.438715549655952],[0.40075969482876495,-2.857013733282068e-05,-0.7854132403091083,2.6937372978379728e-05,-2.3562379009393393,7.297671530915376e-05,1.5707829127685538,0.7852989339338565,-0.822321763456669,-1.2673981377607775,-0.6738290221836071,-2.4975136474410067,-1.3671752979633984,2.1301435394620634,-1.4031697649441819],[0.4007603123837141,-3.0627779488495116e-05,-0.7854129824550848,2.5992651585991916e-05,-2.356241126016867,7.645828615730768e-05,1.5707858754316297,0.7852988652293994,-0.827451527612163,-1.2876600431575778,-0.6866365586722756,-2.4969201140200945,-1.3696203301693786,2.1285840144457704,-1.3745527142327665],[0.4007546799078358,-3.24421069067164e-05,-0.785412374310845,2.4934664576973445e-05,-2.3562445802239638,7.937550882701265e-05,1.5707883033710393,0.785298785157767,-0.832416248290149,-1.3072766265935327,-0.6990374872967405,-2.496351345402753,-1.3719877446473703,2.1270745674961393,-1.3468387627922742],[0.4007420609881338,-3.3313007687217376e-05,-0.785411081331882,2.276123911428388e-05,-2.356249998292254,8.109131818049416e-05,1.5707902518921548,0.7852986777865133,-0.8381740511477255,-1.3300646371087883,-0.7134437450572796,-2.495709796681383,-1.3747370020004415,2.1253312130089785,-1.3146080581346582],[0.4007254796248976,-3.46119607184178e-05,-0.7854121457057321,2.2006303514694784e-05,-2.3562520107545546,8.290244982162561e-05,1.5707918993222358,0.785298637995481,-0.842813337062353,-1.348406678967292,-0.7250411536501652,-2.4951877540367637,-1.3769511539462638,2.1239217647784994,-1.2886834164687595],[0.40069824456510716,-3.601898424456334e-05,-0.7854131499902334,2.1487957020481745e-05,-2.35625430826944,8.526314519522155e-05,1.5707935674282227,0.7852985939584213,-0.8481643196974361,-1.3695636502591126,-0.7384198258521311,-2.494587021614791,-1.3795050408620624,2.1222932180195277,-1.2587767212046612],[0.40067022192903445,-3.697329297095891e-05,-0.7854136809189698,2.1110302545649797e-05,-2.3562564245073685,8.689791603501198e-05,1.5707946489793407,0.785298553255933,-0.8524434624793079,-1.3864900481593907,-0.7491244517860103,-2.4941106938778304,-1.381548505324374,2.120991155732736,-1.234843430376],[0.40063091973042225,-3.788471189583963e-05,-0.7854144611289591,2.081336781298986e-05,-2.3562588019467756,8.855475222422206e-05,1.5707956617022887,0.7852985103059765,-0.857364558783908,-1.4059633112030083,-0.7614411471998324,-2.493567119671446,-1.3838996429546835,2.119497395876319,-1.2073027513643833],[0.40058628512044,-3.8549320086219845e-05,-0.7854155133102075,2.07103580893526e-05,-2.3562609014906504,8.994569135488531e-05,1.5707964245317594,0.7852984785337018,-0.8620550394272226,-1.4245324531943948,-0.7731872945145966,-2.493053223725113,-1.38614181936406,2.1180811475343715,-1.1810346290540914],[0.40054560570366016,-3.893576999462888e-05,-0.785416596373426,2.078025612496012e-05,-2.356262416271788,9.094186551501327e-05,1.5707969107595992,0.7852984611773242,-0.8657892094632992,-1.4393215950602227,-0.7825432262048546,-2.492646789005711,-1.38792770829115,2.116960739818336,-1.1601096682825658],[0.40049329181718885,-3.924002525422384e-05,-0.7854180947349355,2.104830131353097e-05,-2.3562639543609367,9.197716514124866e-05,1.5707973537518256,0.7852984506054157,-0.8700624689846956,-1.4562522451016455,-0.7932547597438326,-2.492184272354209,-1.389972297780545,2.11568544360476,-1.1361509963718297],[0.40044732423050183,-3.937805398591624e-05,-0.7854194602586332,2.1415230002222272e-05,-2.3562650260411746,9.27035318795135e-05,1.5707976284816387,0.7852984500966912,-0.8734516160339012,-1.4696849103251963,-0.8017538468718705,-2.4918192765574148,-1.3915945329434458,2.114672314811254,-1.1171397554442102],[0.40040150322420087,-3.885293680485762e-05,-0.7854207165882162,2.161056747115893e-05,-2.356266648702037,9.241117183173881e-05,1.5707975701574535,0.7852984492244075,-0.8766987264370436,-1.4825755273376822,-0.8099095984616224,-2.4914776675258032,-1.3931526257386426,2.1136987198011004,-1.0988765937154523],[0.4003446882327121,-3.849410648215604e-05,-0.7854228279781075,2.2135975319178977e-05,-2.3562674939457326,9.228317698459591e-05,1.5707976476655006,0.7852984677455778,-0.8804021577834811,-1.4972712898775975,-0.8192084875298776,-2.4910850572162397,-1.394928207797146,2.112586496626881,-1.078063893786271],[0.4002959006048179,-3.865932361886408e-05,-0.7854246828504519,2.2744047940303207e-05,-2.3562673335576143,9.249969695601641e-05,1.5707978787239858,0.7852984950560002,-0.8833269956946754,-1.5088695781259522,-0.8265489379357871,-2.4907715936613313,-1.3963284361876003,2.1117068276237085,-1.061650960696343],[0.40023532845278165,-3.8662412626489024e-05,-0.7854264667022893,2.3638302260118362e-05,-2.3562675769007595,9.319425330707467e-05,1.5707980291899615,0.7852985242093465,-0.8866275881059943,-1.5219618064442333,-0.8348350467747133,-2.490418382140341,-1.3979096071810682,2.110712610750226,-1.0431168540897298],[0.40018453870950793,-3.85746291263199e-05,-0.7854276592410755,2.4398115380529332e-05,-2.3562678413192613,9.33388106750687e-05,1.5707980787062223,0.7852985364263968,-0.8892114824542539,-1.5322172610260612,-0.8413266105727943,-2.490144096413376,-1.3991479297425247,2.1099328909527593,-1.028599799437383],[0.40013291682312696,-3.8683800735241705e-05,-0.7854289017043906,2.5273838162760812e-05,-2.356267853172037,9.373401772795672e-05,1.5707981976351753,0.7852985520618552,-0.8916392421102082,-1.5418519134798976,-0.8474259114313748,-2.4898856102164686,-1.4003111138099136,2.1091995070480687,-1.0149636615986433],[0.40008164351710734,-3.8481453523471314e-05,-0.785429967756919,2.6166955220086267e-05,-2.3562682880060417,9.401030823041087e-05,1.570798180686257,0.785298565441823,-0.8939133284677084,-1.5508865612664051,-0.8531453015350879,-2.489647139490283,-1.4014025534890935,2.1085114277520534,-1.0021674042324393],[0.40002081048799815,-3.837854425610947e-05,-0.7854314401695788,2.7214474434337273e-05,-2.3562682847357386,9.42866801139717e-05,1.5707982126446824,0.7852985856492384,-0.8964460297538156,-1.5609491301336769,-0.8595164404512948,-2.489381733706698,-1.4026178345991087,2.107744182693543,-0.9879187500837149],[0.39997085590221243,-3.810015005741413e-05,-0.7854325565033559,2.8143606222519014e-05,-2.3562684961093256,9.443432633488923e-05,1.5707981287184134,0.7852986012897722,-0.8983894851177999,-1.5686767645531545,-0.8644092064562444,-2.489180265642562,-1.4035515303764945,2.1071547154843713,-0.9769708154152474],[0.399920911603593,-3.819466059046461e-05,-0.7854337375500912,2.907278538520599e-05,-2.3562681021999374,9.492747061540471e-05,1.57079822748841,0.7852986189107752,-0.9001792546585613,-1.5757868243337525,-0.8689121967049876,-2.488992127478533,-1.4044098672424743,2.1066116357956517,-0.9669071324779609],[0.39987122362443744,-3.8334286964510825e-05,-0.7854347134020172,3.006432216170964e-05,-2.356267775255654,9.544147118707075e-05,1.5707983150944773,0.785298630201303,-0.9018107816416039,-1.5822691281829249,-0.8730181837126916,-2.488820862046927,-1.4051923328100961,2.1061161821127796,-0.957732950167729],[0.3998115774728464,-3.866612568170264e-05,-0.7854357075021596,3.133047425788595e-05,-2.3562673172306288,9.601803099821092e-05,1.5707984345943848,0.785298632857183,-0.9035532480836252,-1.5891902911572566,-0.877403274488974,-2.488637220100694,-1.4060274613595383,2.1055866748189866,-0.9479417653920705],[0.39976257236334406,-3.882004100176657e-05,-0.785436355770898,3.24564557793459e-05,-2.3562672092436183,9.644605180219123e-05,1.5707984774975488,0.7852986310578659,-0.904824443281029,-1.5942438749923566,-0.8806056870479885,-2.4885052238783096,-1.4066374293549706,2.105199860671829,-0.9407901112234889],[0.3997054630701378,-3.885520432073169e-05,-0.7854371185758431,3.3829785118902445e-05,-2.35626720823878,9.691016543059836e-05,1.5707984801812707,0.7852986306627504,-0.9061356706044225,-1.5994623689324716,-0.8839133466154756,-2.488372030505827,-1.4072675386708664,2.104800225164726,-0.9334018259176138],[0.3996606472230945,-3.841833987195283e-05,-0.7854377969176111,3.496986454572936e-05,-2.3562676507191953,9.701481726784256e-05,1.5707983715158922,0.785298633748222,-0.907056098224064,-1.603137669985437,-0.8862427279813192,-2.4882842482322842,-1.4077122789011973,2.104518912335256,-0.928186102528249],[0.39961352854109494,-3.701996227903739e-05,-0.7854388256148869,3.6148632843692956e-05,-2.356268766293115,9.585245145013962e-05,1.570797775456653,0.7852986492354437,-0.9079798004140436,-1.606851622822142,-0.8885955292890022,-2.4882081140483883,-1.408163565409274,2.1042352186734585,-0.9228909366287675],[0.3995814172006314,-3.529727894123921e-05,-0.7854401015351505,3.678549458903162e-05,-2.3562696225836026,9.352077905064215e-05,1.5707964887954384,0.7852986931152778,-0.9086224451303371,-1.6094547448491425,-0.8902435868530857,-2.4881645930941585,-1.4084812177743586,2.1040368563217466,-0.919160853346895],[0.3995564378034884,-3.323972781829472e-05,-0.7854417139307912,3.701681843894209e-05,-2.3562701718386365,9.005209773232509e-05,1.5707943015927681,0.7852987703735923,-0.909168162574358,-1.6116796696261793,-0.8916511418340227,-2.488135061137609,-1.4087537623067177,2.1038677422275125,-0.91595796212934],[0.39953592897249196,-3.0522843544666054e-05,-0.7854438707602835,3.671286681330816e-05,-2.356270364114405,8.471086156970336e-05,1.5707904720317074,0.7852988992823184,-0.9097156505594337,-1.6139270617184445,-0.8930714464610532,-2.4881136275560856,-1.4090302215670343,2.1036974572976583,-0.912706244138829],[0.3995263547880731,-2.8178789834844928e-05,-0.7854456744650953,3.598306025141314e-05,-2.356270165706598,7.957648812708935e-05,1.5707863778293492,0.7852990253487059,-0.910096820380158,-1.6155020394997297,-0.8940655709474067,-2.488104476001443,-1.4092247949870607,2.1035785438755696,-0.9104156389552764],[0.39952305744355016,-2.5386911489800606e-05,-0.7854476807488785,3.459065305512264e-05,-2.3562695733515606,7.294674983384511e-05,1.5707805966073398,0.7852991836254831,-0.9104794442703246,-1.6170928297589786,-0.8950682615508162,-2.488101014352729,-1.4094221577983985,2.103458901122629,-0.908090125293304],[0.399526328294163,-2.3140694320293366e-05,-0.7854491412319365,3.306467649715297e-05,-2.3562688506177936,6.726211015608066e-05,1.5707752529934236,0.7852993112845182,-0.9107459762086016,-1.618207599373566,-0.8957697970163477,-2.4881026305119898,-1.4095610583813227,2.103375414410343,-0.9064519698533218],[0.3995363589624075,-2.0593298320076718e-05,-0.785450589786316,3.089036050418094e-05,-2.3562677887826236,6.047897725157648e-05,1.5707684628495613,0.7852994503539873,-0.9110136510684727,-1.6193335026470632,-0.8964771178848439,-2.488108253997604,-1.4097019455594684,2.103291473122977,-0.9047888509362116],[0.39954892345944626,-1.8617522858131907e-05,-0.7854515330239463,2.8869421623746015e-05,-2.3562667980620184,5.4992389924066097e-05,1.5707626726864325,0.7852995503838177,-0.9112001867699748,-1.6201224548596544,-0.8969718304316344,-2.4881149934498064,-1.4098010963382757,2.103232936291815,-0.9036173046676267],[0.3995679687230876,-1.6437948218766335e-05,-0.7854523589437874,2.6286390648837916e-05,-2.356265542884783,4.87277722591677e-05,1.5707557682216957,0.7852996493566028,-0.9113875969567263,-1.6209192440906808,-0.8974704743972897,-2.488124576858488,-1.4099016619950984,2.103174096221153,-0.9024279051393209],[0.3995499208353902,-2.141207037436475e-05,-0.7854559951150846,1.6600317458082185e-05,-2.3562589875111297,5.801543232615742e-05,1.570758898830493,0.7852995260358507,-0.9113714811968313,-1.6206461772549847,-0.8973117792593959,-2.4880220780087257,-1.4098456210098107,2.103191911326043,-0.902901455262804],[0.39953391391672627,-2.268150795024609e-05,-0.785454538734303,2.0087116525450475e-05,-2.3562626246895966,6.462414939986278e-05,1.5707620359802235,0.7852993508274162,-0.9111968469997875,-1.6201001722721082,-0.8969424928673554,-2.4879944455062617,-1.4096837576205365,2.1031998499332145,-0.9035137665857942],[0.3995214028137857,-2.340155946901634e-05,-0.7854544071853522,2.3861764800500776e-05,-2.3562665669215894,6.87910749563728e-05,1.5707650816238579,0.7852991854567843,-0.9108514652713989,-1.6193923240141828,-0.8964041244367178,-2.4879484480080185,-1.4092615773281763,2.103105937805346,-0.9038169731595377],[0.39951395502237397,-2.405055627196253e-05,-0.7854572331299485,2.650128902376341e-05,-2.35627060433387,7.104276783160234e-05,1.5707671387287583,0.7852991077421511,-0.9103993990796593,-1.6187039342475602,-0.8958173192563417,-2.4878783693775337,-1.4086269107912714,2.1029106062768843,-0.9036244519058129],[0.39950677016277947,-2.5048124548898076e-05,-0.7854634772655625,2.9139710995101796e-05,-2.356277182541811,7.337077289726795e-05,1.5707693567486296,0.7852990572981912,-0.9095953497434552,-1.6176911199034378,-0.8948797019052407,-2.487747317810763,-1.4074326659672123,2.1025026758024232,-0.9027672820704847],[0.39950135607892523,-2.6039901927580177e-05,-0.785468374582662,3.104379706734635e-05,-2.3562837742491367,7.540541300132604e-05,1.5707715360056882,0.7852990200872108,-0.9086642636258477,-1.6166455683314125,-0.8938586509260341,-2.487597473749865,-1.4060150121272255,2.1019961800949836,-0.9014701490565046],[0.3994949276458658,-2.73489743329827e-05,-0.7854726062244138,3.307945627396728e-05,-2.3562907766585504,7.814046121502507e-05,1.5707751152440341,0.7852989702586592,-0.9071869770385096,-1.6150993375086888,-0.8922972743390952,-2.487372536637937,-1.4037403545806073,2.101164850711885,-0.899148729157188],[0.3994888972904167,-2.8663695907118572e-05,-0.7854750450271392,3.4535330122956654e-05,-2.356295679592386,8.073041334918652e-05,1.570778630273166,0.7852989339525807,-0.9056080252239589,-1.6135200497264623,-0.8906670126666956,-2.4871294758652525,-1.40128930150917,2.100256251732164,-0.8964925601447964],[0.3994810427385953,-3.0047977591672065e-05,-0.7854770705296765,3.62163541317589e-05,-2.35630081030137,8.38878389637194e-05,1.5707830676910457,0.7852988970543597,-0.903266827944269,-1.611243027562992,-0.8882863641791303,-2.4867733880354157,-1.3976583142620707,2.0989020901793234,-0.8924231872684889],[0.39947403462105124,-3.112854823242532e-05,-0.7854783061497903,3.753544925354269e-05,-2.3563044983417143,8.643688038504183e-05,1.5707867800512705,0.7852988728906626,-0.900928605902923,-1.609010496979302,-0.8859321509564582,-2.4864194876954104,-1.3940296386423874,2.097542727108541,-0.888269547089877],[0.3994651988305099,-3.232528633664356e-05,-0.7854795129898309,3.9044721251922655e-05,-2.356308121014703,8.931947639494905e-05,1.570791130165342,0.7852988520666992,-0.8976439082201724,-1.6059129245716628,-0.8826468197813732,-2.4859242103486308,-1.388930633475392,2.095627001735206,-0.8823520135884482],[0.3994559863022992,-3.341054285700458e-05,-0.7854804974185988,4.0498072377379295e-05,-2.356310980283274,9.199746730918067e-05,1.5707952828970786,0.7852988381723622,-0.8938158858278108,-1.6023363482967596,-0.8788370086038174,-2.4853489571115754,-1.3829878752679987,2.0933896277623707,-0.8753853404197273],[0.39944776128739334,-3.4461114893264215e-05,-0.7854812001520458,4.1685635301675685e-05,-2.356312644887565,9.42381323848695e-05,1.5707986972644665,0.7852988292855824,-0.8901798976111653,-1.598960516970117,-0.875229013664859,-2.484798725796666,-1.3773318876716387,2.09125573906946,-0.8687105274351753],[0.3994391387145256,-3.524753568587183e-05,-0.7854816686548816,4.295687651854048e-05,-2.356314194896902,9.644999955438735e-05,1.5708019946311453,0.7852988173406624,-0.8861031633022328,-1.595189946753222,-0.8711928414542365,-2.4841861982938997,-1.3710027214622686,2.0888678208292273,-0.8612103709944166]]}
diff --git a/src/dual_arm_sim/test/data/right_arm_far_block_carry.json b/src/dual_arm_sim/test/data/right_arm_far_block_carry.json
new file mode 100644
index 000000000..b4a0abf91
--- /dev/null
+++ b/src/dual_arm_sim/test/data/right_arm_far_block_carry.json
@@ -0,0 +1 @@
+{"initial_joint_positions":{"planar_x":[-0.2999586736706883],"planar_y":[3.434898445097896e-05],"planar_theta":[8.21163458567202e-05],"caster_front_left_steering_joint":[-0.0017567755743180292],"caster_front_left_joint":[3.2812570510981665e-14],"tmrv0_2_joint_0":[0.003100263601776513],"tmrv0_2_joint_1":[-8.936708421262395e-16],"rocker_arm_joint":[0.0002155951382788854],"caster_rear_right_steering_joint":[-0.000292372143904969],"caster_rear_right_joint":[-2.3898550774755346e-10],"tmrv0_2_joint_2":[0.003100263596397599],"tmrv0_2_joint_3":[1.4795343713535343e-07],"franka_spine_vertical_joint":[0.3999598033030809],"left_fr3v2_joint1":[-4.941774272360694e-07],"left_fr3v2_joint2":[-0.7854189503726593],"left_fr3v2_joint3":[-1.2181544738832533e-06],"left_fr3v2_joint4":[-2.3562034301776125],"left_fr3v2_joint5":[7.32433482685818e-07],"left_fr3v2_joint6":[1.570699786016728],"left_fr3v2_joint7":[0.7853000031541328],"left_fr3v2_finger_joint1":[1.9985819544048892e-05],"left_fr3v2_finger_joint2":[2.0014145935361738e-05],"right_fr3v2_joint1":[0.24175270106411664],"right_fr3v2_joint2":[0.7086683369626972],"right_fr3v2_joint3":[-1.0089068289857333],"right_fr3v2_joint4":[-1.8528053744695039],"right_fr3v2_joint5":[-0.4948654689202368],"right_fr3v2_joint6":[2.558921488181227],"right_fr3v2_joint7":[2.749153313617107],"right_fr3v2_finger_joint1":[0.035000574341551904],"right_fr3v2_finger_joint2":[0.03499942565879736],"block_green_1":[0.6500000000097622,0.24999972229421066,0.7799658719765066,0.9999999999998165,2.0498633621445728e-16,2.608039691337907e-16,6.071712327182778e-07],"block_green_2":[0.7499999999993183,-0.24999962625182406,0.7799658719765068,0.9999999999998122,2.1253657904474215e-16,2.888005638550084e-16,-6.145508962732913e-07],"block_green_3":[0.8499999999818988,0.24999972227890888,0.7799658719765067,0.9999999999998133,4.5548069269518756e-17,-2.980722426865292e-17,-6.120302267869005e-07],"block_red_1":[0.13799681801392455,-0.7777661434406784,0.7799658719765069,0.23158851247916568,-0.6681068484058784,-0.23158851247309922,-0.6681068484092562],"block_red_2":[0.15931995259606319,-0.7068838267191815,0.7799658719765067,-5.3080694425436616e-12,-0.11265460372786162,-0.9936342084786123,4.141230048796495e-13],"block_red_3":[0.8499999999992573,-0.24999962625521277,0.7799658719765069,0.9999999999998135,-2.243647505822219e-16,6.079181452226333e-17,-6.110826742949593e-07]},"actuator_names":["franka_spine_vertical_joint","left_fr3v2_joint1","left_fr3v2_joint2","left_fr3v2_joint3","left_fr3v2_joint4","left_fr3v2_joint5","left_fr3v2_joint6","left_fr3v2_joint7","right_fr3v2_joint1","right_fr3v2_joint2","right_fr3v2_joint3","right_fr3v2_joint4","right_fr3v2_joint5","right_fr3v2_joint6","right_fr3v2_joint7"],"time":[0.0,0.015000000000000568,0.03300000000000125,0.04800000000000182,0.0660000000000025,0.08100000000000307,0.09600000000000364,0.11400000000000432,0.1290000000000049,0.14700000000000557,0.16200000000000614,0.18000000000000682,0.1980000000000075,0.21300000000000807,0.23100000000000875,0.24600000000000932,0.26400000000001,0.2790000000000106,0.29700000000001125,0.3120000000000118,0.3300000000000125,0.3450000000000131,0.36300000000001376,0.3780000000000143,0.396000000000015,0.4140000000000157,0.42900000000001626,0.4440000000000168,0.4620000000000175,0.4800000000000182,0.49500000000001876,0.5130000000000194,0.52800000000002,0.5460000000000207,0.5610000000000213,0.5790000000000219,0.5850000000000222,0.6000000000000227,0.6180000000000234,0.6420000000000243,0.6570000000000249,0.6720000000000255,0.687000000000026,0.7050000000000267,0.7200000000000273,0.738000000000028,0.7560000000000286,0.7710000000000292,0.7890000000000299,0.8040000000000305,0.8220000000000312,0.8370000000000317,0.8550000000000324,0.870000000000033,0.8880000000000337,0.9030000000000342,0.9210000000000349,0.9360000000000355,0.9540000000000362,0.9690000000000367,0.9840000000000373,1.002000000000038,1.0200000000000387,1.0350000000000392,1.05300000000004,1.0680000000000405,1.0860000000000412,1.1010000000000417,1.1160000000000423,1.134000000000043,1.1520000000000437,1.1670000000000442,1.185000000000045,1.1970000000000454,1.215000000000046,1.2300000000000466,1.2480000000000473,1.2630000000000479,1.2810000000000485,1.2960000000000491,1.3140000000000498,1.3290000000000504,1.347000000000051,1.3650000000000517,1.3800000000000523,1.398000000000053,1.4130000000000535,1.4310000000000542,1.4460000000000548,1.4640000000000555,1.479000000000056,1.4970000000000567,1.5120000000000573,1.530000000000058,1.5450000000000585,1.5630000000000592,1.5780000000000598,1.5960000000000605,1.611000000000061,1.6290000000000617,1.6440000000000623,1.662000000000063,1.6770000000000636,1.6950000000000642,1.7100000000000648,1.7280000000000655,1.743000000000066,1.7610000000000667,1.7760000000000673,1.794000000000068,1.8090000000000686,1.8240000000000691,1.8420000000000698,1.8570000000000704,1.875000000000071,1.8900000000000716,1.9080000000000723,1.9230000000000729,1.9410000000000736,1.9560000000000741,1.9740000000000748,1.9890000000000754,2.007000000000076,2.0220000000000766,2.0400000000000773,2.058000000000078,2.0730000000000786,2.0910000000000792,2.10600000000008,2.1240000000000805,2.139000000000081,2.1570000000000817,2.1720000000000823,2.190000000000083,2.2050000000000836,2.220000000000084,2.238000000000085,2.2530000000000854,2.271000000000086,2.2890000000000867,2.3040000000000873,2.322000000000088,2.3370000000000886,2.3550000000000892,2.37000000000009,2.3880000000000905,2.403000000000091,2.4210000000000917,2.4360000000000923,2.454000000000093,2.4690000000000936,2.484000000000094,2.502000000000095,2.5170000000000954,2.535000000000096,2.5500000000000966,2.5680000000000973,2.583000000000098,2.6010000000000986,2.6190000000000992,2.6340000000001,2.6490000000001004,2.664000000000101,2.6790000000001015,2.697000000000102,2.7120000000001028,2.7300000000001035,2.745000000000104,2.7630000000001047,2.7780000000001053,2.796000000000106,2.8140000000001066,2.826000000000107,2.8410000000001077,2.8590000000001083,2.874000000000109,2.8920000000001096,2.90700000000011,2.925000000000111,2.9400000000001114,2.958000000000112,2.9730000000001127,2.9910000000001133,3.006000000000114,3.0240000000001146,3.039000000000115,3.057000000000116,3.0750000000001165,3.090000000000117,3.108000000000118,3.1230000000001183,3.141000000000119,3.1560000000001196,3.1740000000001203,3.189000000000121,3.2070000000001215,3.222000000000122,3.240000000000123,3.2550000000001234,3.273000000000124,3.2880000000001246],"commands":[[0.3999598033030809,-4.941774272360694e-07,-0.7854189503726593,-1.2181544738832533e-06,-2.3562034301776125,7.32433482685818e-07,1.570699786016728,0.7853000031541328,0.24175270106411664,0.7086683369626972,-1.0089068289857333,-1.8528053744695039,-0.4948654689202368,2.558921488181227,2.749153313617107],[0.39996442777601515,-4.54022596271001e-07,-0.7854176815841465,-1.2292700076432904e-06,-2.356202986596213,6.196110092329719e-07,1.5706998073859753,0.7853000009386428,0.24175073086670948,0.7086739462698699,-1.0089078353710195,-1.8528007420303052,-0.4948662212094149,2.5589197160965895,2.7491537964006545],[0.39996932768448784,-4.091073881194144e-07,-0.7854162539410809,-1.2191132493924172e-06,-2.356202518802462,5.049932602463106e-07,1.5706998251573843,0.7852999988665439,0.24174869937391283,0.7086799331509889,-1.0089088565454916,-1.8527955304697439,-0.49486743047249193,2.5589168675167584,2.7491544340129366],[0.3999729251301398,-3.7432102499598315e-07,-0.7854151407447434,-1.1952046260872675e-06,-2.356202177114289,4.2433899410015466e-07,1.570699834845464,0.7852999975459315,0.24174724413140225,0.7086843772566754,-1.0089095767685152,-1.852791496084605,-0.4948685679746413,2.5589141166945977,2.7491549747954784],[0.39997672370877807,-3.3564890510135646e-07,-0.7854138930402363,-1.152499211014707e-06,-2.3562018184687727,3.4269964691428186e-07,1.5706998419027283,0.7852999963593605,0.2417457403569307,0.7086891411185848,-1.0089103104875747,-1.8527870400883526,-0.49486997192897575,2.5589105984203995,2.7491556006279385],[0.399979503329738,-3.0589911358303964e-07,-0.7854129236633142,-1.1082286091250764e-06,-2.3562015579311177,2.854838596543473e-07,1.5706998450278904,0.785299995643579,0.24174466098753442,0.7086926953399824,-1.0089108303883738,-1.8527836524294836,-0.49487111019719104,2.5589076320080317,2.7491560853516743],[0.39998197029339694,-2.7831882835644195e-07,-0.7854120153821544,-1.058357820309727e-06,-2.3562013285644166,2.3669033973722293e-07,1.5706998464551776,0.7852999951309522,0.24174371760540003,0.708695918512004,-1.0089112802518594,-1.8527805593958337,-0.49487218018217904,2.5589047375438976,2.7491565269500966],[0.3999845633460422,-2.479661581250546e-07,-0.7854110022083239,-9.936169446451803e-07,-2.3562010900962256,1.876646428849979e-07,1.5706998468049236,0.7852999947344114,0.24174274038584076,0.7086994030541367,-1.0089117420927098,-1.8527772279920343,-0.49487334218339735,2.558901458935265,2.7491569936957703],[0.3999864523291681,-2.2484995106874174e-07,-0.7854102186028082,-9.372959617030904e-07,-2.3562009187074495,1.5360733905156426e-07,1.570699846555931,0.7852999945515574,0.24174203743589556,0.7087020264035168,-1.0089120720508857,-1.8527747569951196,-0.49487419456784904,2.5588989470693346,2.7491573285767874],[0.39998843193698264,-1.9957555412131368e-07,-0.7854093469618567,-8.686172587337112e-07,-2.3562007420229656,1.1964938487520016e-07,1.5706998462021862,0.7852999944727613,0.24174130838585478,0.7087048806170425,-1.0089124127847438,-1.8527721383903346,-0.49487507216846366,2.5588962429492366,2.749157667272801],[0.39998986973368916,-1.8044612390170365e-07,-0.7854086745936802,-8.115584475786802e-07,-2.356200616222055,9.627184762063661e-08,1.5706998462104975,0.7852999945006883,0.2417407833856232,0.7087070429758866,-1.0089126576614165,-1.8527702269191288,-0.49487568445046465,2.5588942657154363,2.749157900101849],[0.3999913720651895,-1.596508480934459e-07,-0.7854079284839556,-7.443689047012463e-07,-2.3562004878442906,7.320481483320397e-08,1.5706998468979825,0.7852999946217238,0.24174023837778025,0.7087094096486548,-1.0089129119854687,-1.8527682325482542,-0.49487628471187967,2.5588922289529648,2.749158125733662],[0.39999266128956557,-1.410372847513139e-07,-0.7854072442925313,-6.794520049681344e-07,-2.3562003810122425,5.4719754087736094e-08,1.5706998485378891,0.7852999948161735,0.24173977301919916,0.7087115562287505,-1.008913129801409,-1.8527665355449483,-0.49487675157763866,2.558890547830565,2.7491582995986494],[0.3999935933629158,-1.2706043374647564e-07,-0.7854067182145045,-6.275808574878187e-07,-2.356200306307901,4.225122817847691e-08,1.570699850715634,0.7852999950203988,0.24173943748369614,0.7087131956484183,-1.0089132876330944,-1.8527653258415067,-0.4948770505442793,2.5588894020396644,2.749158410389972],[0.39999456284402796,-1.1197498335576587e-07,-0.7854061360971221,-5.684121611139378e-07,-2.356200231546735,3.0231950915004753e-08,1.570699854321389,0.7852999953024216,0.2417390887597762,0.708715002677841,-1.008913452791395,-1.8527640926508262,-0.4948773161503853,2.558888306480287,2.7491585088258086],[0.39999526167487615,-1.0069260649945459e-07,-0.785405689177942,-5.218753375520134e-07,-2.356200180024422,2.2276625309144928e-08,1.5706998581203044,0.7852999955593356,0.2417388371473291,0.7087163876962518,-1.0089135729664103,-1.8527632266312823,-0.4948774714760594,2.558887602238514,2.749158566824517],[0.3999959864277946,-8.855844623467676e-08,-0.7854051952796236,-4.6950531404388935e-07,-2.3562001292755266,1.4773454559640487e-08,1.5706998635443425,0.7852999958844419,0.24173857547047264,0.7087179186213662,-1.0089136991676928,-1.8527623566870213,-0.49487759271502535,2.5588869751129675,2.7491586130983223],[0.39999650732364955,-7.951218742467186e-08,-0.7854048164950573,-4.288049710874258e-07,-2.3562000949173814,9.934406564160857e-09,1.5706998686915588,0.7852999961631623,0.24173838653785518,0.7087190945494294,-1.0089137912729162,-1.852761754716809,-0.4948776496045415,2.55888660853761,2.749158636079175],[0.39999704599784486,-6.981003360692216e-08,-0.7854043982494308,-3.83482239526508e-07,-2.356200061736365,5.5086116327237565e-09,1.5706998754811747,0.78529999650035,0.24173818991598137,0.7087203962682898,-1.0089138882266266,-1.8527611587164974,-0.4948776764951642,2.5588863243577116,2.7491586492506483],[0.39999743206039223,-6.259478633276603e-08,-0.7854040776985888,-3.485922850335628e-07,-2.3562000397747154,2.760835835618625e-09,1.5706998815327353,0.7852999967792588,0.24173804785554828,0.7087213970260954,-1.0089139591152114,-1.8527607522415166,-0.4948776723848917,2.5588861941432697,2.7491586511013018],[0.39999783021291463,-5.487303276276056e-08,-0.7854037239221601,-3.1007107498422126e-07,-2.356200019108274,3.64559356429063e-10,1.570699889116147,0.7852999971068415,0.24173789990993125,0.7087225051935797,-1.0089140338275544,-1.8527603554211791,-0.4948776443268776,2.5588861388844824,2.74915864545187],[0.399998114809462,-4.914151001850242e-08,-0.7854034528681373,-2.806504125381706e-07,-2.356200005846377,-1.0316203185717093e-09,1.5706998955895877,0.7852999973709363,0.24173779294125652,0.7087233570310616,-1.0089140884944032,-1.8527600885147202,-0.49487760739608927,2.55888615818772,2.7491586361733673],[0.39999840758688815,-4.301783103689992e-08,-0.7854031537684049,-2.4840228576346325e-07,-2.3561999938230227,-2.1463170613086827e-09,1.5706999034075344,0.7852999976741343,0.24173768146014898,0.7087242997712374,-1.0089141461240396,-1.852759831332029,-0.49487755281176904,2.558886238872668,2.749158621598189],[0.39999825047158755,-1.001854867041273e-07,-0.7854030485729512,-5.773401917959293e-07,-2.3562001042453633,-2.3294853727881965e-08,1.5706998865301531,0.7852999953237758,0.24173958114283994,0.7087226349242447,-1.0089146072939312,-1.8527529402377312,-0.49487735056376614,2.5588895504572875,2.749158641648989],[0.3999979421187524,-1.1720090355980504e-07,-0.7854029211787751,-5.61808893631864e-07,-2.3562003603191415,-3.733040235361138e-08,1.5706998711638624,0.7852999954874818,0.2417486192379975,0.7087175264462828,-1.0089131010028416,-1.8527305461065775,-0.4948779452430561,2.5589023093594396,2.7491585611977882],[0.3999980786295119,-5.560423602956792e-08,-0.7854026517688344,-6.275692052731748e-07,-2.356200071501915,-7.20460289784588e-08,1.570699891923036,0.7852999974817503,0.24174980865595583,0.7087178418555783,-1.0089139604158537,-1.8527218895105366,-0.4948797139711522,2.5589110502119397,2.74915830979154],[0.3999975354535903,-6.375675545930684e-08,-0.7854024858602526,-7.580998242885908e-07,-2.3561998447808437,-9.84909294041346e-08,1.5706998877972644,0.7852999989116095,0.24174835237851464,0.7087196087042201,-1.0089150149671928,-1.852720663692909,-0.4948812423391973,2.5589156167711957,2.749157911916199],[0.3999964269823321,-5.918153275604323e-08,-0.7854023387351187,-8.419913509504789e-07,-2.3561996565097325,-1.0186561846054689e-07,1.5706998946830075,0.7852999991125658,0.24174571153636362,0.7087213336391331,-1.0089168381242666,-1.8527216430658642,-0.49488196503734955,2.5589182865916076,2.749157849665189],[0.3999944828904799,-8.213308916935052e-08,-0.7854021310769326,-8.357633495553958e-07,-2.3561996264323772,-9.568793332271346e-08,1.5706998959936749,0.7852999984503204,0.24174362591750279,0.7087234068167798,-1.0089171089105622,-1.8527240434820953,-0.4948822478267379,2.5589199811725276,2.749157830780833],[0.39999252601316293,-7.182407888144297e-08,-0.7854019736348773,-6.277791404483032e-07,-2.356199705573716,-6.714385351601322e-08,1.5706998899025175,0.7852999988156779,0.24174220175363376,0.7087249177158013,-1.0089171526172678,-1.8527266774770348,-0.49488211927700126,2.5589202936149262,2.749157808935299],[0.39999116647568755,-4.929552571916219e-08,-0.7854018484021149,-3.951252147668829e-07,-2.356199795623871,-3.749895652541575e-08,1.5706998900545663,0.7852999994300005,0.24174137784885688,0.7087258584148216,-1.0089171104424894,-1.8527288618189979,-0.49488183007895575,2.5589197337526284,2.749157784285567],[0.39999000713549443,-1.8824078726426046e-08,-0.7854016963845815,-1.1915409119503444e-07,-2.3561999047528808,-4.1503616931439005e-09,1.5706998963058008,0.7853000003048078,0.24174071641129152,0.7087267127781078,-1.0089169852235351,-1.852731360735815,-0.49488137328245424,2.558918332170007,2.7491577489442607],[0.3999894567996458,4.059833004895607e-09,-0.7854015696461705,7.665385418177085e-08,-2.3561999844148906,1.8389677617533464e-08,1.570699905037159,0.7853000010238887,0.24174035935728921,0.7087272573272685,-1.0089168374735047,-1.852733304659352,-0.49488095894084205,2.5589167260898837,2.7491577178719497],[0.39998925139916297,2.5358950802536738e-08,-0.7854014208608662,2.5313963270027167e-07,-2.356200058612568,3.7747636971905533e-08,1.5706999180571466,0.7853000017478095,0.24174007962674662,0.7087277680591898,-1.0089166301623265,-1.8527354573411416,-0.49488046886560266,2.5589144555192327,2.7491576828923874],[0.3999893946182311,3.727800955360023e-08,-0.7854013018214901,3.494380605913607e-07,-2.356200100898275,4.76860284265106e-08,1.57069993000756,0.785300002171996,0.2417399198108131,0.7087281084583803,-1.0089164466809677,-1.8527371028898434,-0.49488008873384765,2.558912395813497,2.749157658379926],[0.3999898475579037,4.5028861646002956e-08,-0.7854011668359445,4.1026132625704476e-07,-2.3562001297052766,5.3288377428190664e-08,1.5706999446697743,0.7853000024366309,0.24173977031820582,0.7087284461688488,-1.0089162278024608,-1.8527389088046813,-0.4948796816434125,2.558909845489609,2.7491576367829604],[0.39999004901233065,4.622791973150566e-08,-0.7854011239789468,4.1918730227632755e-07,-2.3562001346284527,5.3887870976271505e-08,1.5706999494882896,0.785300002467237,0.24173972491293624,0.7087285459753586,-1.0089161571702074,-1.8527394721311723,-0.4948795591335735,2.5589089947669685,2.7491576316974147],[0.3999906278082574,4.6757304848161504e-08,-0.7854010218150245,4.2152160138161223e-07,-2.356200138454634,5.321759679754807e-08,1.5706999611296453,0.7853000024319745,0.24173961278964412,0.7087287748530167,-1.008915988921896,-1.8527408013543025,-0.4948792823512733,2.5589068990040174,2.749157623716477],[0.39999140756094576,4.3837861300385965e-08,-0.7854009088531118,3.9577387488121255e-07,-2.3562001305294658,4.939428418542914e-08,1.5706999739747758,0.7853000022180658,0.24173947204079455,0.7087290207401507,-1.008915806804671,-1.852742257892536,-0.4948790041227473,2.5589044894397452,2.74915762268895],[0.39999248210671096,3.6410698873147036e-08,-0.785400774544258,3.33267426244664e-07,-2.3562001067654466,4.145054769022336e-08,1.57069998858845,0.7853000017494266,0.24173926500412854,0.708729317659089,-1.0089156029462505,-1.8527439911048718,-0.49487871555092705,2.558901537719723,2.749157633802187],[0.39999312981968904,3.0899579633377774e-08,-0.7854006997234102,2.872990728219455e-07,-2.356200088170373,3.5857344233897016e-08,1.57069999608328,0.7853000014089084,0.24173912489691393,0.7087294920578635,-1.0089154987728979,-1.8527449678873211,-0.49487857595827606,2.558899873051357,2.7491576463875615],[0.3999937394347073,2.535230489443618e-08,-0.7854006315177287,2.4103808711752025e-07,-2.3562000688780613,3.030901937491937e-08,1.5707000022915127,0.7853000010665926,0.2417389791840566,0.7087296609422246,-1.0089154115854317,-1.8527458728503023,-0.4948784621181471,2.558898356631552,2.7491576620290497],[0.399994302436647,2.011968269878783e-08,-0.7854005695195407,1.972616626117184e-07,-2.3562000501716787,2.5091579024671448e-08,1.5707000072584458,0.7853000007433236,0.2417388307778883,0.7087298258541195,-1.0089153399237711,-1.8527467137040614,-0.49487836944182056,2.5588969895603233,2.7491576796888446],[0.3999949120246681,1.4556748091102885e-08,-0.7854005026966298,1.504009615628574e-07,-2.3562000296971415,1.9508978082585884e-08,1.5707000117071486,0.7853000003994962,0.2417386532662903,0.708730019779097,-1.008915271838057,-1.852747647902625,-0.494878280180595,2.5588955411488405,2.749157702225717],[0.39999536568126504,1.064005902001994e-08,-0.7854004527968698,1.1706312566398772e-07,-2.356200014859766,1.551884355232644e-08,1.5707000142962961,0.7853000001579825,0.24173850889647866,0.7087301786178302,-1.0089152276663427,-1.8527483712571753,-0.4948782196582697,2.5588944859817415,2.749157721191215],[0.3999958494779886,6.832804936547057e-09,-0.7854003992017411,8.418561487073544e-08,-2.35620000003264,1.1547504500044136e-08,1.5707000162686842,0.7852999999248403,0.2417383430762452,0.708730366133244,-1.0089151867211954,-1.8527491809969674,-0.4948781588780405,2.5588933879592135,2.749157743224083],[0.39999627447193165,3.937022859834179e-09,-0.7854003517794028,5.863494209419528e-08,-2.35619998843944,8.415845030305439e-09,1.5707000172383216,0.7852999997501801,0.24173818781725184,0.7087305501894844,-1.008915155842261,-1.852749934309073,-0.4948781068140473,2.558892455769079,2.7491577637153872],[0.39999658987463155,2.1324111690699315e-09,-0.7854003164893036,4.227865026133755e-08,-2.3561999810712697,6.376050187197473e-09,1.5707000174541077,0.7852999996439922,0.2417380676967282,0.7087307007154972,-1.0089151356882629,-1.852750523451901,-0.4948780675860353,2.558891791445939,2.749157779234973],[0.399996929074891,5.697621623020228e-10,-0.7854002786806424,2.7599202095984734e-08,-2.3561999746489244,4.5077382218695625e-09,1.5707000171925323,0.7852999995558085,0.24173793535127008,0.7087308775711445,-1.0089151160470193,-1.8527511883801377,-0.4948780233179875,2.5588911123011155,2.7491577957496895],[0.39999718414204394,-3.315677028651819e-10,-0.7854002505749453,1.8704347432468032e-08,-2.3561999710145094,3.3492900979979687e-09,1.5707000166708966,0.7852999995085561,0.2417378349816945,0.7087310215011938,-1.0089151020833715,-1.8527517101310316,-0.4948779875821771,2.5588906319572704,2.7491578076989276],[0.39999746271572556,-1.0515490844027772e-09,-0.7854002204907836,1.110290651559557e-08,-2.356199968329702,2.3360360961622725e-09,1.5707000158188422,0.7852999994756806,0.24173772611948638,0.7087311896917294,-1.0089150868273795,-1.8527523001086783,-0.49487794513443867,2.558890143126684,2.749157819924751],[0.39999767555084204,-1.4309521039958524e-09,-0.7854001981464359,6.690562173595461e-09,-2.356199967206904,1.735323550759612e-09,1.5707000150067585,0.7852999994629631,0.24173764456508548,0.7087313257955232,-1.0089150745511166,-1.8527527633376975,-0.4948779097289903,2.5588897979404255,2.7491578284785154],[0.3999953612815638,-8.944487992036474e-07,-0.7854026054134264,-9.585196318907773e-07,-2.3562024484311346,3.6385815319289794e-07,1.5706996442253842,0.7853000000917069,0.24176495316307378,0.7087211261820955,-1.0089226268841234,-1.8527596871149337,-0.4948795454997553,2.558884281797819,2.7491574666735454],[0.39998393293156725,-4.154322688537264e-06,-0.785406349340371,-2.0586845384332263e-06,-2.356209417386072,3.5171650714701312e-06,1.570700361660556,0.7852999556438519,0.24193465417913815,0.7086457461125545,-1.0089907349575724,-1.852812087505241,-0.49488699507267536,2.5588031485348637,2.7491547896120156],[0.39995341270984724,-9.369598040009956e-06,-0.7854114252593924,-2.4825311171614073e-06,-2.356214196411735,1.2565446322907488e-05,1.5707058142216856,0.785299797056959,0.24243098624254986,0.7083960337401587,-1.009262114007237,-1.8530101854031387,-0.4949067521509262,2.558487688700784,2.7491573034724737],[0.39990888194302476,-1.4719049992585073e-05,-0.7854153350055117,-2.192661883370437e-06,-2.356216480311101,2.349692464961788e-05,1.5707140429597568,0.7852995702631969,0.2432012059536322,0.7079944807986365,-1.00967902242419,-1.8533043350932386,-0.4949455164606041,2.5580037136564466,2.749173550273412],[0.3998324449052817,-2.0735912185382256e-05,-0.7854193490790758,-6.976731937762705e-07,-2.3562189991980187,3.5519748065252555e-05,1.5707276401242223,0.7852991310202637,0.24466894073708284,0.7072208000639422,-1.0104538521836068,-1.8538416476139192,-0.49502759427161414,2.5570972349804064,2.7492134034819737],[0.39975144463494444,-2.4888453491764265e-05,-0.7854222717961021,1.1577386636104424e-06,-2.3562212356071197,4.4059148694968054e-05,1.5707385451609244,0.785298805674266,0.24641850889008612,0.7062950868965451,-1.0113612563210153,-1.8544626023302293,-0.49512860562655187,2.5560298482071175,2.7492651489175675],[0.399634244353514,-2.911671402491956e-05,-0.7854250225470017,2.8938811713352636e-06,-2.3562236831848016,5.2701824786175476e-05,1.5707495968065548,0.7852984782196062,0.24926987726762326,0.7047901347598818,-1.012827629255181,-1.8554518944494374,-0.49529161173427033,2.55430070418269,2.7493504880599198],[0.3995243042504327,-3.1831600287775224e-05,-0.7854277691124242,6.650893176238205e-06,-2.3562265365746007,5.902800114196158e-05,1.570757088931191,0.7852982747572756,0.252313848069732,0.703190446201825,-1.0143782594510309,-1.8564729912454458,-0.4954575084874941,2.552470355856421,2.7494380544460797],[0.3994079838596895,-3.395304156458795e-05,-0.7854301626598951,1.1240532301098188e-05,-2.356229816982921,6.457307805387079e-05,1.5707633528946108,0.78529810679893,0.2559845436558097,0.7012761010787495,-1.0162409452310255,-1.8576708967731188,-0.4956452623334395,2.550272022872719,2.7495371516575164],[0.3992636409069602,-3.593578262589146e-05,-0.7854327134642944,1.7239841572346962e-05,-2.3562339383112203,7.031629605388931e-05,1.570769543050236,0.7852979351951771,0.26125924065331746,0.6985543104909113,-1.0189139876187616,-1.8593404148060388,-0.49589228929535073,2.5471208776515626,2.749666569360204],[0.39911773045033966,-3.743155354109017e-05,-0.7854349803074067,2.3481579714226433e-05,-2.3562380797160705,7.520679386761399e-05,1.5707745450386792,0.7852977863156356,0.26752681287114327,0.6953631174407807,-1.0220913862435244,-1.861255322905771,-0.496154532636676,2.543380281807482,2.7498018385459257],[0.3989974408949132,-3.838186648916824e-05,-0.7854366549015394,2.8698162282768937e-05,-2.3562414674889283,7.872199617568259e-05,1.5707779686834153,0.7852976757303052,0.27353552466677467,0.6923442040664364,-1.0251414440438391,-1.8630283711228488,-0.49638106073215643,2.5397920609675704,2.7499153050366765],[0.39885685734696213,-3.9252077479812594e-05,-0.7854383766487756,3.466938975493489e-05,-2.3562453149899416,8.23474157842904e-05,1.5707813619073698,0.7852975538654834,0.28172064359824883,0.6882893165565998,-1.0293038059120183,-1.8653537691539501,-0.49665929540449266,2.5348928363759824,2.7500495167540935],[0.39874333023543146,-3.985393157910592e-05,-0.785439478157062,3.887956365445258e-05,-2.356248101934264,8.489706147613112e-05,1.5707837464862908,0.7852974506557064,0.28938985059488176,0.6845455943067,-1.0332132632736293,-1.867445660076396,-0.4968932753583017,2.5302830563368337,2.7501582646083294],[0.398611959151876,-4.045808570527429e-05,-0.785440745670718,4.356305087211402e-05,-2.3562511318943185,8.752316582929232e-05,1.5707861157489602,0.7852973310281492,0.299654831307622,0.6796111614133078,-1.0384578847684522,-1.8701189166233543,-0.4971723738554338,2.524079747706252,2.7502831531182066],[0.3985082808279102,-4.0662541572065274e-05,-0.785441226896701,4.6709082781236065e-05,-2.3562532618178644,8.935368269281017e-05,1.5707878186321438,0.7852972288656466,0.30910527634611634,0.6751400658558445,-1.0432965910334693,-1.872457308792138,-0.4974000825508894,2.518333500739875,2.750381324081935],[0.39840334632228924,-4.148278376599044e-05,-0.7854426320048667,4.9401878983666286e-05,-2.3562549832970716,9.093550182927906e-05,1.570789219234877,0.7852971141061026,0.31950688576522296,0.6702944831255688,-1.0486400233097755,-1.8749074853449703,-0.4976217347184077,2.511954749094747,2.750473732034958],[0.39831034422581224,-4.046468449939436e-05,-0.7854466016471643,6.392916420813727e-05,-2.3562621578112184,9.368238236475592e-05,1.5707893652926013,0.7852972353376483,0.33275095244734,0.6642045846095024,-1.0554038949297935,-1.8777984192456716,-0.49786987095410185,2.503824248028574,2.7505749277230107],[0.3982673971044274,-3.671932861457047e-05,-0.7854495598512178,7.666877493892399e-05,-2.356270620517624,9.56104531708792e-05,1.570789017431026,0.7852974739790363,0.3465251246450577,0.6579658079638697,-1.062419708470017,-1.880592822381188,-0.4980947617318659,2.4953233173497256,2.7506685409304215],[0.3982739643500421,-3.135177707708091e-05,-0.7854511725709264,8.338880091224032e-05,-2.3562770506514457,9.321169538816765e-05,1.5707881971670818,0.78529769669568,0.35819668991728376,0.6527490816860498,-1.0683546815107807,-1.8828090774711514,-0.4982622853212161,2.4880798545484377,2.75074445268381],[0.39833156900898864,-2.3334943426032375e-05,-0.7854420978632819,8.627708577357916e-05,-2.356278507492088,8.39894908940645e-05,1.5707866037049618,0.7852979957247797,0.37221728823153133,0.6465618112039124,-1.0754767521110777,-1.88530330379607,-0.4984409041246032,2.479325868084846,2.750834096547146],[0.39839607775475705,-1.897456461442578e-05,-0.7854337319409953,8.478771774774764e-05,-2.3562720969251174,7.492120052368764e-05,1.5707848443023429,0.785298268720376,0.38150236715035907,0.6425145749441692,-1.0801964422557626,-1.886864056955293,-0.4985491927830327,2.4734895996105593,2.7508914003022733],[0.39852059567500253,-1.0645449231596667e-05,-0.7854232985807176,7.860804413620874e-05,-2.356259121429022,5.9010437485719064e-05,1.5707795315860509,0.7852987389122598,0.39530843631611506,0.6365619063168438,-1.087216153671336,-1.8890494828945323,-0.49869750113112543,2.4647510236667913,2.7509701305586467],[0.39865632486860864,-1.9632226087676867e-06,-0.7854152531143903,7.18214273004009e-05,-2.3562479984782003,3.9788568008145536e-05,1.5707703296574738,0.785299212578448,0.40643666580855786,0.6318147383916722,-1.092859984358305,-1.8906890309700672,-0.49880872778312774,2.457678247104229,2.7510279615249598],[0.3988475765328487,6.461430771216066e-06,-0.785405701924656,6.04615636221815e-05,-2.356234590016519,1.742805650164404e-05,1.570755118602191,0.7852999108591873,0.41925215121466186,0.6264077114606426,-1.099363547752669,-1.8924679616288607,-0.49892916925369307,2.4494776119953476,2.7510869008768037],[0.3990236075395592,1.2667474473525979e-05,-0.78539932445666,5.044722800231043e-05,-2.356224059844747,1.4834072511227425e-06,1.5707397312687303,0.7853005368684195,0.42940845855804427,0.6221629236642717,-1.1045147757923002,-1.8937912142247049,-0.49901815086289014,2.4429449935727883,2.7511283035372083],[0.3992500324021109,1.871163451499602e-05,-0.7853922364374651,3.783870495957135e-05,-2.3562121411307992,-1.4926004173364602e-05,1.5707192532403964,0.7853012229398311,0.4408441641119792,0.6174238518952199,-1.110312765469771,-1.895199465085472,-0.49911183586859115,2.4355543789701097,2.751170107835795],[0.399445346524146,2.2686345739572716e-05,-0.7853868842315691,2.6756215693344783e-05,-2.3562026090672252,-2.6680802097503442e-05,1.5707024617333094,0.7853016481845327,0.44969878038557515,0.6137820833650565,-1.1148024801794658,-1.896236124809155,-0.49917840877656267,2.42979004457547,2.7511992900307978],[0.3996810904423472,2.6449023093135616e-05,-0.7853812021952846,1.3304027116079794e-05,-2.3561916838539583,-3.8803249090923006e-05,1.570685572033803,0.7853019363652601,0.45946299268792135,0.6097922374939576,-1.119755078125551,-1.8973301194412182,-0.4992473939826224,2.4233954884853603,2.7512285383523065],[0.39987461528247886,2.891170219876851e-05,-0.7853771292836687,2.4590831132728314e-06,-2.356183218207347,-4.746197021154246e-05,1.5706738321513996,0.7853020685627635,0.46684985250509403,0.6067902204774707,-1.1235025316708025,-1.8981306518175218,-0.4992979566926879,2.4185435628246275,2.751248826956838],[0.4000994488082876,3.1248166649558183e-05,-0.7853727773099727,-9.919554676289215e-06,-2.356173862272213,-5.637149027567018e-05,1.570662088617911,0.7853021560982716,0.47477880520910687,0.6035831554762152,-1.127526765043989,-1.8989723477849483,-0.49935059979514607,2.4133222552063875,2.751269052210025],[0.40031271584359,3.3024320634041644e-05,-0.7853688888371544,-2.133317649394423e-05,-2.356165654151877,-6.389941294340892e-05,1.5706524168785685,0.7853022053487748,0.4816555201351457,0.600812074816706,-1.1310268903256773,-1.8996837813042133,-0.4993945924717285,2.408786808158887,2.751285646036026],[0.4004797654109459,3.4237574057127224e-05,-0.7853662232777161,-3.0070656280616187e-05,-2.356159408386516,-6.925904419641691e-05,1.5706456789642993,0.7853022342717872,0.48656373174774487,0.5988354554738204,-1.1335296935056745,-1.9001867309131246,-0.49942511118019195,2.4055475689526298,2.751297269307352],[0.4006615120604058,3.50770318799012e-05,-0.7853621613044216,-4.1855057414027286e-05,-2.356152382721987,-7.50113665765931e-05,1.570639137290077,0.78530221106691,0.49152928088857195,0.5968214466770304,-1.1360702969475178,-1.9007096530027845,-0.49947140916838234,2.4022541405450473,2.751282139168888],[0.4007927188298156,3.516776937756223e-05,-0.7853574341320144,-5.232966558167038e-05,-2.3561480965589827,-7.936001782352095e-05,1.5706346214374276,0.7853021396709713,0.4949715969459624,0.5953365559585891,-1.1378430304692164,-1.901109716495708,-0.499546499341956,2.39992186325623,2.7511349872509863],[0.40092352323606256,3.497199665462108e-05,-0.7853515129111477,-6.421351435672405e-05,-2.3561446573248843,-8.397275635420552e-05,1.570629975426925,0.7853020166270301,0.49834259227816036,0.5936431680758852,-1.139607946779306,-1.9015813167411033,-0.49970838677293516,2.397526365160964,2.7506458466979793],[0.40101097625814724,3.477969344951911e-05,-0.7853470093251466,-7.251975060952447e-05,-2.3561431052408035,-8.726276236042946e-05,1.5706265765579124,0.7853019031281384,0.5005577229121576,0.5922090266781828,-1.140810220115474,-1.9019859368026688,-0.4999288543937762,2.3958053939673114,2.7498773570687454],[0.40109240582870315,3.455012908191823e-05,-0.7853420434796038,-8.000759595764969e-05,-2.3561427989232477,-9.061997690275241e-05,1.5706229380829986,0.7853017674705189,0.5025347462544545,0.5903432545234997,-1.1419667724272482,-1.902503730666831,-0.5003299119388769,2.3940030925336155,2.74838943921631],[0.40114330867908804,3.454882375506922e-05,-0.7853393726470753,-8.361593205940618e-05,-2.3561428799222015,-9.289389013155304e-05,1.5706201952975503,0.785301670124916,0.5036402622293202,0.5885921119150903,-1.1427231404182403,-1.9029898957567566,-0.5007967109259774,2.3926761832345926,2.746604287212591],[0.4011861604763568,3.4328845231770283e-05,-0.7853374731276285,-8.563248819776255e-05,-2.3561429992708987,-9.50889415411476e-05,1.5706173326311752,0.785301564542763,0.5043566894675037,0.5861971176248392,-1.1434138161210134,-1.9036550932719472,-0.5015295911142684,2.391248095081095,2.7437561043858554],[0.40120864856879895,3.396473003729434e-05,-0.7853365394903794,-8.575120752471155e-05,-2.356143357985565,-9.655468118401975e-05,1.5706152206371193,0.7853014852562097,0.5044676030982145,0.5839081383391538,-1.1438262157278456,-1.9042890679768207,-0.502297341305206,2.3901636585981856,2.740743488750338],[0.4012223427599711,3.342142529409134e-05,-0.785336044822699,-8.440198322823255e-05,-2.3561440400876528,-9.794413823609829e-05,1.5706129637214865,0.7853014013349995,0.5040406290536987,0.5807567084118389,-1.1441450476882429,-1.9051578567000886,-0.5034213035198065,2.3889553545988567,2.73630603042044],[0.40122459876104477,3.293777639131976e-05,-0.7853360809142095,-8.23161939273117e-05,-2.3561447305988543,-9.879199658520879e-05,1.5706112885917471,0.78530134139448,0.5032332707732865,0.5777581219126219,-1.1442772166004072,-1.9059802335249265,-0.5045363435598452,2.3880035222424123,2.73188590860706],[0.40121849453827113,3.2373977464001954e-05,-0.7853365805423858,-7.898853810834511e-05,-2.3561455881348965,-9.93055886658339e-05,1.570609505247426,0.7853012856809028,0.5017400118830099,0.5736769990069449,-1.1442901840319104,-1.907093743935764,-0.5060979456739847,2.3869034619010736,2.7256784059037873],[0.4012076457076321,3.194385216254002e-05,-0.7853372453764906,-7.575251580822453e-05,-2.356146336142214,-9.92234048576605e-05,1.5706081841113904,0.7853012537351812,0.5000690605008625,0.5698478843303698,-1.144188399880787,-1.908133591019576,-0.5075928463882857,2.3860057086813646,2.7197243998043317],[0.4011899603840602,3.1723604952377906e-05,-0.7853372998399943,-7.186776602058982e-05,-2.3561481914497815,-9.891924009072641e-05,1.5706067676974287,0.7853012129170738,0.49755210082840523,0.5646910149457816,-1.1439310719804074,-1.909528263957257,-0.5096377201540612,2.384931143876621,2.7115681285392617],[0.40117526137823006,3.175718971672946e-05,-0.7853366782946631,-6.841055653288846e-05,-2.3561511326746203,-9.913731458464982e-05,1.5706054423405955,0.7853011935787397,0.4949818443059876,0.5598161522679953,-1.1435918804175829,-1.9108430130531802,-0.5115937831310193,2.3840152496012568,2.7037570655720367],[0.40115480116306734,3.1492711571107954e-05,-0.7853397825247994,-6.391820693771744e-05,-2.3561503117600786,-9.80039435539233e-05,1.570604414349127,0.7853012141331256,0.4914047424013368,0.5533850514952225,-1.1431000521277952,-1.9125694429768703,-0.5141860424158481,2.382894793856652,2.693398662062172],[0.40113515211672807,3.121488073054287e-05,-0.7853420437165761,-6.050322604747573e-05,-2.356149518968957,-9.658368898990288e-05,1.5706037513054167,0.7853012241779909,0.48803065182230604,0.5475377297045657,-1.142608331370052,-1.914134580633406,-0.5165545105141052,2.3819365402525907,2.683929335924606],[0.4011095201514211,3.092142489975231e-05,-0.7853441341259044,-5.658298244380145e-05,-2.3561490418835884,-9.472927666075413e-05,1.5706030308955377,0.7853012261473958,0.48351772732429227,0.5399217511180194,-1.141920558527193,-1.9161690152520046,-0.5196513471236229,2.3807477386567277,2.671542970021569],[0.4010871667783847,3.0731813095342976e-05,-0.7853457611865527,-5.3547546207649376e-05,-2.3561489255476973,-9.324359411253943e-05,1.5706024901956706,0.7853012213423275,0.47937448272611644,0.5330662447510347,-1.1412675058843238,-1.9179970309898982,-0.5224471179621102,2.3797195771045576,2.6603568358190275],[0.40105996473230426,3.059546957248763e-05,-0.7853482517963875,-5.015652973174457e-05,-2.3561489720603377,-9.164973863114488e-05,1.5706018956534396,0.7853012138223728,0.4739476422886371,0.5242187102177767,-1.1403912174878454,-1.9203522809335103,-0.5260632734313955,2.3784341551473593,2.6458845902231345],[0.4010374515614544,3.05530796150919e-05,-0.7853507716045904,-4.7565016123815895e-05,-2.3561489604419275,-9.050298169780209e-05,1.5706014596312614,0.785301209054002,0.4690492535195842,0.516322888875488,-1.1395866006027533,-1.9224513943876258,-0.5292957948963959,2.3773156836337956,2.632945097897864],[0.40101104593426307,3.060191013490619e-05,-0.7853539781974418,-4.480740577168481e-05,-2.3561489347714737,-8.94094427504539e-05,1.5706010034422793,0.7853012051495861,0.46272282988647984,0.5062132636371663,-1.1385336430180568,-1.9251361055971508,-0.5334400045193849,2.375912149809108,2.616353569332607],[0.40098984274343685,3.073213161680834e-05,-0.785356551560044,-4.281979934037628e-05,-2.3561489123316672,-8.877566480043004e-05,1.5706006720359353,0.7853012041072622,0.45707798282034584,0.4972532480079831,-1.1375844145322196,-1.9275133466309762,-0.5371167099743667,2.374688116583394,2.601631887017169],[0.4009678293463362,3.1234416620809716e-05,-0.7853581892052962,-4.147966166436557e-05,-2.3561517547954467,-8.973824950477188e-05,1.57060010193952,0.7853011792725983,0.449811116395606,0.48576942100505077,-1.1363305952673917,-1.930560247132019,-0.5418383962861075,2.3731398812425426,2.5827235140588636],[0.40095182961532644,3.1562953527703756e-05,-0.7853611059232238,-3.9839792666289366e-05,-2.3561508075978197,-9.018412105727745e-05,1.5705998074174194,0.7853012125926926,0.44335469051866283,0.4756144723041503,-1.1352259932676294,-1.9332508958624601,-0.5460111380343463,2.3717854302969146,2.5660121224690347],[0.4009325309773895,3.193478720453942e-05,-0.7853630780276473,-3.848460126699414e-05,-2.3561488470663554,-9.027734484956332e-05,1.5705997143682335,0.7853012536743309,0.4351663825789258,0.4627832554360315,-1.1338294621430056,-1.9366475206537632,-0.5512844507430218,2.3700871743421565,2.5448923364132563],[0.4009162460983484,3.226007631147057e-05,-0.7853634058198833,-3.772822206218998e-05,-2.3561477196849334,-9.042782125621967e-05,1.570599649992213,0.7853012797765578,0.4279793214233184,0.4515501323777137,-1.1326006665933397,-1.9396196399295538,-0.5559025180277593,2.368610265202829,2.526395996235632],[0.40090027793188326,3.2757258958365295e-05,-0.785363529862094,-3.7033171886780975e-05,-2.3561467375223035,-9.075728790795018e-05,1.5705995860934896,0.785301303293007,0.42046172589537256,0.43982560718608416,-1.131314676453497,-1.9427245429787587,-0.5607242424236891,2.367081339768859,2.5070845557574892],[0.40089022579369904,3.2739525150546834e-05,-0.7853558296202476,-3.832890124405072e-05,-2.3561564310096355,-9.288912159478636e-05,1.5705986786074815,0.7853013319658005,0.41080309671983734,0.42474273797270695,-1.129569286439593,-1.946719772461582,-0.5669497456587044,2.3651378653699746,2.482146635631276],[0.40088483815154374,3.350803495115925e-05,-0.7853600658795528,-3.722845141616074e-05,-2.356153120875522,-9.322476623798509e-05,1.570598472509296,0.7853014477752063,0.40231449536731945,0.41152840682828656,-1.1280963559754262,-1.950213172496791,-0.5723855964477587,2.3634425163561827,2.4603704468692333],[0.4008739440724805,3.428466804145103e-05,-0.7853649617084348,-3.717070431756189e-05,-2.3561471288238534,-9.346402713870053e-05,1.5705989041713708,0.78530152108218,0.3917068550553952,0.39505460427363165,-1.126284565154393,-1.9545652987618696,-0.5791600157329053,2.3613233748552003,2.4332353260551836],[0.40086042075773887,3.4717871843218665e-05,-0.7853667155990097,-3.7893895812947474e-05,-2.3561437997492285,-9.408728175098769e-05,1.570599234963049,0.7853015390287058,0.38252833280682424,0.38081077658979195,-1.1247162975542866,-1.9583240685417933,-0.5850171253916107,2.3594988805013317,2.4097728887746195],[0.40084095898939986,3.53396028811898e-05,-0.7853678732265401,-3.795779337490767e-05,-2.3561418106713297,-9.503326772892322e-05,1.5705993528035647,0.7853015597032815,0.37110483175976783,0.36309507651461015,-1.1227629078485244,-1.9630040961940955,-0.5923043168056149,2.3572218643296785,2.380583567377907],[0.40082194018973033,3.6139603057500964e-05,-0.7853676997527547,-3.9056108794013586e-05,-2.356140494507921,-9.58050007359995e-05,1.5705995013622407,0.7853015688738245,0.3612411548646918,0.347804462867696,-1.1210688342336688,-1.9670391104714684,-0.5985945363193695,2.355264084009514,2.355386245501684],[0.40079714155046736,3.7172478566705256e-05,-0.7853675384325017,-4.0095084804584106e-05,-2.3561397313921697,-9.657092796277878e-05,1.570599551255638,0.7853015951902057,0.3489893631938797,0.3288159339326913,-1.1189596365009107,-1.9720522967519396,-0.6064069474621758,2.352834665017639,2.32408885063243],[0.4007752923785938,3.808423092598803e-05,-0.785367628284822,-4.083082095973032e-05,-2.3561393263125434,-9.708257712614424e-05,1.5705995340651353,0.7853016287906069,0.3384320047665775,0.31245675740217976,-1.1171394098328185,-1.9763707157675199,-0.6131383488245069,2.350740517092701,2.2971225836260345],[0.4007476935234084,3.915160630057803e-05,-0.7853676539768574,-4.216834474513619e-05,-2.356138945808224,-9.762947418812927e-05,1.57059951041389,0.7853016750550045,0.32534348732161045,0.2921778514725696,-1.1148787526138042,-1.9817172410558286,-0.6214851900857334,2.348149115418686,2.263691796984297],[0.4007241220370613,4.0019248597664566e-05,-0.7853678459288546,-4.296066718388212e-05,-2.3561386964115396,-9.795272083665791e-05,1.5705994611447867,0.7853017266837992,0.3140795118471931,0.2747367641952198,-1.112934712003993,-1.9863305067339996,-0.6286638413506431,2.3459111587937693,2.234932365916423],[0.4006939813624761,4.07602022118901e-05,-0.7853681104676269,-4.453787051339046e-05,-2.3561384233934266,-9.831518793835961e-05,1.57059942980182,0.7853017916397464,0.30014255520975136,0.25314796159999076,-1.110521216015544,-1.9920279172646387,-0.6375480550505964,2.3431531316864773,2.1993373881061724],[0.40066854165746296,4.130466646557849e-05,-0.7853684361797709,-4.580826103927788e-05,-2.3561383012304074,-9.855452482888489e-05,1.5705993638955351,0.7853018542019407,0.28817175520650573,0.23460689501821275,-1.1084476153402656,-1.99691986056539,-0.6451799311983717,2.3407846011289584,2.168765063037934],[0.40063711689158477,4.197961499640937e-05,-0.7853686754953667,-4.7711938474518066e-05,-2.3561378961735024,-9.88096197257549e-05,1.5705993523866781,0.7853019297552296,0.27337921913972996,0.21169630372816245,-1.105881747966987,-2.0029677213849086,-0.6546084661034798,2.3378604827139804,2.130986308553324],[0.4006046418963453,4.2393754624320306e-05,-0.7853687383711151,-4.969108183881318e-05,-2.3561376241494814,-9.902966570205909e-05,1.5705993650075467,0.7853020088694106,0.258117732230176,0.18806102936489616,-1.1032321001511838,-2.0092132157288645,-0.6643362159681835,2.3348350388248957,2.0920080667342926],[0.40057603276081377,4.2711191468213434e-05,-0.7853689370022283,-5.131735983931431e-05,-2.3561370450592127,-9.918594044325274e-05,1.5705994198529933,0.7853020758026902,0.24503968445657054,0.16781313443977983,-1.1009644895229307,-2.014570067656002,-0.6726692555073607,2.332240375688737,2.0586143591088333],[0.4005393851835778,4.258731273989425e-05,-0.7853676279149195,-5.302799476556585e-05,-2.3561379985955604,-9.94615539516175e-05,1.5705995384119404,0.7853021591515982,0.2288916732699194,0.1428160885914367,-1.0981536324307912,-2.02118093900412,-0.6829662887312209,2.3290369867830876,2.0173610793614065],[0.4005102077244278,4.271046108238103e-05,-0.7853658182220836,-5.4605361658008496e-05,-2.356140491435134,-9.977491525023401e-05,1.5705989880836482,0.7853022820125491,0.2149705304879023,0.12124033849186946,-1.0957068231100116,-2.0268836125867664,-0.6918472264813316,2.3262851391658983,1.9817574774225057],[0.4004721526690194,4.354571763859536e-05,-0.7853703900984338,-5.525239229703428e-05,-2.3561364061414314,-9.962508733401205e-05,1.5705992122993777,0.7853023934555096,0.1978249611153975,0.094692283964709,-1.0927393377392294,-2.033886059010605,-0.7027638139486819,2.322892512229286,1.9379848508407533],[0.40043587525840163,4.387966923021083e-05,-0.7853728834396166,-5.547551475514653e-05,-2.356133297385678,-9.956718938230392e-05,1.5705995448105368,0.7853024298089688,0.18318742219499112,0.07203202966857106,-1.0902130035587378,-2.0398615080418243,-0.7120782034524532,2.319996013001923,1.9006269925760046],[0.4003867433419916,4.3604528549315715e-05,-0.7853744706304412,-5.4022454840444495e-05,-2.356130657970069,-9.952916636980613e-05,1.5705998705477955,0.7853024171371393,0.1652050916098118,0.04419411102123799,-1.0871104127790376,-2.04720283245543,-0.7235198808655692,2.3164369889614913,1.8547332746427279],[0.40034130519914607,4.141026135823662e-05,-0.7853766007420064,-5.0543787913902546e-05,-2.356129387949057,-9.808726541274424e-05,1.5706000757485203,0.7853023909720142,0.14987069081215754,0.020454840579391877,-1.084463931273112,-2.0534642184041014,-0.7332812740107494,2.3134013982994412,1.8155948806532032],[0.4002816793614354,3.5659496169803125e-05,-0.7853900731542164,-4.289614367438557e-05,-2.356130927055187,-9.053533335972044e-05,1.5706003917478852,0.7853023700369257,0.1310492109015722,-0.008684047122320572,-1.0812145965882902,-2.0611508275909753,-0.7452745758990534,2.3096747757214886,1.7675524507159714],[0.40022805888985896,2.8229069485967358e-05,-0.7854020235145407,-3.359816719604203e-05,-2.3561434474872938,-7.747670962592405e-05,1.5706025281723628,0.7853022246763567,0.11501009699309751,-0.033516713642316065,-1.0784444927326433,-2.0677022167147383,-0.7555029805375498,2.3064984752453777,1.7266080529374577],[0.40017079488638735,1.845194753593151e-05,-0.7854093371719988,-2.2801556606391956e-05,-2.356158179676707,-5.7264342249123884e-05,1.5706127617501304,0.7853017744928154,0.09862406566639721,-0.05888622831703186,-1.0755974039596963,-2.074401023359451,-0.7659594312701531,2.3032510597510845,1.6847452563784082],[0.4001029953044786,7.13712466116382e-06,-0.7854124864977965,-1.0999528564241774e-05,-2.3561792124256034,-3.148164891594458e-05,1.5706390693981054,0.7853006109588271,0.078301657552207,-0.09038296363266714,-1.0720142065796803,-2.082738395716725,-0.7789449467493824,2.2992215414545423,1.6327300735705605],[0.40004367115887146,8.362150051245505e-07,-0.7854247426554025,-9.925554123927034e-07,-2.356184520277035,-1.2538692557055108e-05,1.57066180479506,0.7852998661958018,0.06092042592163107,-0.11730609395137101,-1.0690055320975826,-2.089844235686661,-0.7900071662284404,2.2957776485279267,1.5883396011602964],[0.3999626244874206,-5.839590854296379e-06,-0.7854373872050485,8.830468712324348e-06,-2.3561871248289266,6.804534265618677e-06,1.5706856807629699,0.785299266923509,0.039664919227089514,-0.15021554595537484,-1.0653556303830458,-2.0985176937496184,-0.803522571345307,2.2915675284339914,1.534102320194791],[0.3998716582415348,-1.176525755758396e-05,-0.7854450839603242,1.704004441593774e-05,-2.3561911001645086,2.2807369798465165e-05,1.570705522952993,0.7852988672757721,0.01798392234228811,-0.18378511067919812,-1.06163472053191,-2.107363931681232,-0.8173133493661632,2.287272692451881,1.4787780949526055],[0.3997895821158948,-1.602937649662679e-05,-0.7854493467415689,2.307985039167313e-05,-2.3561949208132753,3.4050156305031656e-05,1.5707194107581393,0.7852986420773604,-0.0004111641031772713,-0.21227033128887832,-1.0584751202897933,-2.1148714004736116,-0.8290190780510434,2.283628089182346,1.4318300350634499],[0.39968497279383325,-2.0362865243777585e-05,-0.785453120862794,2.958405066783281e-05,-2.3561994469096086,4.547163572557098e-05,1.570733433833277,0.7852984672029651,-0.022884153063871145,-0.24707488571928884,-1.0546111107920497,-2.1240459832453,-0.8433257164735797,2.2791746231242223,1.3744622622936964],[0.3995935740610613,-2.338762048432638e-05,-0.7854556281329579,3.4475753652586144e-05,-2.356202886227317,5.3540486948349663e-05,1.5707432783621065,0.7852983827935671,-0.04194733411533785,-0.2766023266526238,-1.0513305643971818,-2.1318305318369526,-0.8554660067011988,2.275396159069968,1.3257895579035672],[0.3994797656962383,-2.642205836381025e-05,-0.7854580806393378,3.978178048549583e-05,-2.3562065809630126,6.17620711892868e-05,1.570753241862989,0.7852983361291723,-0.0652323760822971,-0.3126738203468875,-1.047320096059518,-2.141341454778842,-0.8702998659152511,2.2707800431198915,1.2663261479981687],[0.3993820683093777,-2.823069719877683e-05,-0.7854602214957592,4.3583623345186285e-05,-2.356208916686285,6.763798199193467e-05,1.5707602522184576,0.7852983373900512,-0.08497501648372022,-0.3432611514401341,-1.0439207078416721,-2.1494053092995067,-0.8828789589587307,2.266865882605698,1.215907191956616],[0.3992623819809906,-2.8268221133320125e-05,-0.7854603473036993,4.4104747333092054e-05,-2.356213687499151,7.262995029353203e-05,1.57076696367723,0.7852982833110769,-0.10915955765032209,-0.38074284522566443,-1.0397323787435728,-2.159298893504493,-0.8983076647480743,2.2620685651330943,1.1540921766795564],[0.3991608326475664,-2.4436651218776046e-05,-0.7854683179500992,4.479512596548544e-05,-2.356209484043773,7.369745117405142e-05,1.5707710999328006,0.7852983700911502,-0.12952984813240132,-0.4122963227186418,-1.0362676540573699,-2.1675913319613436,-0.9112689877338194,2.2580330719891366,1.1021509126563156],[0.3990358412581683,-1.9195056421988363e-05,-0.785474112937201,4.447765980205779e-05,-2.3562047344441246,6.989567286411571e-05,1.5707728767541476,0.7852985764880418,-0.1540553859674973,-0.4502758097082046,-1.0321244655033845,-2.177553389908265,-0.9268616231900277,2.2531766585198767,1.0396704172232862],[0.3989311772466135,-1.4909930460559198e-05,-0.7854713025461871,4.386119783657275e-05,-2.356199979736708,6.364967528936437e-05,1.5707722555006594,0.7852988040364748,-0.17449075020489163,-0.4819199437165681,-1.0286787145376735,-2.1858471702421154,-0.9398508974014603,2.2491307134358416,0.9876256543205214],[0.3988084790296972,-9.827312459436808e-06,-0.7854573552821073,4.308230589803076e-05,-2.3561896522217896,5.383987899660177e-05,1.570769641585697,0.7852991296755921,-0.19893616499913339,-0.5197746945529942,-1.0245571751610811,-2.1957653412427067,-0.9553882850968592,2.244291049395747,0.9253750839189302],[0.39871108025724433,-7.4002126888377395e-06,-0.7854445093968478,4.2674065610763924e-05,-2.356181911032048,4.49183162970353e-05,1.5707647357147687,0.7852994639275268,-0.21922037156681717,-0.5511863050456943,-1.0211201352349841,-2.2040030358251217,-0.9682972442707569,2.2402727139919847,0.8736835119188553],[0.39862000248690466,-6.134759674461067e-06,-0.7854338731818632,4.2436360765511355e-05,-2.3561812065782566,3.8197039864680466e-05,1.5707580302866302,0.7852997699233698,-0.23952234180759002,-0.582643834695611,-1.017648575593857,-2.21227330057308,-0.9812290242133993,2.2362485637957157,0.8218726212128599],[0.3985223013882444,-1.7810515871227931e-06,-0.7854261034044634,4.2833758152902825e-05,-2.3561775275696384,2.9716562580147728e-05,1.5707488426900784,0.7853000699118843,-0.26377847770198043,-0.6202258117060856,-1.0135168005698083,-2.222137026055054,-0.9966609566928936,2.231439281318892,0.7600266637169603],[0.3984527743791573,3.1390208690863103e-06,-0.7854216223326722,4.349758777142532e-05,-2.356170399613066,2.013701165450569e-05,1.5707394893523903,0.7853003214295263,-0.28375101759273696,-0.6511536406723066,-1.0101414132287003,-2.230228485547213,-1.0093512062250547,2.2274816175735213,0.7091767246766659],[0.3983833895615334,6.367926960531711e-06,-0.785409869464715,4.255311970096736e-05,-2.356166741576496,8.734638425529334e-06,1.5707272766760847,0.7853005510837886,-0.30740901147636135,-0.687798172299587,-1.0061161342519775,-2.2398343259201656,-1.0243942312770742,2.222787654694554,0.6488843068452617],[0.3983392829283033,9.105789615116387e-06,-0.785399745770599,4.132456389082016e-05,-2.3561640004698523,-4.2199588599662886e-07,1.570716347144141,0.7853007224490212,-0.32683237704817797,-0.7178819980948307,-1.0028063153737965,-2.2477202668800973,-1.036745442689145,2.2189181072100936,0.5993888358675831],[0.3983025007455196,1.0668299191213508e-05,-0.7853887111709904,3.909498942882233e-05,-2.3561647099211713,-1.0219742250163318e-05,1.5707027463047563,0.785300882416761,-0.34978761323798935,-0.7534377968910777,-0.9988712549818304,-2.257055047526268,-1.0513561019669488,2.214351008118569,0.5408517400901357],[0.39828404517010707,1.1504940142093519e-05,-0.7853804642168644,3.7025472539485066e-05,-2.3561666593500825,-1.5697047436420462e-05,1.570692866033333,0.785300933376185,-0.3687169026685268,-0.7827717114343771,-0.995602672174018,-2.2647753523277356,-1.0634101111115335,2.2105862130042224,0.4925473202593796],[0.3982795826970593,1.3794077726038208e-05,-0.7853735806293841,3.513053974731462e-05,-2.3561652268794493,-2.230921947221327e-05,1.5706816033270434,0.7853009760458954,-0.3910344228985243,-0.8173405557391642,-0.9917631175799791,-2.2738535690107162,-1.0776111235022294,2.20614770774749,0.43564999664072035],[0.39829297748587117,1.525342535983212e-05,-0.7853660502291326,3.251178800656575e-05,-2.356165233289938,-2.8539467337429367e-05,1.5706707583378738,0.7853009894227752,-0.41288916555543936,-0.8511909027612202,-0.9879923066322431,-2.2827480259717947,-1.091519969486732,2.2018040940251122,0.3799254663654469],[0.398316789926839,1.597438961395117e-05,-0.7853599129591565,2.9852310242377888e-05,-2.3561660331286314,-3.303761388383037e-05,1.5706622928210632,0.785300981301675,-0.43074485149681063,-0.8788473365540249,-0.9849011690830548,-2.290021242158954,-1.1028868286736593,2.1982569196699937,0.33438675489504555],[0.3983478078715611,1.4890896869408587e-05,-0.7853549142098645,2.603018053075781e-05,-2.356169495873556,-3.547792839278867e-05,1.5706554361877354,0.7853009181376678,-0.4483911763229225,-0.9061915429298087,-0.9818156125928049,-2.297242084261204,-1.1141401630784287,2.1947561334005785,0.28930612837408154],[0.39838293793152385,1.2917148616151004e-05,-0.7853524679174094,2.1824282127805923e-05,-2.3561750666281864,-3.540080749427061e-05,1.570651015673738,0.7853007894522419,-0.46594547451180973,-0.9334042802892982,-0.9787219914842162,-2.3044532098759425,-1.1253564492720978,2.1912684692689,0.24439389109357806],[0.3984297977600702,1.449571275546677e-05,-0.7853527590180277,2.0546215418574478e-05,-2.3561726069344537,-3.63467158495018e-05,1.5706471574574272,0.7853007257527067,-0.4831711857216389,-0.9600811730135117,-0.9757282818201568,-2.311471413449993,-1.1363199260758259,2.187850943587922,0.20047278728301665],[0.3984951949825888,1.4437320593252741e-05,-0.785350133001224,1.7361141342787933e-05,-2.3561727621763753,-3.7593808059550185e-05,1.570642952674364,0.7853006469707854,-0.5034724571030055,-0.9915258635686331,-0.9721808177017858,-2.319763424919709,-1.1492543092975465,2.1838262715402714,0.1486588661432835],[0.39856003754814096,1.5220283631838365e-05,-0.7853479499415725,1.5289451820123967e-05,-2.3561717822238606,-3.944138731742951e-05,1.5706388449706716,0.7853006327509835,-0.5199762727898731,-1.0170773470142478,-0.9693075329419275,-2.3264847305580996,-1.1597563274200329,2.1805544304416373,0.10658753729605377],[0.3986477249772279,1.5499523853211035e-05,-0.7853439859407265,1.1944637808273035e-05,-2.356171642411456,-4.195333790841499e-05,1.5706334758483034,0.7853006329318427,-0.5392685215429363,-1.0469444591585537,-0.9659410381837048,-2.334347498579195,-1.1720351992775062,2.1767304673156835,0.05739842160504887],[0.39872720362797515,1.5357268578397616e-05,-0.7853406058976298,8.649550893115401e-06,-2.3561718868341197,-4.382422994394964e-05,1.5706289748793851,0.7853006338803273,-0.5549241166347998,-1.0711816783479842,-0.9632016467762704,-2.3407352907296985,-1.1820025670212053,2.1736276527768985,0.01746963257164398],[0.3988280436609313,1.4910401532867727e-05,-0.7853372235068109,4.405865061805356e-06,-2.3561720710769904,-4.552726203145617e-05,1.5706239599928793,0.7853006230143856,-0.5732175260279718,-1.099503204242724,-0.9599925228860914,-2.348208050408805,-1.1936529958606221,2.1700022520498092,-0.029201036171284472],[0.39891519815528603,1.4429331691314069e-05,-0.7853351692429135,8.504234585834756e-07,-2.3561719608094305,-4.647831421200247e-05,1.5706203811550092,0.7853005982390471,-0.5880571745773495,-1.1224777255291125,-0.9573840535535472,-2.354275611184824,-1.2031059554176007,2.1670616165314676,-0.06706852800665078],[0.39902180279398963,1.3726788344560351e-05,-0.7853334702446464,-3.353323588300526e-06,-2.356171479605424,-4.707642678744696e-05,1.570616766842044,0.7853005580624522,-0.6053877392279968,-1.1493089948491084,-0.954332156919051,-2.3613682706268846,-1.2141484874556838,2.1636274718995887,-0.11130342117325809],[0.3991291213867609,1.3006273581391594e-05,-0.7853325678485116,-7.296183148912284e-06,-2.3561706998809924,-4.7183911882237646e-05,1.570613820170088,0.7853005141999795,-0.6222047831668474,-1.1753449315277256,-0.9513666807697548,-2.368255649958072,-1.2248652560121978,2.1602954792214857,-0.1542331481864669],[0.3991945556269068,1.0406692381572665e-05,-0.7853339528069351,-1.2305635272818244e-05,-2.3561737720239857,-4.6126381771182306e-05,1.570613991383579,0.7853003914298081,-0.6332739241494294,-1.1925057329817326,-0.9493849957604867,-2.3728434716391,-1.2319618033732824,2.158098367334998,-0.18263791270943833],[0.3992731233136944,9.635248589556261e-06,-0.7853358566590157,-1.5068653115108606e-05,-2.3561726177485003,-4.3896047037644675e-05,1.5706159124366474,0.7853002712585254,-0.6469332226630746,-1.2136640726715728,-0.9469647642970171,-2.3784632451523007,-1.2406774749057272,2.155394519961176,-0.21754940326208896],[0.39936819572604076,9.969529435401951e-06,-0.7853384468543171,-1.5796848048585046e-05,-2.356170118666374,-4.208356455785229e-05,1.5706170341260324,0.785300239387989,-0.6628966235978605,-1.2383743214031566,-0.9441526668011805,-2.3849962893837335,-1.2508425752343089,2.152233315876464,-0.2582728560059988],[0.39944945929299164,1.0159199993027465e-05,-0.7853390057811971,-1.6418800972876838e-05,-2.3561685689106646,-4.155044122150317e-05,1.5706165642078358,0.7853002646271255,-0.6757633382071154,-1.2582856808087686,-0.9418887563836178,-2.3902532494561983,-1.2590327541367214,2.149686937618267,-0.2910830134356415],[0.39954729511487685,9.976738594997362e-06,-0.7853382971431806,-1.7925638000875118e-05,-2.356167463265925,-4.139943943043279e-05,1.5706149499746893,0.7853003075565778,-0.6906839719172434,-1.2813760594348174,-0.9392600585591979,-2.396354892269618,-1.2685329897614117,2.14673369939732,-0.3291412317024143],[0.3996275928433188,9.63917776019438e-06,-0.785337596520798,-1.951265033998593e-05,-2.3561666438771387,-4.1323852445443305e-05,1.5706131674015034,0.785300337968468,-0.702695122884375,-1.2999650247774763,-0.9371409448447015,-2.4012722953188392,-1.276183154719861,2.1443559632555385,-0.3597879978870737],[0.3997200523544943,8.790355575575678e-06,-0.7853369144281742,-2.200129267786455e-05,-2.3561653737576163,-4.094087292868576e-05,1.5706113101035537,0.7853003416863811,-0.7166342294961734,-1.3215444181007643,-0.9346740254769972,-2.406995329709755,-1.285072393780387,2.1415985384173033,-0.3953931806463682],[0.3997922652251516,8.278806192192888e-06,-0.7853371322226664,-2.365514966761767e-05,-2.356164420395924,-4.023186470334989e-05,1.570610113676248,0.7853003291703176,-0.7279014596940102,-1.3389868297584,-0.9326809913042623,-2.411622741685203,-1.2922537464651802,2.1393659982835582,-0.42416334925977556],[0.3998756645932058,7.992592258430398e-06,-0.7853380770340301,-2.4720778685890423e-05,-2.3561628911482244,-3.9478753122923526e-05,1.57060842877568,0.785300326258095,-0.7409324248705283,-1.3591557819042872,-0.9303780360935646,-2.4169665594537584,-1.3005565190204604,2.136785952447777,-0.4574246954435921],[0.3999419284502991,7.689846755239282e-06,-0.7853386207597381,-2.5585000591966058e-05,-2.3561617424982777,-3.8899454632923086e-05,1.57060715195084,0.7853003139719045,-0.7513848140010789,-1.3753341435800275,-0.9285299996833924,-2.4212552824657934,-1.3072173957616406,2.1347162626159353,-0.48410849892647373],[0.4000142840566325,6.919589052001576e-06,-0.7853392024452115,-2.7137149664914906e-05,-2.3561602214571087,-3.779026296952815e-05,1.5706066250681565,0.7853002686039926,-0.7635181662064086,-1.3941224127541196,-0.9263790772908359,-2.4262516762538846,-1.314959819064789,2.1323129475860996,-0.5151209865404996],[0.40007114963357343,6.731055182773201e-06,-0.7853402880573129,-2.7396058790446795e-05,-2.35615910907166,-3.6942524991911156e-05,1.5706058120748354,0.7853002587762745,-0.7732352188979644,-1.4091633266181618,-0.9246607821155104,-2.43024088470884,-1.321152457720629,2.1303889270591285,-0.539929366837001],[0.4001352731726788,6.465340245014285e-06,-0.7853412479867599,-2.762052596181356e-05,-2.3561578996154005,-3.6031150849930706e-05,1.5706047665940877,0.7853002511490769,-0.7844136218102717,-1.4264665592649062,-0.9226837639124632,-2.434831562896966,-1.3282772703854786,2.128175333617034,-0.568472099820268],[0.40018492348044016,6.20353501907394e-06,-0.7853419212534237,-2.779977509221028e-05,-2.3561569663767816,-3.5290620576707456e-05,1.5706040219447772,0.7853002414888937,-0.7933320211666188,-1.4402723767677328,-0.921105890995228,-2.438496530051117,-1.3339627035158543,2.1264090298144245,-0.5912485348181153],[0.4002396870695258,5.879467689607465e-06,-0.78534276355573,-2.7918811758589397e-05,-2.356155856673844,-3.436666744780292e-05,1.570603272619994,0.785300229888861,-0.8035639107627518,-1.4561125610407486,-0.9192950911571273,-2.4427038732935187,-1.340486673435381,2.1243823572873493,-0.6173842321953656],[0.4002890622662462,5.5632357305122865e-06,-0.7853436794648041,-2.788893318045221e-05,-2.35615475274232,-3.3386436424092254e-05,1.5706026556615404,0.7853002200517184,-0.8132894704316821,-1.4711699902631301,-0.9175735092457519,-2.446705569042991,-1.3466889027773221,2.122455718118774,-0.6422310262213039],[0.4003261298686027,5.317941134115742e-06,-0.7853445171099144,-2.7722385474696362e-05,-2.3561538615601343,-3.2533681802432995e-05,1.5706022745449535,0.7853002142527052,-0.8210109623558273,-1.4831253686302757,-0.9162065280111841,-2.449884164682676,-1.3516137495209601,2.120925951553605,-0.6619604927098575],[0.40036584846547285,5.047675224604256e-06,-0.785345918674232,-2.7360739470157964e-05,-2.3561528816447233,-3.1488611493441875e-05,1.570601859102097,0.7853002100980743,-0.8298209970491359,-1.4967669550878517,-0.9146467557240608,-2.4535124569761453,-1.3572335424666808,2.1191803633190607,-0.6844740035994962],[0.4003953928789556,4.8794507633435784e-06,-0.7853475653874971,-2.6841774308782778e-05,-2.356152165520678,-3.0651916194051285e-05,1.5706017500889613,0.7853002006568144,-0.8367780889712155,-1.5075393337301057,-0.9134152335941813,-2.456377031189642,-1.3616711717435885,2.11780222720119,-0.7022515287921871],[0.40042613585446035,4.612655159963666e-06,-0.7853502227149939,-2.6310890919552535e-05,-2.3561513044454667,-2.9596817412819675e-05,1.5706019140955862,0.7853001894347428,-0.8446854483413013,-1.5197852025506753,-0.9120150119465222,-2.4596378058843986,-1.366716915568126,2.116234807471013,-0.7224654937759005],[0.4004483390937653,4.450186934021061e-06,-0.7853530798759758,-2.565045086429785e-05,-2.3561506590486174,-2.8712569736841532e-05,1.570601939951065,0.7853001912442733,-0.850902675978581,-1.5294135318818853,-0.9109143168586205,-2.462200942819646,-1.370683847427242,2.115002732106255,-0.7383574926602842],[0.4004712509032208,4.282024315151173e-06,-0.7853570258358619,-2.474103139124318e-05,-2.3561499602287195,-2.767430817383867e-05,1.5706019120921355,0.7853001975198942,-0.8579172446758632,-1.540277017162231,-0.909672568880526,-2.4650933824266854,-1.3751596819289489,2.113612616103455,-0.7562882174594902],[0.40048745433940713,4.15427599019732e-06,-0.7853606662360527,-2.3921996158968384e-05,-2.356149421113406,-2.68315942174225e-05,1.5706018796001104,0.7853002030227039,-0.8633924814461594,-1.5487569896210962,-0.9087032783044279,-2.4673518872400853,-1.3786536888503804,2.112527461524639,-0.7702856586049712],[0.40050373826428604,4.0233332820606386e-06,-0.785365382954993,-2.287080422256508e-05,-2.35614885335488,-2.585540941019145e-05,1.5706018329732396,0.7853002093249771,-0.869519655206462,-1.5582468981775666,-0.9076186497459883,-2.469879768645852,-1.3825636855588748,2.1113131258912916,-0.7859496080363465],[0.40051490776369475,3.9259891073184045e-06,-0.7853695372203474,-2.1959359985889352e-05,-2.356148412491281,-2.507081844957239e-05,1.5706018095388707,0.7853002136591248,-0.8742571901794493,-1.565584868226395,-0.9067799276939188,-2.4718350563015314,-1.3855872049946172,2.110374117766814,-0.7980622524235627],[0.4005257134916225,3.8254690517808506e-06,-0.7853747297892979,-2.083204376363759e-05,-2.3561479378951597,-2.4167464488924585e-05,1.5706017973203734,0.7853002182007545,-0.8795011974672053,-1.5737075917770382,-0.9058514621625751,-2.4739999977797327,-1.3889340927494298,2.1093347164689837,-0.811470385579546],[0.40053277082462063,3.7529542180216684e-06,-0.7853791746640377,-1.987832607306057e-05,-2.3561475753725714,-2.344711578674696e-05,1.5706018064348302,0.7853002214739435,-0.8835043923132186,-1.5799086103627513,-0.9051425612720959,-2.4756533176606608,-1.3914892338068043,2.108541209204276,-0.8217066956595617],[0.4005388181241595,3.641477872009366e-06,-0.7853844966950836,-1.8822017025006273e-05,-2.356147064785581,-2.2588465491177608e-05,1.5706020091924493,0.7853002196750564,-0.8878795589985592,-1.5866872563543764,-0.9043672173404118,-2.4774634245909644,-1.3942834596334879,2.1076733081256505,-0.8329010048763423],[0.40054240908136346,3.611365389653938e-06,-0.7853890967696515,-1.7794564445452454e-05,-2.3561468347789827,-2.1927030150066297e-05,1.5706020686114415,0.7853002245071208,-0.8911600753207154,-1.5917687848055526,-0.9037861604766092,-2.478818451889775,-1.396376897678467,2.107023314204989,-0.8412876583295715]]}
diff --git a/src/dual_arm_sim/test/test_block_surface.cpp b/src/dual_arm_sim/test/test_block_surface.cpp
new file mode 100644
index 000000000..8805c9b15
--- /dev/null
+++ b/src/dual_arm_sim/test/test_block_surface.cpp
@@ -0,0 +1,292 @@
+// Copyright 2026 PickNik Inc.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// * Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// * Neither the name of the PickNik Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+// POSSIBILITY OF SUCH DAMAGE.
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace
+{
+using sensor_msgs::msg::PointCloud2;
+
+class BlockSurface : public ::testing::Test
+{
+public:
+ static void SetUpTestSuite()
+ {
+ rclcpp::init(0, nullptr);
+ }
+
+ static void TearDownTestSuite()
+ {
+ rclcpp::shutdown();
+ }
+
+ BlockSurface()
+ {
+ context_ = std::make_shared(
+ std::make_shared("block_surface_test"), false);
+ for (const auto* name : { "CoreBehaviorsLoader", "VisionBehaviorsLoader" })
+ {
+ plugins_.push_back(loader_.createSharedInstance(std::string("moveit_pro::behaviors::") + name));
+ plugins_.back()->registerBehaviors(factory_, context_);
+ }
+ // Only inference and marker publication are substituted. Selection, filtering and centroid use shipped nodes.
+ factory_.registerSimpleAction("CapturedSegmentation",
+ [this](BT::TreeNode& node) {
+ if (segmentation_failed)
+ {
+ return BT::NodeStatus::FAILURE;
+ }
+ node.setOutput("point_cloud_vector", clouds);
+ return BT::NodeStatus::SUCCESS;
+ },
+ { BT::OutputPort>("point_cloud_vector") });
+ std::ignore = factory_.unregisterBuilder("VisualizePose");
+ factory_.registerSimpleAction("VisualizePose",
+ [this](BT::TreeNode& node) {
+ visualized = node.getInput("pose").value();
+ ++visualizations;
+ return BT::NodeStatus::SUCCESS;
+ },
+ { BT::InputPort("pose"),
+ BT::InputPort("marker_lifetime"), BT::InputPort("marker_name"),
+ BT::InputPort("marker_size") });
+ }
+
+ [[nodiscard]] BT::Tree makeTree(const std::string& tree_id = "Find with prompt")
+ {
+ tinyxml2::XMLDocument source;
+ if (source.LoadFile(FIND_WITH_PROMPT_XML) != tinyxml2::XML_SUCCESS)
+ {
+ throw std::runtime_error("Cannot load Find with prompt Objective XML");
+ }
+ auto* segmentation = source.RootElement()
+ ->FirstChildElement("BehaviorTree")
+ ->FirstChildElement("Control")
+ ->FirstChildElement("SubTree");
+ if (!segmentation || std::string(segmentation->Attribute("ID")) != "Segment Point Cloud from Text Prompt Subtree")
+ {
+ throw std::runtime_error("Find with prompt has no segmentation boundary");
+ }
+ while (segmentation->FirstAttribute())
+ {
+ segmentation->DeleteAttribute(segmentation->FirstAttribute()->Name());
+ }
+ segmentation->SetName("Action");
+ segmentation->SetAttribute("ID", "CapturedSegmentation");
+ segmentation->SetAttribute("point_cloud_vector", "{point_cloud_vector}");
+ tinyxml2::XMLPrinter printer;
+ source.Print(&printer);
+ factory_.clearRegisteredBehaviorTrees();
+ factory_.registerBehaviorTreeFromText(printer.CStr());
+ const std::filesystem::path objectives = std::filesystem::path(FIND_WITH_PROMPT_XML).parent_path();
+ factory_.registerBehaviorTreeFromFile((objectives / "find_red_block.xml").string());
+ factory_.registerBehaviorTreeFromFile((objectives / "find_green_block.xml").string());
+ return factory_.createTree(tree_id);
+ }
+
+ [[nodiscard]] static PointCloud2 capturedCloud(const std::string& filename)
+ {
+ pcl::PointCloud points;
+ const std::filesystem::path path = std::filesystem::path(BLOCK_CLOUD_DATA) / filename;
+ if (pcl::io::loadPCDFile(path.string(), points) != 0)
+ {
+ throw std::runtime_error("Cannot load captured block cloud: " + path.string());
+ }
+ PointCloud2 cloud;
+ pcl::toROSMsg(points, cloud);
+ // SendPointCloudToUI captures are already transformed to the world frame.
+ cloud.header.frame_id = "world";
+ cloud.header.stamp.sec = 42;
+ cloud.header.stamp.nanosec = 123;
+ return cloud;
+ }
+
+ [[nodiscard]] static BT::NodeStatus finish(BT::Tree& tree)
+ {
+ const auto deadline = std::chrono::steady_clock::now() + std::chrono::seconds(5);
+ while (std::chrono::steady_clock::now() < deadline)
+ {
+ const BT::NodeStatus status = tree.tickExactlyOnce();
+ if (status != BT::NodeStatus::RUNNING)
+ {
+ return status;
+ }
+ tree.sleep(std::chrono::milliseconds(1));
+ }
+ tree.haltTree();
+ return BT::NodeStatus::RUNNING;
+ }
+
+ std::vector clouds;
+ bool segmentation_failed = false;
+ geometry_msgs::msg::PoseStamped visualized;
+ int visualizations = 0;
+
+private:
+ std::shared_ptr context_;
+ pluginlib::ClassLoader loader_{
+ "moveit_pro_behavior_interface", "moveit_pro::behaviors::SharedResourcesNodeLoaderBase"
+ };
+ std::vector> plugins_;
+ BT::BehaviorTreeFactory factory_;
+};
+
+TEST_F(BlockSurface, EmptyDetectionsFailWithoutPublishingAPose)
+{
+ // GIVEN successful segmentation with no objects.
+ auto tree = makeTree();
+ // WHEN the production Find subtree runs.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ // THEN callers can distinguish exhaustion from a perception error, without a pose.
+ EXPECT_EQ(visualizations, 0);
+ bool detections_empty = false;
+ EXPECT_TRUE(tree.rootBlackboard()->get("detections_empty", detections_empty));
+ EXPECT_TRUE(detections_empty);
+}
+
+TEST_F(BlockSurface, InsufficientSurfaceFailsWithoutPublishingAPose)
+{
+ // GIVEN an object mask containing only two finite depth points.
+ PointCloud2 cloud = capturedCloud("red3_after_drop.pcd");
+ cloud.width = 2;
+ cloud.height = 1;
+ cloud.row_step = 2 * cloud.point_step;
+ cloud.data.resize(cloud.row_step);
+ clouds.emplace_back(cloud);
+ auto tree = makeTree();
+ // WHEN the production Find subtree runs.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ // THEN a centroid without a measurable surface must not be used for motion or mistaken for exhaustion.
+ EXPECT_EQ(visualizations, 0);
+ bool detections_empty = true;
+ EXPECT_TRUE(tree.rootBlackboard()->get("detections_empty", detections_empty));
+ EXPECT_FALSE(detections_empty);
+}
+
+TEST_F(BlockSurface, RegressionAmbiguousDroppedBlockIsNotReportedAsExhaustion)
+{
+ // GIVEN the observed mask of a dropped block whose largest surface covers only 55% of the cloud.
+ clouds = { BT::Any(capturedCloud("red3_on_floor.pcd")) };
+ auto tree = makeTree();
+
+ // WHEN the real surface estimator rejects that ambiguous mask.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN Sort Blocks must see an error, not an empty table or a usable pose.
+ EXPECT_FALSE(tree.rootBlackboard()->get("detections_empty"));
+ EXPECT_EQ(visualizations, 0);
+}
+
+TEST_F(BlockSurface, RegressionFindWrappersClearExhaustionAndDoNotPublishStalePoses)
+{
+ for (const auto* tree_id : { "Find Red Block", "Find Green Block" })
+ {
+ // GIVEN either real color wrapper after a valid detection.
+ SCOPED_TRACE(tree_id);
+ clouds = { BT::Any(capturedCloud("red3_before_pick.pcd")) };
+ auto tree = makeTree(tree_id);
+ ASSERT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+ const int previous_visualizations = visualizations;
+
+ // WHEN subsequent segmentation is empty, then fails.
+ clouds.clear();
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ EXPECT_TRUE(tree.rootBlackboard()->get("detections_empty"));
+ segmentation_failed = true;
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN the wrapper preserves the error/empty distinction and never republishes the old pose.
+ EXPECT_FALSE(tree.rootBlackboard()->get("detections_empty"));
+ EXPECT_EQ(visualizations, previous_visualizations);
+ segmentation_failed = false;
+ }
+}
+
+TEST_F(BlockSurface, RegressionSegmentationFailureAfterEmptyDetectionsIsNotExhaustion)
+{
+ // GIVEN a tree whose previous successful segmentation was empty.
+ auto tree = makeTree();
+ ASSERT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ segmentation_failed = true;
+
+ // WHEN inference or cloud acquisition fails on the next attempt.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN the previous exhaustion result is cleared and no pose is published.
+ bool detections_empty = true;
+ EXPECT_TRUE(tree.rootBlackboard()->get("detections_empty", detections_empty));
+ EXPECT_FALSE(detections_empty);
+ EXPECT_EQ(visualizations, 0);
+}
+
+TEST_F(BlockSurface, RegressionSurfaceStaysOnTheSameBlockBeforeAndAfterADrop)
+{
+ // GIVEN paired masks of one block before picking and after it lands on another face near the table edge.
+ for (const auto* filename : { "red3_before_pick.pcd", "red3_after_drop.pcd" })
+ {
+ SCOPED_TRACE(filename);
+ const PointCloud2 cloud = capturedCloud(filename);
+ clouds = { BT::Any(cloud) };
+ auto tree = makeTree();
+ // WHEN real selection, plane extraction and centroid run in the shipped Objective.
+ ASSERT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+ const auto pose = tree.rootBlackboard()->get("object_centroid");
+ // THEN the point lies on the measured top, not the lower sides/table/floor caught by the mask.
+ // The independently measured MuJoCo top stays at this world height after the face change.
+ EXPECT_NEAR(pose.pose.position.z, 0.804362824, 0.001);
+ const bool before_pick = std::string(filename) == "red3_before_pick.pcd";
+ EXPECT_NEAR(pose.pose.position.x, before_pick ? 0.850000006 : 0.733832575, 0.001);
+ EXPECT_NEAR(pose.pose.position.y, before_pick ? -0.250000002 : -0.257507979, 0.001);
+ EXPECT_EQ(pose.header, cloud.header);
+ EXPECT_EQ(visualized, pose);
+ bool detections_empty = true;
+ EXPECT_TRUE(tree.rootBlackboard()->get("detections_empty", detections_empty));
+ EXPECT_FALSE(detections_empty);
+ }
+}
+} // namespace
diff --git a/src/dual_arm_sim/test/test_block_transfer.py b/src/dual_arm_sim/test/test_block_transfer.py
new file mode 100644
index 000000000..f995bbc39
--- /dev/null
+++ b/src/dual_arm_sim/test/test_block_transfer.py
@@ -0,0 +1,198 @@
+# Copyright 2026 PickNik Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of the PickNik Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+"""Plan the shipped transfer tree and check complete carried-block clearance offline."""
+
+import copy
+import json
+import os
+from pathlib import Path
+import subprocess
+
+from ament_index_python.packages import get_package_prefix, get_package_share_directory
+import mujoco
+import numpy as np
+import pytest
+import yaml
+
+from moveit_studio_utils_py.create_urdf import create_xml_from_xacro
+from moveit_studio_utils_py.system_config import load_system_config
+
+PACKAGE = Path(get_package_share_directory("dual_arm_sim"))
+STATES = json.loads(
+ (Path(__file__).parent / "data/block_transfer_states.json").read_text()
+)
+# Bounds all cube rotations plus the observed within-grip displacement, not just the TCP.
+GRIP_DRIFT_ALLOWANCE_M = 0.025
+
+
+@pytest.fixture(scope="module")
+def transfer_plans(tmp_path_factory):
+ """Use current config/model sources and real planners without any live ROS service."""
+ directory = tmp_path_factory.mktemp("block_transfer")
+ mujoco.mj_loadAllPluginLibraries(
+ str(Path(get_package_prefix("mujoco_package_uri")) / "bin/mujoco_plugin")
+ )
+ model = mujoco.MjModel.from_xml_path(str(PACKAGE / "description/mujoco/scene.xml"))
+ waypoints = {
+ waypoint["name"]: dict(
+ zip(waypoint["joint_state"]["name"], waypoint["joint_state"]["position"])
+ )
+ for waypoint in yaml.safe_load(
+ (PACKAGE / "waypoints/waypoints.yaml").read_text()
+ )
+ }
+ cases = copy.deepcopy(STATES)
+ for case in cases:
+ assert len(case["qpos"]) == model.nq
+ case["joints"] = {
+ model.joint(joint).name: case["qpos"][model.jnt_qposadr[joint]]
+ for joint in range(model.njnt)
+ if int(model.jnt_type[joint])
+ in (int(mujoco.mjtJoint.mjJNT_HINGE), int(mujoco.mjtJoint.mjJNT_SLIDE))
+ }
+ case["waypoint"] = waypoints[
+ "Place Right" if case["arm"] == "right" else "Place Left"
+ ]
+ unreachable = copy.deepcopy(cases[0])
+ unreachable["name"] = "unreachable"
+ unreachable["approach"]["xyz"][0] = 2.5
+ cases.append(unreachable)
+ config, _, _ = load_system_config(
+ "dual_arm_sim", tmp_path_factory.mktemp("user_ws")
+ )
+ description = config.hardware.robot_description
+ params = {
+ "robot_description": create_xml_from_xacro(
+ description.urdf, description.urdf_params
+ ),
+ "robot_description_semantic": create_xml_from_xacro(
+ description.srdf, description.urdf_params
+ ),
+ **config.moveit["robot_description_kinematics"],
+ **config.moveit["robot_description_planning"],
+ }
+ params_path = directory / "params.yaml"
+ params_path.write_text(yaml.safe_dump({"/**": {"ros__parameters": params}}))
+ cases_path = directory / "cases.json"
+ cases_path.write_text(json.dumps(cases))
+ result_path = directory / "results.json"
+ process = subprocess.run(
+ [
+ os.environ["BLOCK_TRANSFER_PROBE"],
+ str(cases_path),
+ str(PACKAGE / "objectives/plan_block_transfer.xml"),
+ str(result_path),
+ "--ros-args",
+ "--params-file",
+ str(params_path),
+ "--log-level",
+ "error",
+ ],
+ capture_output=True,
+ text=True,
+ timeout=180,
+ check=False,
+ )
+ assert process.returncode == 0, process.stdout + process.stderr
+ return model, {row["name"]: row for row in json.loads(result_path.read_text())}
+
+
+def test_unreachable_transfer_returns_no_executable_solution(transfer_plans) -> None:
+ """Planning failure cannot leave a pickup or carry solution for execution."""
+ _, plans = transfer_plans
+ assert plans["unreachable"]["status"] == "FAILURE"
+ assert "pickup" not in plans["unreachable"]
+ assert "carry" not in plans["unreachable"]
+ assert plans["unreachable"]["error"]
+
+
+@pytest.mark.parametrize("case", STATES, ids=lambda case: case["name"])
+def test_regression_complete_transfer_clears_blocks_and_splits_at_grasp(
+ transfer_plans, case
+) -> None:
+ """Recorded near/far/cross-table pickups must plan, close at the block, and carry clear."""
+ model, plans = transfer_plans
+ plan = plans[case["name"]]
+ assert plan["status"] == "SUCCESS", plan.get("error", plan)
+ data = mujoco.MjData(model)
+ data.qpos[:] = case["qpos"]
+ mujoco.mj_forward(model, data)
+ tcp = model.body(case["arm"] + "_fr3v2_hand_tcp").id
+ block = model.body(case["block"]).id
+ geom = int(model.body_geomadr[block])
+ initial_center = data.geom_xpos[geom].copy()
+ radius = np.linalg.norm(model.geom_size[geom]) + GRIP_DRIFT_ALLOWANCE_M
+ obstacles = []
+ for index in range(model.ngeom):
+ name = model.body(int(model.geom_bodyid[index])).name
+ if name == case["block"] or not name.startswith(("table_", "block_")):
+ continue
+ assert int(model.geom_type[index]) == int(mujoco.mjtGeom.mjGEOM_BOX)
+ obstacles.append(
+ (
+ name,
+ data.geom_xpos[index].copy(),
+ data.geom_xmat[index].reshape(3, 3).copy(),
+ model.geom_size[index].copy(),
+ )
+ )
+
+ def at_point(stage, point):
+ for name, value in zip(stage["joints"], point["q"]):
+ data.qpos[model.joint(name).qposadr[0]] = value
+ mujoco.mj_kinematics(model, data)
+
+ pickup = [stage for stage in plan["pickup"] if stage["points"]]
+ carry = [stage for stage in plan["carry"] if stage["points"]]
+ assert len(pickup) == 2, "Pickup must end after descent, before lift."
+ assert len(carry) == 3, "Carry must lift, clear the source, then reach release."
+ assert pickup[-1]["joints"] == carry[0]["joints"]
+ np.testing.assert_allclose(
+ pickup[-1]["points"][-1]["q"], carry[0]["points"][0]["q"], atol=1e-6
+ )
+ at_point(pickup[-1], pickup[-1]["points"][-1])
+ expected_grasp = np.array(case["approach"]["xyz"]) - [0, 0, 0.1]
+ np.testing.assert_allclose(data.xpos[tcp], expected_grasp, atol=0.001)
+ relative = data.xmat[tcp].reshape(3, 3).T @ (initial_center - data.xpos[tcp])
+ at_point(carry[0], carry[0]["points"][-1])
+ np.testing.assert_allclose(data.xpos[tcp], case["approach"]["xyz"], atol=0.001)
+ minimum_clearance = float("inf")
+ # Initial lift starts in intentional support contact; the full envelope applies after lift.
+ for stage in carry[1:]:
+ for point in stage["points"]:
+ at_point(stage, point)
+ center = data.xpos[tcp] + data.xmat[tcp].reshape(3, 3) @ relative
+ for name, position, rotation, half_size in obstacles:
+ outside = np.maximum(
+ np.abs(rotation.T @ (center - position)) - half_size, 0
+ )
+ clearance = float(np.linalg.norm(outside) - radius)
+ minimum_clearance = min(minimum_clearance, clearance)
+ assert (
+ clearance > 0
+ ), f"{case['name']} carried envelope intersects {name}: {clearance:.6f}m"
+ assert np.isfinite(minimum_clearance)
diff --git a/src/dual_arm_sim/test/test_grasp_contacts.py b/src/dual_arm_sim/test/test_grasp_contacts.py
new file mode 100644
index 000000000..e8f334d00
--- /dev/null
+++ b/src/dual_arm_sim/test/test_grasp_contacts.py
@@ -0,0 +1,194 @@
+# Copyright 2026 PickNik Inc.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of the PickNik Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+"""Exercise the installed scene's real actuators and contacts without ROS motion."""
+
+import json
+from pathlib import Path
+
+from ament_index_python.packages import get_package_prefix, get_package_share_directory
+import mujoco
+import numpy as np
+import pytest
+
+
+@pytest.mark.parametrize(
+ "side,block_name,arm_positions",
+ [
+ (
+ "right",
+ "block_red_3",
+ [
+ 0.22728149,
+ 0.73151791,
+ -1.00153045,
+ -1.84700153,
+ -0.48244381,
+ 2.57497201,
+ 2.74926899,
+ ],
+ ),
+ (
+ "left",
+ "block_green_2",
+ [
+ 0.08046400,
+ 1.42594702,
+ 0.02776247,
+ -1.08445314,
+ 1.02392209,
+ 2.03964838,
+ 1.17891876,
+ ],
+ ),
+ ],
+)
+def test_regression_block_stays_in_hand_through_lift_and_carry(
+ side: str, block_name: str, arm_positions: list[float]
+) -> None:
+ """Recorded pregrasp arm poses must retain a block during a 100 mm lift and 225 mm carry."""
+ mujoco.mj_loadAllPluginLibraries(
+ str(Path(get_package_prefix("mujoco_package_uri")) / "bin" / "mujoco_plugin")
+ )
+ scene = (
+ Path(get_package_share_directory("dual_arm_sim"))
+ / "description/mujoco/scene.xml"
+ )
+ model = mujoco.MjModel.from_xml_path(str(scene))
+ data = mujoco.MjData(model)
+ mujoco.mj_resetDataKeyframe(model, data, model.key("default").id)
+ for number, position in enumerate(arm_positions, start=1):
+ name = f"{side}_fr3v2_joint{number}"
+ data.qpos[model.jnt_qposadr[model.joint(name).id]] = position
+ data.ctrl[model.actuator(name).id] = position
+ for number in (1, 2):
+ name = f"{side}_fr3v2_finger_joint{number}"
+ data.qpos[model.jnt_qposadr[model.joint(name).id]] = 0.035
+ gripper = model.actuator(f"{side}_fr3v2_finger_joint1").id
+ spine = model.actuator("franka_spine_vertical_joint").id
+ initial_spine = data.ctrl[spine]
+ carry = model.actuator("planar_y").id
+ tcp = model.body(f"{side}_fr3v2_hand_tcp").id
+ block = model.body(block_name).id
+ table = model.geom("table_front").id
+ mujoco.mj_forward(model, data)
+ table_top = data.geom_xpos[table, 2] + model.geom_size[table, 2]
+ block_half_width = model.geom_size[model.body_geomadr[block], 2]
+ initial_relative = None
+ max_slip = 0.0
+ for step in range(round(5.5 / model.opt.timestep)):
+ time = step * model.opt.timestep
+ # Let the blocks settle, close, then lift with the spine and carry with the base.
+ data.ctrl[gripper] = 0.035 if time < 0.5 else 0.0
+ lift = np.clip(time - 1.5, 0.0, 1.0)
+ data.ctrl[spine] = initial_spine + 0.1 * (3 * lift**2 - 2 * lift**3)
+ phase = np.clip(time - 3.0, 0.0, 1.5) / 1.5
+ direction = 1 if side == "left" else -1
+ data.ctrl[carry] = direction * 0.3 * np.sin(np.pi * phase) ** 2
+ mujoco.mj_step(model, data)
+ assert np.isfinite(data.qpos).all(), (side, time, "nonfinite position")
+ assert np.isfinite(data.qvel).all(), (side, time, "nonfinite velocity")
+ relative = data.xmat[tcp].reshape(3, 3).T @ (data.xpos[block] - data.xpos[tcp])
+ if time >= 1.5:
+ if initial_relative is None:
+ initial_relative = relative.copy()
+ max_slip = max(max_slip, np.linalg.norm(relative - initial_relative))
+ # A pad is 18.5 mm tall: 10 mm drift is already over half its height, not a stable grasp.
+ assert max_slip < 0.010, (side, "block slipped relative to hand", max_slip)
+ assert data.xpos[block, 2] - block_half_width > table_top + 0.075, (
+ side,
+ "block did not stay above the table through carry",
+ data.xpos[block].copy(),
+ )
+
+
+@pytest.mark.parametrize(
+ "filename,block_name",
+ [
+ ("right_arm_carry.json", "block_red_1"),
+ ("right_arm_far_block_carry.json", "block_red_3"),
+ ],
+)
+def test_regression_full_arm_carry_keeps_block_in_hand(
+ filename: str, block_name: str
+) -> None:
+ """Recorded arm carries must retain both near and far blocks at the Objective's speed."""
+ mujoco.mj_loadAllPluginLibraries(
+ str(Path(get_package_prefix("mujoco_package_uri")) / "bin" / "mujoco_plugin")
+ )
+ scene = (
+ Path(get_package_share_directory("dual_arm_sim"))
+ / "description/mujoco/scene.xml"
+ )
+ model = mujoco.MjModel.from_xml_path(str(scene))
+ data = mujoco.MjData(model)
+ trajectory = json.loads((Path(__file__).parent / "data" / filename).read_text())
+ for name, positions in trajectory["initial_joint_positions"].items():
+ address = model.jnt_qposadr[model.joint(name).id]
+ data.qpos[address : address + len(positions)] = positions
+ # test_sort_blocks.cpp checks this scale at both planners' input ports.
+ times = np.asarray(trajectory["time"]) / 0.25
+ commands = np.asarray(trajectory["commands"])
+ actuators = [model.actuator(name).id for name in trajectory["actuator_names"]]
+ gripper = model.actuator("right_fr3v2_finger_joint1").id
+ data.ctrl[model.actuator("left_fr3v2_finger_joint1").id] = 0.035
+ block = model.body(block_name).id
+ tcp = model.body("right_fr3v2_hand_tcp").id
+ for step in range(round((times[-1] + 0.5) / model.opt.timestep)):
+ time = step * model.opt.timestep
+ # Only actuators drive the articulated robot after its initial state is set.
+ for column, actuator in enumerate(actuators):
+ data.ctrl[actuator] = np.interp(time, times, commands[:, column])
+ data.ctrl[gripper] = 0.035 if time < 0.45 else 0.0
+ mujoco.mj_step(model, data)
+ assert np.isfinite(data.qpos).all(), (time, "nonfinite position")
+ assert np.isfinite(data.qvel).all(), (time, "nonfinite velocity")
+ if time > 6.0:
+ relative = data.xmat[tcp].reshape(3, 3).T @ (
+ data.xpos[block] - data.xpos[tcp]
+ )
+ assert abs(relative[2]) < 0.010, (
+ time,
+ "block slipped down out of pads",
+ relative,
+ )
+ # A half-block-width lateral shift puts its center outside the initial grasp.
+ assert np.linalg.norm(relative[:2]) < 0.025, (
+ time,
+ "block left the grasp",
+ relative,
+ )
+ finger_contacts = set()
+ for contact in data.contact[: data.ncon]:
+ bodies = {model.body(int(model.geom_bodyid[g])).name for g in contact.geom}
+ if block_name in bodies:
+ finger_contacts.update(name for name in bodies if "finger" in name)
+ assert finger_contacts, "block lost both finger contacts during the final hold"
+ assert (
+ data.xpos[block, 2] > 0.85
+ ), "block fell instead of being carried above the table"
diff --git a/src/dual_arm_sim/test/test_sort_blocks.cpp b/src/dual_arm_sim/test/test_sort_blocks.cpp
index 17f7ca2c8..1fd128782 100644
--- a/src/dual_arm_sim/test/test_sort_blocks.cpp
+++ b/src/dual_arm_sim/test/test_sort_blocks.cpp
@@ -41,18 +41,21 @@ namespace
{
struct Scenario
{
- std::deque choose_right{ true };
std::deque red;
std::deque green;
std::string fail_at;
int fail_on_call = 1;
std::string hold_at;
+ int hold_on_call = 1;
std::map calls;
std::vector motions;
+ std::vector transfer_steps;
+ std::vector carry_speeds;
+ std::vector carry_accelerations;
int halts = 0;
};
-bool consume(std::deque& results)
+[[nodiscard]] bool consume(std::deque& results)
{
if (results.empty())
{
@@ -71,25 +74,37 @@ class Operation : public BT::StatefulActionNode
{
}
- static BT::PortsList providedPorts()
+ [[nodiscard]] static BT::PortsList providedPorts()
{
- return { BT::InputPort("operation"), BT::InputPort("arm") };
+ return { BT::InputPort("operation"),
+ BT::InputPort("arm"),
+ BT::InputPort("carry_speed"),
+ BT::InputPort("carry_acceleration"),
+ BT::InputPort("solution"),
+ BT::OutputPort("pickup_solution"),
+ BT::OutputPort("carry_solution"),
+ BT::OutputPort("detections_empty", "{detections_empty}",
+ "Successful segmentation found no objects.") };
}
private:
- BT::NodeStatus onStart() override
+ [[nodiscard]] BT::NodeStatus onStart() override
{
- const auto operation = getInput("operation").value();
- const auto key = operation + ":" + getInput("arm").value();
+ const std::string operation = getInput("operation").value();
+ const std::string key = operation + ":" + getInput("arm").value();
const int call = ++scenario_.calls[key];
- if (operation == "BiasedCoinFlip")
+ if (const auto speed = getInput("carry_speed"); speed.has_value())
{
- return consume(scenario_.choose_right) ? BT::NodeStatus::SUCCESS : BT::NodeStatus::FAILURE;
+ scenario_.carry_speeds.push_back(speed.value());
+ scenario_.carry_accelerations.push_back(getInput("carry_acceleration").value());
}
if (operation == "Find Red Block" || operation == "Find Green Block")
{
- return consume(operation == "Find Red Block" ? scenario_.red : scenario_.green) ? BT::NodeStatus::SUCCESS :
- BT::NodeStatus::FAILURE;
+ const bool failed = key == scenario_.fail_at && call == scenario_.fail_on_call;
+ const bool found = !failed && consume(operation == "Find Red Block" ? scenario_.red : scenario_.green);
+ // A failed segmentation/fit is not evidence that the table is empty.
+ setOutput("detections_empty", !failed && !found);
+ return found ? BT::NodeStatus::SUCCESS : BT::NodeStatus::FAILURE;
}
if (operation == "Execute MTC Solution" || operation == "Move to Waypoint" ||
operation.find("Gripper") != std::string::npos)
@@ -100,12 +115,28 @@ class Operation : public BT::StatefulActionNode
{
return BT::NodeStatus::FAILURE;
}
- return key == scenario_.hold_at ? BT::NodeStatus::RUNNING : BT::NodeStatus::SUCCESS;
+ if (operation == "Plan Block Transfer")
+ {
+ const std::string arm = getInput("arm").value();
+ setOutput("pickup_solution", arm + " pickup");
+ setOutput("carry_solution", arm + " carry");
+ scenario_.transfer_steps.push_back(key);
+ }
+ else if (operation == "Execute MTC Solution")
+ {
+ scenario_.transfer_steps.push_back(getInput("solution").value());
+ }
+ else if (operation.find("Gripper") != std::string::npos)
+ {
+ scenario_.transfer_steps.push_back(key);
+ }
+ return key == scenario_.hold_at && call == scenario_.hold_on_call ? BT::NodeStatus::RUNNING :
+ BT::NodeStatus::SUCCESS;
}
- BT::NodeStatus onRunning() override
+ [[nodiscard]] BT::NodeStatus onRunning() override
{
- const auto key = getInput("operation").value() + ":" + getInput("arm").value();
+ const std::string key = getInput("operation").value() + ":" + getInput("arm").value();
return key == scenario_.fail_at ? BT::NodeStatus::FAILURE : BT::NodeStatus::RUNNING;
}
@@ -133,6 +164,19 @@ void substituteOperations(tinyxml2::XMLElement* element, std::string arm = "")
const std::string id = element->Attribute("ID") ? element->Attribute("ID") : "";
if (tag == "SubTree" || (tag == "Action" && id != "Script"))
{
+ const std::string carry_speed = element->Attribute("carry_speed") ? element->Attribute("carry_speed") : "";
+ const std::string carry_acceleration =
+ element->Attribute("carry_acceleration") ? element->Attribute("carry_acceleration") : "";
+ const std::string detections_empty =
+ element->Attribute("detections_empty") ? element->Attribute("detections_empty") : "";
+ std::map solution_ports;
+ for (const auto* port : { "solution", "pickup_solution", "carry_solution" })
+ {
+ if (const auto* value = element->Attribute(port))
+ {
+ solution_ports.emplace(port, value);
+ }
+ }
std::vector attributes;
for (auto* attribute = element->FirstAttribute(); attribute; attribute = attribute->Next())
{
@@ -149,6 +193,19 @@ void substituteOperations(tinyxml2::XMLElement* element, std::string arm = "")
element->SetAttribute("ID", "Operation");
element->SetAttribute("operation", id.c_str());
element->SetAttribute("arm", arm.c_str());
+ for (const auto& [port, value] : solution_ports)
+ {
+ element->SetAttribute(port.c_str(), value.c_str());
+ }
+ if (!carry_speed.empty())
+ {
+ element->SetAttribute("carry_speed", carry_speed.c_str());
+ element->SetAttribute("carry_acceleration", carry_acceleration.c_str());
+ }
+ if (!detections_empty.empty())
+ {
+ element->SetAttribute("detections_empty", detections_empty.c_str());
+ }
}
for (auto* child = element->FirstChildElement(); child; child = child->NextSiblingElement())
{
@@ -159,7 +216,7 @@ void substituteOperations(tinyxml2::XMLElement* element, std::string arm = "")
class SortBlocks : public ::testing::Test
{
public:
- BT::Tree makeTree()
+ [[nodiscard]] BT::Tree makeTree()
{
tinyxml2::XMLDocument source;
if (source.LoadFile(SORT_BLOCKS_XML) != tinyxml2::XML_SUCCESS)
@@ -174,11 +231,11 @@ class SortBlocks : public ::testing::Test
return factory.createTreeFromText(printer.CStr());
}
- static BT::NodeStatus finish(BT::Tree& tree)
+ [[nodiscard]] static BT::NodeStatus finish(BT::Tree& tree)
{
for (int tick = 0; tick < 100; ++tick)
{
- const auto status = tree.tickExactlyOnce();
+ const BT::NodeStatus status = tree.tickExactlyOnce();
if (status != BT::NodeStatus::RUNNING)
{
return status;
@@ -193,37 +250,93 @@ class SortBlocks : public ::testing::Test
TEST_F(SortBlocks, EmptyTableSucceedsWithoutMotion)
{
+ // GIVEN neither color has detections.
auto tree = makeTree();
+ // WHEN the sort loop checks both colors.
EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+ // THEN success requires no motion.
EXPECT_TRUE(scenario.motions.empty());
}
TEST_F(SortBlocks, BothArmsCompleteBeforeExhaustionSucceeds)
{
- scenario.choose_right = { true, false, true };
+ // GIVEN one detected block of each color.
scenario.red = { true, false };
scenario.green = { true, false };
auto tree = makeTree();
+ // WHEN the sort loop completes.
EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+ // THEN both arms pick, place and return home before exhaustion.
EXPECT_EQ(scenario.calls["Execute MTC Solution:right"], 2);
EXPECT_EQ(scenario.calls["Execute MTC Solution:left"], 2);
EXPECT_EQ(scenario.calls["Move to Waypoint:right"], 1);
EXPECT_EQ(scenario.calls["Move to Waypoint:left"], 1);
}
+TEST_F(SortBlocks, RegressionEmptyGreenDetectionsDoNotLeaveRedBlocksUnprocessed)
+{
+ // GIVEN three red blocks and no green blocks.
+ scenario.red = { true, true, true, false };
+ auto tree = makeTree();
+
+ // WHEN the actual Sort Blocks control flow reaches terminal success.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+
+ // THEN every red block must be picked and placed, and both colors must have been checked for exhaustion.
+ EXPECT_EQ(scenario.calls["Execute MTC Solution:right"], 6);
+ EXPECT_EQ(scenario.calls["Find Red Block:right"], 4);
+ EXPECT_GE(scenario.calls["Find Green Block:left"], 1);
+ EXPECT_TRUE(scenario.red.empty());
+}
+
+TEST_F(SortBlocks, RegressionBothColorsAreExhaustedBeforeSuccess)
+{
+ // GIVEN three blocks of each color.
+ scenario.red = { true, true, true, false };
+ scenario.green = { true, true, true, false };
+ auto tree = makeTree();
+
+ // WHEN the actual Sort Blocks control flow finishes.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+
+ // THEN all six picks and placements occurred, and neither detection queue retains a block.
+ EXPECT_EQ(scenario.calls["Execute MTC Solution:right"], 6);
+ EXPECT_EQ(scenario.calls["Execute MTC Solution:left"], 6);
+ EXPECT_TRUE(scenario.red.empty());
+ EXPECT_TRUE(scenario.green.empty());
+ EXPECT_EQ(scenario.calls["Plan Block Transfer:right"], 3);
+ EXPECT_EQ(scenario.calls["Plan Block Transfer:left"], 3);
+ ASSERT_EQ(scenario.carry_speeds.size(), 6);
+ for (const double speed : scenario.carry_speeds)
+ {
+ EXPECT_DOUBLE_EQ(speed, 0.25);
+ }
+ ASSERT_EQ(scenario.carry_accelerations.size(), 6);
+ for (const double acceleration : scenario.carry_accelerations)
+ {
+ EXPECT_DOUBLE_EQ(acceleration, 0.0625);
+ }
+}
+
class SortBlocksMotionFailure : public SortBlocks, public ::testing::WithParamInterface>
{
};
TEST_P(SortBlocksMotionFailure, AbortFailsImmediatelyWithoutTryingTheOtherArm)
{
+ // GIVEN a motion operation aborts for the selected arm.
scenario.red = { true };
scenario.green = { true };
scenario.fail_at = GetParam().first;
scenario.fail_on_call = GetParam().second;
- scenario.choose_right = { scenario.fail_at.find(":right") != std::string::npos };
+ if (scenario.fail_at.find(":left") != std::string::npos)
+ {
+ scenario.red.clear();
+ }
auto tree = makeTree();
+ // WHEN the abort reaches the sort loop.
EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ // THEN no later motion or other-arm attempt is allowed.
ASSERT_FALSE(scenario.motions.empty());
EXPECT_EQ(scenario.motions.back(), scenario.fail_at);
const std::string other_arm = scenario.fail_at.find(":right") != std::string::npos ? "left" : "right";
@@ -247,27 +360,155 @@ INSTANTIATE_TEST_SUITE_P(
TEST_F(SortBlocks, ControllerAbortAfterRunningFailsWithoutMovingOtherArm)
{
+ // GIVEN the right controller is executing a trajectory.
scenario.red = { true };
scenario.green = { true };
scenario.hold_at = "Execute MTC Solution:right";
auto tree = makeTree();
ASSERT_EQ(tree.tickExactlyOnce(), BT::NodeStatus::RUNNING);
+ // WHEN it aborts after returning RUNNING.
scenario.fail_at = scenario.hold_at;
EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+ // THEN the left arm remains idle.
EXPECT_EQ(scenario.calls["Execute MTC Solution:left"], 0);
EXPECT_EQ(scenario.motions.back(), scenario.fail_at);
}
-TEST_F(SortBlocks, CancellationHaltsMotion)
+class SortBlocksPerceptionFailure : public SortBlocks, public ::testing::WithParamInterface
{
+};
+
+TEST_P(SortBlocksPerceptionFailure, RegressionPerceptionErrorCannotSucceedAsExhaustion)
+{
+ // GIVEN a perception error for either color, not a valid empty detection result.
scenario.red = { true };
- scenario.hold_at = "Execute MTC Solution:right";
+ scenario.green = { true };
+ scenario.fail_at = GetParam();
+ if (scenario.fail_at == "Find Green Block:left")
+ {
+ scenario.red.clear();
+ }
+ auto tree = makeTree();
+
+ // WHEN the Find subtree fails.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN no arm may move, and a red perception error must not fall through to green.
+ EXPECT_TRUE(scenario.motions.empty());
+ if (scenario.fail_at == "Find Red Block:right")
+ {
+ EXPECT_EQ(scenario.calls["Find Green Block:left"], 0);
+ }
+
+ // A later successful empty detection must not retain this failure.
+ scenario.fail_at.clear();
+ scenario.red.clear();
+ scenario.green.clear();
+ EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+}
+
+INSTANTIATE_TEST_SUITE_P(BothColors, SortBlocksPerceptionFailure,
+ ::testing::Values("Find Red Block:right", "Find Green Block:left"),
+ [](const ::testing::TestParamInfo& info) {
+ return info.param == "Find Red Block:right" ? "Red" : "Green";
+ });
+
+TEST_F(SortBlocks, RegressionPoseTransformFailureCannotSucceedAsExhaustion)
+{
+ // GIVEN a detected red block whose pose cannot be transformed.
+ scenario.red = { true };
+ scenario.green = { true };
+ scenario.fail_at = "TransformPose:right";
+ auto tree = makeTree();
+
+ // WHEN the pose conversion fails before grasp planning.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN neither stale-pose motion nor the other color's branch is allowed.
+ EXPECT_TRUE(scenario.motions.empty());
+ EXPECT_EQ(scenario.calls["Find Green Block:left"], 0);
+}
+
+class SortBlocksPlanFailure : public SortBlocks, public ::testing::WithParamInterface
+{
+};
+
+TEST_P(SortBlocksPlanFailure, RegressionTransferMustPlanBeforeGraspExecution)
+{
+ // GIVEN one block and an infeasible continuation after its grasp.
+ const std::string arm = GetParam();
+ scenario.red = arm == "right" ? std::deque{ true } : std::deque{};
+ scenario.green = { true };
+ scenario.fail_at = "Plan Block Transfer:" + arm;
+ auto tree = makeTree();
+
+ // WHEN complete transfer planning fails.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::FAILURE);
+
+ // THEN the open gripper never approaches or closes on a block with no carry path.
+ EXPECT_EQ(scenario.calls[scenario.fail_at], 1);
+ EXPECT_EQ(scenario.calls["Execute MTC Solution:" + arm], 0);
+ EXPECT_EQ(scenario.calls["Close Right Gripper:right"], 0);
+ EXPECT_EQ(scenario.calls["Close Left Gripper:left"], 0);
+ if (arm == "right")
+ {
+ EXPECT_EQ(scenario.calls["Find Green Block:left"], 0);
+ }
+}
+
+INSTANTIATE_TEST_SUITE_P(BothArms, SortBlocksPlanFailure, ::testing::Values("right", "left"),
+ [](const ::testing::TestParamInfo& info) { return info.param; });
+
+TEST_F(SortBlocks, RegressionGrippersCloseBetweenPickupAndCarrySolutions)
+{
+ // GIVEN one block for each arm and distinguishable pickup/carry solutions from the planner.
+ scenario.red = { true };
+ scenario.green = { true };
+ auto tree = makeTree();
+
+ // WHEN both transfers complete through the shipped SubTree port mappings.
+ EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
+
+ // THEN each hand closes only after pickup and opens only after its own carry, not the other arm's solution.
+ EXPECT_EQ(scenario.transfer_steps,
+ (std::vector{ "Open Right Gripper:right", "Plan Block Transfer:right", "right pickup",
+ "Close Right Gripper:right", "right carry", "Open Right Gripper:right",
+ "Open Left Gripper:left", "Plan Block Transfer:left", "left pickup",
+ "Close Left Gripper:left", "left carry", "Open Left Gripper:left" }));
+}
+
+class SortBlocksCancellation : public SortBlocks, public ::testing::WithParamInterface>
+{
+};
+
+TEST_P(SortBlocksCancellation, CancellationHaltsPlanningOrMotionWithoutClosingOrContinuing)
+{
+ // GIVEN an active complete-transfer plan, pickup, or carry.
+ scenario.red = { true };
+ scenario.hold_at = GetParam().first;
+ scenario.hold_on_call = GetParam().second;
auto tree = makeTree();
ASSERT_EQ(tree.tickExactlyOnce(), BT::NodeStatus::RUNNING);
+ const auto previous_motions = scenario.motions;
+
+ // WHEN the Objective is cancelled.
tree.haltTree();
+
+ // THEN the active operation is halted, no later gripper or motion runs, and a later run starts cleanly.
EXPECT_EQ(scenario.halts, 1);
+ EXPECT_EQ(scenario.motions, previous_motions);
scenario.hold_at.clear();
scenario.red.clear();
EXPECT_EQ(finish(tree), BT::NodeStatus::SUCCESS);
}
+
+INSTANTIATE_TEST_SUITE_P(TransferStages, SortBlocksCancellation,
+ ::testing::Values(std::make_pair("Plan Block Transfer:right", 1),
+ std::make_pair("Execute MTC Solution:right", 1),
+ std::make_pair("Execute MTC Solution:right", 2)),
+ [](const ::testing::TestParamInfo>& info) {
+ return info.param.first == "Plan Block Transfer:right" ? "Plan" :
+ info.param.second == 1 ? "Pickup" :
+ "Carry";
+ });
} // namespace
diff --git a/src/external_dependencies/franka_meshes/UPSTREAM.yaml b/src/external_dependencies/franka_meshes/UPSTREAM.yaml
index 20abaff69..4f1a296e7 100644
--- a/src/external_dependencies/franka_meshes/UPSTREAM.yaml
+++ b/src/external_dependencies/franka_meshes/UPSTREAM.yaml
@@ -22,6 +22,7 @@ pruned_paths:
- everything in the upstream workspace other than src/franka_meshes, which is a robot configuration workspace rather than a mesh package
modified_paths:
- src/franka_meshes/script/generate_collision_decomposition.py
+ - src/franka_meshes/test/test_meshes.py
apache_paths:
- .
notes:
@@ -31,5 +32,6 @@ notes:
- Vendored from PickNik's own repository rather than a third-party one, which is why the parts can live inside the snapshot: a vendored refresh resyncs them from their real source. The earlier attempt put them inside the third-party franka_description snapshot, where a refresh would have discarded PickNik files that upstream never had.
- The snapshot mirrors the upstream path src/franka_meshes rather than flattening it, because the package lives in a workspace repository; snapshot_path is left at its default so a refresh maps each vendored path straight onto its upstream path.
- Pinned to the merge commit that landed franka_meshes on upstream main, so drift tracking resolves a real branch tip rather than a pull-request head.
- - The one modified file is the generator's source-mesh lookup, which upstream resolves against its own workspace. It now tries that path first and a vendoring layout second, so the script and its check still run here; nothing else in it changed.
+ - The generator's source-mesh lookup is modified: upstream resolves it against its own workspace, and it now tries that path first and a vendoring layout second, so the script and its check still run here; nothing else in the generator changed.
- The visual meshes are DAE conversions of the same franka_description geometry. dual_arm_sim's MJCF loads them as its visual geoms, which previously rendered the collision meshes and so looked coarser than the real robot.
+ - test_meshes.py is also modified: it takes its franka_description mesh directory from the generator's SOURCE_MESHES instead of a fixed path inside the upstream workspace, so it resolves the same way in both layouts.