robotic 0.2.9.dev1__cp311-cp311-manylinux2014_x86_64.whl → 0.3.4.dev5__cp311-cp311-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- robotic/DataGen.pyi +11 -1
- robotic/__init__.py +8 -1
- robotic/_robotic.pyi +228 -110
- robotic/_robotic.so +0 -0
- robotic/algo.pyi +17 -0
- robotic/include/rai/{Geo → Algo}/Lewiner/MarchingCubes.h +0 -29
- robotic/include/rai/Algo/SplineCtrlFeed.h +1 -1
- robotic/include/rai/Algo/marching_cubes.h +9 -0
- robotic/include/rai/Algo/rungeKutta.h +2 -2
- robotic/include/rai/Algo/spline.h +4 -8
- robotic/include/rai/Algo/trilinear.h +10 -0
- robotic/include/rai/Control/CtrlSolver.h +1 -1
- robotic/include/rai/Control/TimingMPC.h +2 -2
- robotic/include/rai/Core/array.h +99 -64
- robotic/include/rai/Core/array.ipp +290 -139
- robotic/include/rai/Core/arrayDouble.h +36 -26
- robotic/include/rai/Core/defines.h +7 -9
- robotic/include/rai/Core/graph.h +27 -23
- robotic/include/rai/Core/h5.h +3 -1
- robotic/include/rai/Core/thread.h +12 -12
- robotic/include/rai/Core/util.h +58 -79
- robotic/include/rai/DataGen/rndStableConfigs.h +1 -0
- robotic/include/rai/DataGen/shapenetGrasps.h +5 -3
- robotic/include/rai/Geo/depth2PointCloud.h +2 -0
- robotic/include/rai/Geo/geo.h +23 -15
- robotic/include/rai/Geo/{fclInterface.h → i_fcl.h} +3 -1
- robotic/include/rai/Geo/mesh.h +18 -13
- robotic/include/rai/Geo/pairCollision.h +43 -43
- robotic/include/rai/Geo/signedDistanceFunctions.h +7 -5
- robotic/include/rai/Geo/stb_image.h +1 -1
- robotic/include/rai/Gui/RenderData.h +9 -7
- robotic/include/rai/Gui/opengl.h +6 -6
- robotic/include/rai/Gui/plot.h +1 -1
- robotic/include/rai/KOMO/komo.h +6 -3
- robotic/include/rai/KOMO/komo_NLP.h +2 -2
- robotic/include/rai/KOMO/manipTools.h +7 -2
- robotic/include/rai/KOMO/testProblems_KOMO.h +5 -9
- robotic/include/rai/Kin/F_forces.h +3 -3
- robotic/include/rai/Kin/cameraview.h +24 -36
- robotic/include/rai/Kin/dof_forceExchange.h +7 -7
- robotic/include/rai/Kin/feature.h +1 -1
- robotic/include/rai/Kin/frame.h +22 -24
- robotic/include/rai/Kin/{kin_physx.h → i_Physx.h} +10 -8
- robotic/include/rai/Kin/kin.h +29 -21
- robotic/include/rai/Kin/proxy.h +1 -1
- robotic/include/rai/Kin/simulation.h +20 -10
- robotic/include/rai/Kin/viewer.h +14 -1
- robotic/include/rai/LGP/LGP_TAMP_Abstraction.h +33 -0
- robotic/include/rai/LGP/LGP_Tool.h +4 -25
- robotic/include/rai/LGP/LGP_computers.h +1 -1
- robotic/include/rai/LGP/LGP_computers2.h +196 -0
- robotic/include/rai/LGP/NLP_Descriptor.h +5 -0
- robotic/include/rai/Logic/folWorld.h +1 -1
- robotic/include/rai/Logic/treeSearchDomain.h +2 -2
- robotic/include/rai/Optim/BayesOpt.h +13 -6
- robotic/include/rai/Optim/CMA/boundary_transformation.h +73 -0
- robotic/include/rai/Optim/CMA/cmaes.h +175 -0
- robotic/include/rai/Optim/CMA/cmaes_interface.h +68 -0
- robotic/include/rai/Optim/GlobalIterativeNewton.h +7 -3
- robotic/include/rai/Optim/NLP.h +23 -7
- robotic/include/rai/Optim/NLP_GraphSolver.h +1 -1
- robotic/include/rai/Optim/NLP_Solver.h +5 -5
- robotic/include/rai/Optim/constrained.h +4 -4
- robotic/include/rai/Optim/{opt-ceres.h → i_Ceres.h} +2 -2
- robotic/include/rai/Optim/{opt-nlopt.h → i_NLopt.h} +4 -0
- robotic/include/rai/Optim/lagrangian.h +7 -5
- robotic/include/rai/Optim/liblbfgs/liblbfgs.h +755 -0
- robotic/include/rai/Optim/m_EvoStrategies.h +114 -0
- robotic/include/rai/Optim/{gradient.h → m_Gradient.h} +13 -12
- robotic/include/rai/Optim/m_LBFGS.h +21 -0
- robotic/include/rai/Optim/m_LeastSquaresZeroOrder.h +104 -0
- robotic/include/rai/Optim/m_LocalGreedy.h +31 -0
- robotic/include/rai/Optim/m_NelderMead.h +23 -0
- robotic/include/rai/Optim/{newton.h → m_Newton.h} +7 -4
- robotic/include/rai/Optim/{SlackGaussNewton.h → m_SlackGaussNewton.h} +0 -10
- robotic/include/rai/Optim/options.h +8 -7
- robotic/include/rai/Optim/primalDual.h +10 -6
- robotic/include/rai/Optim/testProblems_Opt.h +25 -19
- robotic/include/rai/Optim/utils.h +16 -85
- robotic/include/rai/PathAlgos/ConfigurationProblem.h +3 -2
- robotic/include/rai/PathAlgos/RRT_PathFinder.h +2 -2
- robotic/include/rai/Perception/pcl.h +10 -10
- robotic/include/rai/Perception/surfels.h +1 -1
- robotic/include/rai/Search/TreeSearchNode.h +1 -1
- robotic/include/rai/ry/py-algo.h +17 -0
- robotic/include/rai/ry/types.h +4 -2
- robotic/librai.so +0 -0
- robotic/manipulation.py +5 -7
- robotic/meshTool +0 -0
- robotic/mujoco-import.py +8 -0
- robotic/rai-robotModels/g1/g1.g +11 -2
- robotic/rai-robotModels/g1/g1_29dof_conv.yml +64 -0
- robotic/rai-robotModels/g1/g1_clean.g +38 -73
- robotic/rai-robotModels/g1/meshes/head_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_elbow_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_knee_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_rubber_hand.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/logo_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis_contour_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_elbow_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_knee_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_rubber_hand.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/torso_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_roll_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_support_link.h5 +0 -0
- robotic/rai-robotModels/g1/meshes/waist_yaw_link.h5 +0 -0
- robotic/rai-robotModels/objects/shelf.g +1 -1
- robotic/rai-robotModels/panda/meshes/finger.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/hand.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link0.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link1.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link2.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link3.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link4.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link5.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link6.h5 +0 -0
- robotic/rai-robotModels/panda/meshes/link7.h5 +0 -0
- robotic/rai-robotModels/panda/panda.g +10 -10
- robotic/rai-robotModels/panda/panda_arm_hand_conv.g +24 -0
- robotic/rai-robotModels/panda/panda_arm_hand_conv.yml +24 -0
- robotic/rai-robotModels/panda/panda_clean.g +21 -45
- robotic/rai-robotModels/panda/panda_gripper.g +5 -7
- robotic/rai-robotModels/panda/panda_withoutCollisionModels.g +3 -11
- robotic/rai-robotModels/pr2/meshes/base.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/base_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/caster.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/elbow_flex.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/elbow_flex_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/forearm_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/gripper_palm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/gripper_palm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/head_pan.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/head_pan_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/head_tilt.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/head_tilt_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_tip.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/l_finger_tip_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_lift.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_lift_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_pan.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/shoulder_pan_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/tilting_hokuyo.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/tilting_hokuyo_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/torso_lift.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/torso_lift_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/upper_arm_roll_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wheel.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/wheel_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_color.png +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_flex.h5 +0 -0
- robotic/rai-robotModels/pr2/meshes/wrist_roll.h5 +0 -0
- robotic/rai-robotModels/pr2/pr2.g +12 -12
- robotic/rai-robotModels/pr2/pr2_clean.g +122 -118
- robotic/rai-robotModels/pr2/pr2_conv.g +218 -0
- robotic/rai-robotModels/pr2/pr2_modifications.g +2 -2
- robotic/rai-robotModels/ranger/meshes/ranger_mini3.h5 +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.h5 +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.h5 +0 -0
- robotic/rai-robotModels/ranger/ranger.g +8 -8
- robotic/rai-robotModels/ranger/ranger_clean.g +5 -5
- robotic/rai-robotModels/ranger/ranger_mini_conv.g +14 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_base_link.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_finger.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_inner_knuckle.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_finger.h5 +0 -0
- robotic/rai-robotModels/robotiq/meshes/robotiq_arg2f_85_outer_knuckle.h5 +0 -0
- robotic/rai-robotModels/robotiq/robotiq.g +2 -2
- robotic/rai-robotModels/robotiq/robotiq_arg2f_85_model_conv.yml +19 -0
- robotic/rai-robotModels/robotiq/robotiq_clean.g +16 -16
- robotic/rai-robotModels/scenarios/ballFinger.g +2 -2
- robotic/rai-robotModels/scenarios/liftRing.g +2 -2
- robotic/rai-robotModels/scenarios/pandaFloatingGripper.g +1 -1
- robotic/rai-robotModels/scenarios/pandaSingle.g +1 -1
- robotic/rai-robotModels/scenarios/panda_fixRobotiq.g +3 -3
- robotic/rai-robotModels/tests/arm.g +18 -19
- robotic/rai-robotModels/tests/compound.g +3 -6
- robotic/rai-robotModels/ur10/meshes/base.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/forearm.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/shoulder.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/upperarm.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist1.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist2.h5 +0 -0
- robotic/rai-robotModels/ur10/meshes/wrist3.h5 +0 -0
- robotic/rai-robotModels/ur10/ur10.g +2 -2
- robotic/rai-robotModels/ur10/ur10_clean.g +8 -8
- robotic/rai-robotModels/ur10/ur10_conv.g +17 -0
- robotic/ry-h5info +3 -12
- robotic/ry-test +5 -4
- robotic/ry-urdfConvert.py +74 -0
- robotic/ry-view +28 -6
- robotic/src/cleanMeshes.py +59 -0
- robotic/src/h5_helper.py +46 -0
- robotic/src/h5_helper.py~ +42 -0
- robotic/src/mesh_helper.py +395 -0
- robotic/{rai-robotModels/ranger/meshes/cleanMeshes.mlx → src/meshlabFilters.mlx} +0 -3
- robotic/src/mujoco_io.py +242 -0
- robotic/src/urdf_io.py +237 -0
- robotic/src/yaml_helper.py +29 -0
- robotic/version.py +1 -1
- robotic-0.3.4.dev5.data/scripts/ry-h5info +23 -0
- {robotic-0.2.9.dev1.data → robotic-0.3.4.dev5.data}/scripts/ry-test +5 -4
- robotic-0.3.4.dev5.data/scripts/ry-urdfConvert.py +74 -0
- robotic-0.3.4.dev5.data/scripts/ry-view +46 -0
- {robotic-0.2.9.dev1.dist-info → robotic-0.3.4.dev5.dist-info}/METADATA +18 -22
- robotic-0.3.4.dev5.dist-info/RECORD +386 -0
- {robotic-0.2.9.dev1.dist-info → robotic-0.3.4.dev5.dist-info}/WHEEL +1 -1
- robotic/nlp.py +0 -113
- robotic/rai-robotModels/baxter/baxter.g +0 -49
- robotic/rai-robotModels/baxter/baxter_clean.g +0 -116
- robotic/rai-robotModels/baxter/baxter_clean2.g +0 -205
- robotic/rai-robotModels/baxter/baxter_clean3.g +0 -223
- robotic/rai-robotModels/baxter/baxter_description/meshes/base/PEDESTAL.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/base/pedestal_link_collision.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/head/H0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/head/H1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_elbow/E1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_forearm/W1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/lower_shoulder/S1.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/torso/base_link_collision.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_elbow/E0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_forearm/W0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/upper_shoulder/S0.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_description/meshes/wrist/W2.ply +0 -0
- robotic/rai-robotModels/baxter/baxter_new.g +0 -53
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/electric_gripper_base.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/extended_narrow.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/half_round_tip.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/electric_gripper/fingers/paddle_tip.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_base.ply +0 -0
- robotic/rai-robotModels/baxter/rethink_ee_description/meshes/pneumatic_gripper/pneumatic_gripper_w_cup.ply +0 -0
- robotic/rai-robotModels/g1/meshes/head_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_ankle_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_elbow_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_index_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_index_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_middle_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_middle_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_palm_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hand_thumb_2_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_hip_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_knee_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_shoulder_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_roll_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/left_wrist_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/logo_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis.ply +0 -0
- robotic/rai-robotModels/g1/meshes/pelvis_contour_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_ankle_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_elbow_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_index_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_index_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_middle_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_middle_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_palm_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_0_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_1_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hand_thumb_2_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_hip_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_knee_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_shoulder_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_pitch_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_roll_rubber_hand.ply +0 -0
- robotic/rai-robotModels/g1/meshes/right_wrist_yaw_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_L_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_L_rod_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_R_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_constraint_R_rod_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/torso_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_constraint_L.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_constraint_R.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_roll_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_support_link.ply +0 -0
- robotic/rai-robotModels/g1/meshes/waist_yaw_link.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/finger.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/hand.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link0.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link1.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link2.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link3.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link4.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link5.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link6.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/collision/link7.stl +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO.sh +0 -10
- robotic/rai-robotModels/panda/franka_description/meshes/visual/HOWTO2.sh +0 -7
- robotic/rai-robotModels/panda/franka_description/meshes/visual/convMeshes.mlx +0 -38
- robotic/rai-robotModels/panda/franka_description/meshes/visual/finger.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/hand.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link0.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link1.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link2.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link3.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link4.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link5.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link6.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/link7.ply +0 -0
- robotic/rai-robotModels/panda/franka_description/meshes/visual/script.mlx +0 -28
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/base_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/caster_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/pr2_wheel.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/base_v0/wheel.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/forearm.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_flex.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/forearm_v0/wrist_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/gripper_palm.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/gripper_v0/l_finger_tip.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_pan_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/head_v0/head_tilt_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_lift.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_pan.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/shoulder_yaw.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/shoulder_v0/upper_arm_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/hok_tilt.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/tilting_laser_v0/tilting_hokuyo_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/torso_v0/torso_lift_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/elbow_flex.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/forearm_roll_L.ply +0 -0
- robotic/rai-robotModels/pr2/pr2_description/meshes/upper_arm_v0/upper_arm.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/cleanMeshes.sh +0 -8
- robotic/rai-robotModels/ranger/meshes/ranger_mini3.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel.ply +0 -0
- robotic/rai-robotModels/ranger/meshes/ranger_mini_v3_wheel_right.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_base_link_x.ply +0 -10
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_finger.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_inner_knuckle.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_finger.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_outer_knuckle.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_arg2f_85_pad.ply +0 -0
- robotic/rai-robotModels/robotiq/meshes/visual/robotiq_gripper_coupling.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Base.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Forearm.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Shoulder.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/UpperArm.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist1.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist2.ply +0 -0
- robotic/rai-robotModels/ur10/ur_description/meshes/ur10/visual/Wrist3.ply +0 -0
- robotic/ry-urdf2rai +0 -222
- robotic/ry-urdf2yaml +0 -250
- robotic-0.2.9.dev1.data/scripts/ry-h5info +0 -32
- robotic-0.2.9.dev1.data/scripts/ry-urdf2rai +0 -222
- robotic-0.2.9.dev1.data/scripts/ry-urdf2yaml +0 -250
- robotic-0.2.9.dev1.data/scripts/ry-view +0 -24
- robotic-0.2.9.dev1.dist-info/RECORD +0 -421
- /robotic/include/rai/{Geo → Algo}/Lewiner/LookUpTable.h +0 -0
- /robotic/include/rai/Geo/{assimpInterface.h → i_assimp.h} +0 -0
- /robotic/include/rai/Kin/{kin_bullet.h → i_Bullet.h} +0 -0
- /robotic/include/rai/Kin/{kin_feather.h → i_Feather.h} +0 -0
- /robotic/include/rai/Kin/{kin_ode.h → i_Ode.h} +0 -0
- /robotic/include/rai/Optim/{opt-ipopt.h → i_Ipopt.h} +0 -0
- /robotic/rai-robotModels/robotiq/meshes/{visual/robotiq_ft300.ply → robotiq_ft300.ply} +0 -0
- /robotic/{import.py → src/__init__.py} +0 -0
- {robotic-0.2.9.dev1.data → robotic-0.3.4.dev5.data}/scripts/ry-bot +0 -0
- {robotic-0.2.9.dev1.data → robotic-0.3.4.dev5.data}/scripts/ry-info +0 -0
- {robotic-0.2.9.dev1.data → robotic-0.3.4.dev5.data}/scripts/ry-meshTool +0 -0
- {robotic-0.2.9.dev1.dist-info → robotic-0.3.4.dev5.dist-info}/licenses/LICENSE +0 -0
- {robotic-0.2.9.dev1.dist-info → robotic-0.3.4.dev5.dist-info}/top_level.txt +0 -0
robotic/include/rai/Core/util.h
CHANGED
|
@@ -19,17 +19,18 @@
|
|
|
19
19
|
#include <climits>
|
|
20
20
|
#include <mutex>
|
|
21
21
|
#include <functional>
|
|
22
|
+
#include <random>
|
|
22
23
|
|
|
23
24
|
using std::cout;
|
|
24
|
-
using std::cerr;
|
|
25
25
|
using std::endl;
|
|
26
26
|
|
|
27
|
+
namespace rai {
|
|
28
|
+
|
|
27
29
|
//===========================================================================
|
|
28
30
|
//
|
|
29
31
|
// standard little methods (this needs cleanup)
|
|
30
32
|
//
|
|
31
33
|
|
|
32
|
-
namespace rai {
|
|
33
34
|
extern int argc;
|
|
34
35
|
extern char** argv;
|
|
35
36
|
extern std::string startDir;
|
|
@@ -121,7 +122,6 @@ const char* niceTypeidName(const std::type_info& type);
|
|
|
121
122
|
//----- get verbose level
|
|
122
123
|
bool getInteractivity();
|
|
123
124
|
bool getDisableGui();
|
|
124
|
-
}
|
|
125
125
|
|
|
126
126
|
//===========================================================================
|
|
127
127
|
//
|
|
@@ -132,7 +132,6 @@ bool getDisableGui();
|
|
|
132
132
|
#define STRINGF(format,...) (rai::String().printf(format, __VA_ARGS__))
|
|
133
133
|
#define STREAM(x) (((rai::String&)(rai::String().stream() <<x)).stream())
|
|
134
134
|
|
|
135
|
-
namespace rai {
|
|
136
135
|
/** @brief String implements the functionalities of an ostream and an
|
|
137
136
|
istream, but also can be send to an ostream or read from an
|
|
138
137
|
istream. It is based on a simple streambuf derived from the
|
|
@@ -184,6 +183,7 @@ struct String : public std::iostream {
|
|
|
184
183
|
String& printf(const char* format, ...);
|
|
185
184
|
void resize(uint n, bool copy); //low-level resizing the string buffer - with additinal final 0
|
|
186
185
|
void append(char x);
|
|
186
|
+
String& append(const char* s);
|
|
187
187
|
void prepend(const String& s);
|
|
188
188
|
void replace(uint i, uint n, const char* xp, uint xN);
|
|
189
189
|
void removePrefix(const char* prefix);
|
|
@@ -212,18 +212,17 @@ struct String : public std::iostream {
|
|
|
212
212
|
bool endsWith(const String& substring) const;
|
|
213
213
|
bool endsWith(const char* substring) const;
|
|
214
214
|
|
|
215
|
+
void substituteEnvironmentVariables();
|
|
216
|
+
|
|
215
217
|
/// @name I/O
|
|
216
218
|
void write(std::ostream& os) const;
|
|
217
|
-
uint read(std::istream& is, const char* skipSymbols=
|
|
219
|
+
uint read(std::istream& is, const char* skipSymbols=0, const char* stopSymbols=0, int eatStopSymbol=-1);
|
|
218
220
|
};
|
|
219
221
|
stdPipes(String)
|
|
220
222
|
|
|
221
223
|
inline String operator+(const String& a, const char* b) { String s=a; s <<b; return s; }
|
|
222
224
|
//template<class T> String operator+(const String& a, const T& b) { String s=a; s <<b; return s; }
|
|
223
225
|
|
|
224
|
-
} //namespace
|
|
225
|
-
|
|
226
|
-
typedef rai::String str;
|
|
227
226
|
|
|
228
227
|
void setLogLevels(int fileLogLevel=3, int consoleLogLevel=2);
|
|
229
228
|
|
|
@@ -236,26 +235,25 @@ void setLogLevels(int fileLogLevel=3, int consoleLogLevel=2);
|
|
|
236
235
|
// give names to Enum (for pipe << >> )
|
|
237
236
|
//
|
|
238
237
|
|
|
239
|
-
namespace rai {
|
|
240
238
|
template<class enum_T>
|
|
241
239
|
struct Enum {
|
|
242
240
|
enum_T x;
|
|
243
241
|
static const char* names [];
|
|
244
242
|
Enum():x((enum_T)-1) {}
|
|
245
243
|
Enum(enum_T y):x(y) {}
|
|
246
|
-
explicit Enum(const
|
|
244
|
+
explicit Enum(const String& str):Enum() { operator=(str); }
|
|
247
245
|
const enum_T& operator=(enum_T y) { x=y; return x; }
|
|
248
246
|
bool operator==(const enum_T& y) const { return x==y; }
|
|
249
247
|
bool operator!=(const enum_T& y) const { return x!=y; }
|
|
250
248
|
operator enum_T() const { return x; }
|
|
251
249
|
void read(std::istream& is) {
|
|
252
|
-
|
|
250
|
+
String str(is);
|
|
253
251
|
operator=(str);
|
|
254
252
|
}
|
|
255
253
|
void operator=(const char* str) {
|
|
256
254
|
operator=(STRING(str));
|
|
257
255
|
}
|
|
258
|
-
void operator=(const
|
|
256
|
+
void operator=(const String& str) {
|
|
259
257
|
bool good=false;
|
|
260
258
|
for(int i=0; names[i]; i++) {
|
|
261
259
|
const char* n = names[i];
|
|
@@ -263,14 +261,14 @@ struct Enum {
|
|
|
263
261
|
if(str==n) { x=(enum_T)(i); good=true; break; }
|
|
264
262
|
}
|
|
265
263
|
if(!good) {
|
|
266
|
-
|
|
264
|
+
String all;
|
|
267
265
|
for(int i=0; names[i]; i++) all <<names[i] <<' ';
|
|
268
266
|
HALT("Enum::read could not find the keyword '" <<str <<"'. Possible Enum keywords: " <<all);
|
|
269
267
|
} else {
|
|
270
268
|
CHECK(str.p && !strcmp(names[x], str.p), "");
|
|
271
269
|
}
|
|
272
270
|
}
|
|
273
|
-
static bool contains(const
|
|
271
|
+
static bool contains(const String& str) {
|
|
274
272
|
for(int i=0; names[i]; i++) {
|
|
275
273
|
if(str==names[i]) return true;
|
|
276
274
|
}
|
|
@@ -287,14 +285,12 @@ struct Enum {
|
|
|
287
285
|
};
|
|
288
286
|
template<class T> std::istream& operator>>(std::istream& is, Enum<T>& x) { x.read(is); return is; }
|
|
289
287
|
template<class T> std::ostream& operator<<(std::ostream& os, const Enum<T>& x) { x.write(os); return os; }
|
|
290
|
-
}
|
|
291
288
|
|
|
292
289
|
//===========================================================================
|
|
293
290
|
//
|
|
294
291
|
// parameters
|
|
295
292
|
//
|
|
296
293
|
|
|
297
|
-
namespace rai {
|
|
298
294
|
//----- parameter grabbing from command line, config file, or default value
|
|
299
295
|
template<class T> T getParameter(const char* tag);
|
|
300
296
|
template<class T> T getParameter(const char* tag, const T& Default);
|
|
@@ -331,8 +327,6 @@ template<class T> struct ParameterInitEnum {
|
|
|
331
327
|
auto& set_##name(type _##name){ name=_##name; return *this; } \
|
|
332
328
|
rai::ParameterInitEnum<type> __init_##name = {name, scope #name, Default};
|
|
333
329
|
|
|
334
|
-
}
|
|
335
|
-
|
|
336
330
|
//===========================================================================
|
|
337
331
|
//
|
|
338
332
|
// Testing
|
|
@@ -359,36 +353,34 @@ template<class T> struct ParameterInitEnum {
|
|
|
359
353
|
// FileToken
|
|
360
354
|
//
|
|
361
355
|
|
|
362
|
-
namespace rai {
|
|
363
|
-
|
|
364
356
|
/** @brief A ostream/istream wrapper that allows easier initialization of objects, like:
|
|
365
357
|
arr X = FILE("inname");
|
|
366
358
|
X >>FILE("outfile");
|
|
367
359
|
etc
|
|
368
360
|
*/
|
|
369
361
|
struct FileToken {
|
|
370
|
-
|
|
362
|
+
String path, name, baseDir;
|
|
371
363
|
std::shared_ptr<std::ofstream> os;
|
|
372
364
|
std::shared_ptr<std::ifstream> is;
|
|
373
365
|
|
|
374
366
|
FileToken();
|
|
375
|
-
FileToken(const char* _filename
|
|
367
|
+
FileToken(const char* _filename);
|
|
376
368
|
FileToken(const FileToken& ft);
|
|
377
369
|
~FileToken();
|
|
378
370
|
FileToken& operator()() { return *this; }
|
|
379
371
|
|
|
380
372
|
void decomposeFilename();
|
|
381
|
-
void
|
|
373
|
+
void cd_base();
|
|
382
374
|
void cd_file();
|
|
383
375
|
bool exists();
|
|
384
|
-
std::ostream& getOs(
|
|
385
|
-
std::istream& getIs(
|
|
376
|
+
std::ostream& getOs();
|
|
377
|
+
std::istream& getIs();
|
|
386
378
|
operator std::istream& () { return getIs(); }
|
|
387
379
|
operator std::ostream& () { return getOs(); }
|
|
388
380
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
381
|
+
String autoPath() const;
|
|
382
|
+
String relPath() const;
|
|
383
|
+
String fullPath() const;
|
|
392
384
|
};
|
|
393
385
|
template<class T> FileToken& operator>>(FileToken& fil, T& x) { fil.getIs() >>x; return fil; }
|
|
394
386
|
template<class T> std::ostream& operator<<(FileToken& fil, const T& x) { fil.getOs() <<x; return fil.getOs(); }
|
|
@@ -396,23 +388,25 @@ inline std::ostream& operator<<(std::ostream& os, const FileToken& fil) { return
|
|
|
396
388
|
template<class T> FileToken& operator<<(T& x, FileToken& fil) { fil.getIs() >>x; return fil; }
|
|
397
389
|
template<class T> void operator>>(const T& x, FileToken& fil) { fil.getOs() <<x; }
|
|
398
390
|
inline bool operator==(const FileToken&, const FileToken&) { return false; }
|
|
399
|
-
|
|
400
|
-
#define FILE(filename) (rai::FileToken(filename
|
|
391
|
+
|
|
392
|
+
#define FILE(filename) (rai::FileToken(filename)()) //it needs to return a REFERENCE to a local scope object
|
|
401
393
|
|
|
402
394
|
//===========================================================================
|
|
403
395
|
//
|
|
404
396
|
// random number generator
|
|
405
397
|
//
|
|
406
398
|
|
|
407
|
-
namespace rai {
|
|
408
399
|
/** @brief A random number generator. An global instantiation \c
|
|
409
|
-
|
|
400
|
+
rnd of a \c Rnd object is created. Use this one object to get
|
|
410
401
|
random numbers.*/
|
|
411
402
|
class Rnd {
|
|
412
403
|
private:
|
|
413
404
|
bool ready;
|
|
414
405
|
int32_t rpoint; /* Feldindex */
|
|
415
406
|
int32_t rfield[256]; /* Schieberegisterfeld */
|
|
407
|
+
public:
|
|
408
|
+
std::minstd_rand e1;
|
|
409
|
+
std::random_device r;
|
|
416
410
|
|
|
417
411
|
public:
|
|
418
412
|
/// ...
|
|
@@ -420,52 +414,23 @@ class Rnd {
|
|
|
420
414
|
|
|
421
415
|
public:/// @name initialization
|
|
422
416
|
/// initialize with a specific seed
|
|
423
|
-
|
|
417
|
+
void seed(int s){ e1.seed(s); ready=true; }
|
|
424
418
|
|
|
425
419
|
/// use Parameter<uint>("seed") as seed
|
|
426
|
-
|
|
420
|
+
void seed(){ e1.seed(getParameter<uint32_t>("seed", 0)); ready=true; }
|
|
427
421
|
|
|
428
422
|
/// uses the internal clock to generate a seed
|
|
429
|
-
|
|
423
|
+
void seed_random(){ e1.seed(r()); ready=true; }
|
|
430
424
|
|
|
431
425
|
public:/// @name access
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
uint32_t operator()() { return num(); }
|
|
436
|
-
/// a initeger random number uniformly distributed in [0, \c i-1]
|
|
437
|
-
uint32_t num(uint32_t limit) {
|
|
438
|
-
CHECK(limit, "zero limit in rnd.num()"); return num() % limit;
|
|
439
|
-
}
|
|
440
|
-
uint32_t num(int32_t lo, int32_t hi) { return lo+num(hi-lo+1); }
|
|
441
|
-
/// same as \c num(i)
|
|
442
|
-
uint32_t operator()(uint32_t i) { return num(i); }
|
|
443
|
-
uint32_t operator()(int32_t lo, int32_t hi) { return num(lo, hi); }
|
|
444
|
-
/// a random variable uniformly distributed in [0, 1]
|
|
445
|
-
double uni() { return ((double)num(1 <<22))/(1 <<22); }
|
|
446
|
-
/// a random variable uniformly distributed in [\c low, \c high]
|
|
447
|
-
double uni(double low, double high) { return low+uni()*(high-low); }
|
|
448
|
-
/// a gaussian random variable with mean zero
|
|
449
|
-
double gauss();
|
|
450
|
-
/** @brief a positive integer drawn from a poisson distribution with given
|
|
451
|
-
\c mean; is case \c mean>100, a (positive) gauss number
|
|
452
|
-
\c floor(mean+gauss(sqrt(mean))+.5) is returned */
|
|
453
|
-
uint32_t poisson(double mean);
|
|
426
|
+
int uni_int(int lo, int up) { if(!ready) seed(); std::uniform_int_distribution<int> dist(lo, up); return dist(e1); }
|
|
427
|
+
double uni(double lo=0., double up=1.) { if(!ready) seed(); std::uniform_real_distribution<double> dist(lo, up); return dist(e1); }
|
|
428
|
+
double gauss(double mean=0., double std=1.){ if(!ready) seed(); std::normal_distribution<double> dist(mean, std); return dist(e1); }
|
|
454
429
|
|
|
455
|
-
|
|
456
|
-
int32_t rnd250() {
|
|
457
|
-
rpoint = (rpoint+1) & 255; // Index erhoehen
|
|
458
|
-
return rfield[rpoint] = rfield[(rpoint-250) & 255]
|
|
459
|
-
^ rfield[(rpoint-103) & 255];
|
|
460
|
-
}
|
|
430
|
+
uint operator()(uint up) { return uint(uni_int(0, up-1)); }
|
|
461
431
|
|
|
462
|
-
void seed250(int32_t seed);
|
|
463
432
|
};
|
|
464
433
|
|
|
465
|
-
}
|
|
466
|
-
/// The global Rnd object
|
|
467
|
-
extern rai::Rnd rnd;
|
|
468
|
-
|
|
469
434
|
//===========================================================================
|
|
470
435
|
//
|
|
471
436
|
/// a little inotify wrapper
|
|
@@ -475,7 +440,7 @@ struct Inotify {
|
|
|
475
440
|
int fd, wd;
|
|
476
441
|
char* buffer;
|
|
477
442
|
uint buffer_size;
|
|
478
|
-
|
|
443
|
+
FileToken* fil;
|
|
479
444
|
Inotify(const char* filename);
|
|
480
445
|
~Inotify();
|
|
481
446
|
bool poll(bool block=false, bool verbose=false);
|
|
@@ -541,7 +506,6 @@ struct Singleton {
|
|
|
541
506
|
// just a hook to make things gl drawable
|
|
542
507
|
//
|
|
543
508
|
|
|
544
|
-
struct OpenGL;
|
|
545
509
|
struct OpenGLDrawOptions {
|
|
546
510
|
bool drawWires=false;
|
|
547
511
|
bool drawColors=true;
|
|
@@ -569,22 +533,20 @@ struct CoutToken {
|
|
|
569
533
|
~CoutToken() { coutMutex.unlock(); }
|
|
570
534
|
std::ostream& getOs() { return cout; }
|
|
571
535
|
};
|
|
572
|
-
#define COUT (CoutToken().getOs())
|
|
536
|
+
#define COUT (rai::CoutToken().getOs())
|
|
573
537
|
|
|
574
538
|
//===========================================================================
|
|
575
539
|
//
|
|
576
540
|
// to register a type
|
|
577
541
|
//
|
|
578
542
|
|
|
579
|
-
namespace rai {
|
|
580
543
|
struct Node;
|
|
581
544
|
struct Graph;
|
|
582
|
-
}
|
|
583
545
|
|
|
584
546
|
struct Type {
|
|
585
547
|
virtual ~Type() {}
|
|
586
548
|
virtual const std::type_info& typeId() const {NIY}
|
|
587
|
-
virtual struct
|
|
549
|
+
virtual struct Node* readIntoNewNode(struct Graph& container, std::istream&) const {NIY}
|
|
588
550
|
virtual void* newInstance() const {NIY}
|
|
589
551
|
void write(std::ostream& os) const { os <<"Type '" <<typeId().name() <<"' "; }
|
|
590
552
|
void read(std::istream& is) const {NIY}
|
|
@@ -606,10 +568,11 @@ inline bool operator==(Type& t1, Type& t2) { return t1.typeId() == t2.typeId();
|
|
|
606
568
|
//
|
|
607
569
|
|
|
608
570
|
template<class T> T fromFile(const char* filename) {
|
|
609
|
-
|
|
571
|
+
FileToken file(filename);
|
|
610
572
|
T x;
|
|
573
|
+
file.cd_file();
|
|
611
574
|
x.read(file.getIs());
|
|
612
|
-
file.
|
|
575
|
+
file.cd_base();
|
|
613
576
|
return x;
|
|
614
577
|
}
|
|
615
578
|
|
|
@@ -620,13 +583,21 @@ inline bool operator==(Type& t1, Type& t2) { return t1.typeId() == t2.typeId();
|
|
|
620
583
|
// return x;
|
|
621
584
|
// }
|
|
622
585
|
|
|
586
|
+
} //namespace
|
|
587
|
+
|
|
588
|
+
//===========================================================================
|
|
589
|
+
|
|
590
|
+
typedef rai::String str;
|
|
591
|
+
extern rai::Rnd rnd;
|
|
592
|
+
std::istream& operator>>(std::istream& is, char* str);
|
|
593
|
+
|
|
623
594
|
//===========================================================================
|
|
624
595
|
//
|
|
625
|
-
|
|
596
|
+
// shared ptrs
|
|
626
597
|
//
|
|
627
598
|
|
|
628
|
-
|
|
629
|
-
|
|
599
|
+
template<class T> void _delete(T* ptr){}
|
|
600
|
+
template<class T> std::shared_ptr<T> _shared(T& x){ return std::shared_ptr<T>(&x, &_delete<T>); }
|
|
630
601
|
|
|
631
602
|
//===========================================================================
|
|
632
603
|
//
|
|
@@ -636,3 +607,11 @@ inline bool operator==(Type& t1, Type& t2) { return t1.typeId() == t2.typeId();
|
|
|
636
607
|
void gnuplot(const char* command, bool pause=false, bool persist=false, const char* PDFfile=nullptr);
|
|
637
608
|
void gnuplotClose();
|
|
638
609
|
|
|
610
|
+
//===========================================================================
|
|
611
|
+
//
|
|
612
|
+
/// running code on init (in cpp files)
|
|
613
|
+
//
|
|
614
|
+
|
|
615
|
+
#define RUN_ON_INIT_BEGIN(key) struct key##_RUN_ON_INIT{ key##_RUN_ON_INIT(){
|
|
616
|
+
#define RUN_ON_INIT_END(key) } } key##_RUN_ON_INIT_dummy;
|
|
617
|
+
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include <Core/util.h>
|
|
4
4
|
#include <Kin/kin.h>
|
|
5
|
-
#include <Kin/
|
|
5
|
+
#include <Kin/i_Physx.h>
|
|
6
6
|
|
|
7
7
|
struct ShapenetGrasps_Options {
|
|
8
8
|
RAI_PARAM("ShapenetGrasps/", int, verbose, 1)
|
|
@@ -32,17 +32,19 @@ struct ShapenetGrasps{
|
|
|
32
32
|
bool loadObject(uint shape, bool rndOrientation=true);
|
|
33
33
|
void resetObjectPose(int idx=0, bool rndOrientation=true);
|
|
34
34
|
arr getPointCloud();
|
|
35
|
+
arr getPointNormals();
|
|
35
36
|
arr sampleGraspPose();
|
|
36
|
-
void setGraspPose(const arr& pose, const char* objPts="
|
|
37
|
+
void setGraspPose(const arr& pose, const char* objPts="obj0_pts");
|
|
37
38
|
arr evaluateGrasp();
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
rai::Configuration C;
|
|
41
42
|
StringA files;
|
|
43
|
+
arr evalGripperPoses;
|
|
42
44
|
|
|
43
45
|
private:
|
|
44
46
|
void clearScene();
|
|
45
|
-
bool addSceneObject(const char* file, int idx, bool rndOri=true
|
|
47
|
+
bool addSceneObject(const char* file, int idx, bool rndOri=true);
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
arr sampleGraspCandidate(rai::Configuration& C, const char *ptsFrame, const char* refFrame, double pregraspNormalSdv=.2, int verbose=1);
|
|
@@ -38,3 +38,5 @@ void depthData2point(arr& pt, const arr& fxycxy);
|
|
|
38
38
|
void depthData2pointCloud(arr& pts, const floatA& depth, float fx, float fy, float cx, float cy);
|
|
39
39
|
void depthData2pointCloud(arr& pts, const floatA& depth, const arr& fxycxy);
|
|
40
40
|
void point2depthData(double* pt, double* fxycxy);
|
|
41
|
+
|
|
42
|
+
void depth2depthImage(byteA& img, const floatA& depth, float maxDepth=2.f);
|
robotic/include/rai/Geo/geo.h
CHANGED
|
@@ -74,7 +74,7 @@ struct Matrix {
|
|
|
74
74
|
|
|
75
75
|
Matrix() {}
|
|
76
76
|
Matrix(int zero) { CHECK_EQ(zero, 0, "this is only for initialization with zero"); setZero(); }
|
|
77
|
-
Matrix(const arr& m) {
|
|
77
|
+
Matrix(const arr& m) { set(m); }
|
|
78
78
|
Matrix(const Matrix& m) : m00(m.m00), m01(m.m01), m02(m.m02), m10(m.m10), m11(m.m11), m12(m.m12), m20(m.m20), m21(m.m21), m22(m.m22) {}
|
|
79
79
|
double* p() { return &m00; }
|
|
80
80
|
arr getArr() const { return arr(&m00, 9, true).reshape(3, 3); }
|
|
@@ -84,6 +84,7 @@ struct Matrix {
|
|
|
84
84
|
void setZero();
|
|
85
85
|
void setRandom(double range=1.);
|
|
86
86
|
void setId();
|
|
87
|
+
void set(const arr& X);
|
|
87
88
|
void setDiag(const arr& diag);
|
|
88
89
|
void setSymmetric(const arr& entries6);
|
|
89
90
|
void setSkew(const Vector&);
|
|
@@ -132,16 +133,17 @@ struct Quaternion {
|
|
|
132
133
|
Quaternion& setDiff(const Vector& from, const Vector& to);
|
|
133
134
|
Quaternion& setInterpolateEmbedded(double t, const Quaternion& from, const Quaternion to);
|
|
134
135
|
Quaternion& setInterpolateProper(double t, const Quaternion& from, const Quaternion to);
|
|
135
|
-
void
|
|
136
|
-
|
|
136
|
+
void integrateDiffEq(arr& qdot, double tau);
|
|
137
|
+
Quaternion& invert();
|
|
138
|
+
Quaternion& flipSign();
|
|
137
139
|
void uniqueSign();
|
|
138
|
-
|
|
140
|
+
Quaternion& normalize();
|
|
139
141
|
void multiply(double f);
|
|
140
142
|
|
|
141
143
|
void appendX(double radians);
|
|
142
144
|
void appendY(double radians);
|
|
143
145
|
void appendZ(double radians);
|
|
144
|
-
|
|
146
|
+
Quaternion& append(const Quaternion& q);
|
|
145
147
|
|
|
146
148
|
double diffZero() const;
|
|
147
149
|
void checkZero() const;
|
|
@@ -150,6 +152,7 @@ struct Quaternion {
|
|
|
150
152
|
bool isNormalized() const;
|
|
151
153
|
Vector getLog() const;
|
|
152
154
|
Vector getVector() const { return getLog(); }
|
|
155
|
+
Vector getThreeEntries() const { CHECK_ZERO(w, 1e-6, ""); return Vector(x, y, z); }
|
|
153
156
|
double getRad() const;
|
|
154
157
|
double getDeg() const{ return 180./RAI_PI*getRad(); }
|
|
155
158
|
void getRad(double& angle, Vector& axis) const;
|
|
@@ -218,6 +221,8 @@ struct Transformation {
|
|
|
218
221
|
void appendTransformation(const Transformation& f); // this = this * f
|
|
219
222
|
void appendInvTransformation(const Transformation& f); // this = this * f^{-1}
|
|
220
223
|
|
|
224
|
+
Transformation inv() const{ Transformation X; X.setInverse(*this); return X; }
|
|
225
|
+
|
|
221
226
|
double* getMatrix(double* m) const; // 4x4 matrix with 3x3=rotation and right-column=translation
|
|
222
227
|
arr getMatrix() const; // 4x4 matrix with 3x3=rotation and right-column=translation
|
|
223
228
|
double* getInverseMatrix(double* m) const; // 4x4 matrix with 3x3=R^{-1} and bottom-row=R^{-1}*translation
|
|
@@ -241,8 +246,8 @@ struct Camera {
|
|
|
241
246
|
|
|
242
247
|
float heightAbs;
|
|
243
248
|
float focalLength;
|
|
244
|
-
float whRatio;
|
|
245
249
|
float zNear, zFar;
|
|
250
|
+
float width=640., height=480.;
|
|
246
251
|
|
|
247
252
|
Camera();
|
|
248
253
|
|
|
@@ -250,16 +255,17 @@ struct Camera {
|
|
|
250
255
|
void setHeightAngle(float a);
|
|
251
256
|
void setHeightAbs(float h);
|
|
252
257
|
void setZRange(float znear, float zfar);
|
|
253
|
-
void setWHRatio(float ratio);
|
|
254
258
|
void setFocalLength(float f);
|
|
255
|
-
void
|
|
256
|
-
void
|
|
259
|
+
void setWidthHeight(float w, float h);
|
|
260
|
+
void setPosition(const Vector& x);
|
|
257
261
|
void setKinect();
|
|
258
262
|
void setDefault();
|
|
259
263
|
|
|
260
|
-
void focus(
|
|
264
|
+
void focus(const Vector& x, bool makeUpright=false);
|
|
265
|
+
void focusAtDist(const Vector& x, double dist);
|
|
261
266
|
void watchDirection(const Vector& d);
|
|
262
267
|
void upright(const Vector& up=Vector(0, 0, 1));
|
|
268
|
+
bool checkFocus();
|
|
263
269
|
|
|
264
270
|
//-- projection matrix stuff
|
|
265
271
|
arr getT_IC() const;
|
|
@@ -270,12 +276,12 @@ struct Camera {
|
|
|
270
276
|
arr getInverseProjectionMatrix() const;
|
|
271
277
|
double glConvertToTrueDepth(double d) const;
|
|
272
278
|
double glConvertToLinearDepth(double d) const;
|
|
273
|
-
void project2PixelsAndTrueDepth(arr& x
|
|
274
|
-
void unproject_fromPixelsAndTrueDepth(arr& x
|
|
275
|
-
void unproject_fromPixelsAndGLDepth(arr& x
|
|
279
|
+
void project2PixelsAndTrueDepth(arr& x) const;
|
|
280
|
+
void unproject_fromPixelsAndTrueDepth(arr& x) const;
|
|
281
|
+
void unproject_fromPixelsAndGLDepth(arr& x) const;
|
|
276
282
|
|
|
277
|
-
arr getFxycxy(
|
|
278
|
-
arr getIntrinsicMatrix(
|
|
283
|
+
arr getFxycxy();
|
|
284
|
+
arr getIntrinsicMatrix() const;
|
|
279
285
|
|
|
280
286
|
//retired
|
|
281
287
|
void setCameraProjectionMatrix(const arr& P); //P is in standard convention -> computes fixedProjectionMatrix in OpenGL convention from this
|
|
@@ -348,8 +354,10 @@ bool operator!=(const Transformation&, const Transformation&);
|
|
|
348
354
|
|
|
349
355
|
// MIXED
|
|
350
356
|
Vector operator*(const Quaternion& b, const Vector& c);
|
|
357
|
+
arr operator*(const Quaternion& b, const arr& c);
|
|
351
358
|
Vector operator/(const Vector& c, const Quaternion& b);
|
|
352
359
|
Vector operator*(const Transformation& b, const Vector& c);
|
|
360
|
+
arr operator*(const Transformation& b, const arr& c);
|
|
353
361
|
Vector operator/(const Vector& c, const Transformation& b);
|
|
354
362
|
|
|
355
363
|
std::istream& operator>>(std::istream&, Vector&);
|
|
@@ -16,7 +16,7 @@ struct FclInterface {
|
|
|
16
16
|
struct FclInterface_self* self=0;
|
|
17
17
|
enum QueryMode { _broadPhaseOnly, _binaryCollisionSingle, _binaryCollisionAll, _distanceCutoff, _fine } mode;
|
|
18
18
|
|
|
19
|
-
double cutoff
|
|
19
|
+
double cutoff=.01;
|
|
20
20
|
uintAA excludes;
|
|
21
21
|
uintA collisions; //return values!
|
|
22
22
|
arr X_lastQuery; //memory to check whether an object has moved in consecutive queries
|
|
@@ -24,6 +24,8 @@ struct FclInterface {
|
|
|
24
24
|
FclInterface(const Array<Shape*>& geometries, const uintAA& _excludes, QueryMode _mode);
|
|
25
25
|
~FclInterface();
|
|
26
26
|
|
|
27
|
+
void setActiveColliders(uintA geom_ids);
|
|
28
|
+
|
|
27
29
|
void step(const arr& X);
|
|
28
30
|
|
|
29
31
|
protected:
|
robotic/include/rai/Geo/mesh.h
CHANGED
|
@@ -21,7 +21,7 @@ struct SharedTextureImage{ byteA img; charA file; uint glBufferID=UINT32_MAX; };
|
|
|
21
21
|
|
|
22
22
|
namespace rai {
|
|
23
23
|
|
|
24
|
-
enum ShapeType { ST_none=-1, ST_box=0, ST_sphere, ST_capsule, ST_mesh, ST_cylinder, ST_marker, ST_pointCloud, ST_ssCvx, ST_ssBox, ST_ssCylinder, ST_ssBoxElip, ST_quad, ST_camera, ST_sdf, ST_tensor, ST_lines };
|
|
24
|
+
enum ShapeType : int { ST_none=-1, ST_box=0, ST_sphere, ST_capsule, ST_mesh, ST_cylinder, ST_marker, ST_pointCloud, ST_ssCvx, ST_ssBox, ST_ssCylinder, ST_ssBoxElip, ST_quad, ST_camera, ST_sdf, ST_tensor, ST_lines };
|
|
25
25
|
|
|
26
26
|
//===========================================================================
|
|
27
27
|
/// a mesh (arrays of vertices, triangles, colors & normals)
|
|
@@ -44,8 +44,6 @@ struct Mesh {
|
|
|
44
44
|
|
|
45
45
|
rai::Transformation glX; ///< transform (only used for drawing! Otherwise use applyOnPoints) (optional)
|
|
46
46
|
|
|
47
|
-
int version = 0;
|
|
48
|
-
|
|
49
47
|
uint _support_vertex=0;
|
|
50
48
|
bool isArrayFormatted=false;
|
|
51
49
|
|
|
@@ -54,7 +52,7 @@ struct Mesh {
|
|
|
54
52
|
|
|
55
53
|
/// @name set or create
|
|
56
54
|
void clear();
|
|
57
|
-
|
|
55
|
+
Mesh& setBox(bool edgesOnly=false);
|
|
58
56
|
void setBox(const arr& lo, const arr& up, bool edgesOnly=false);
|
|
59
57
|
Mesh& setDot(); ///< an awkward mesh: just a single dot, not tris (e.g. cvx core of a sphere...)
|
|
60
58
|
void setLine(double l); ///< an awkward mesh: just a single line, not tris (e.g. cvx core of a sphere...)
|
|
@@ -70,20 +68,20 @@ struct Mesh {
|
|
|
70
68
|
void setCapsule(double r, double l, uint fineness=2);
|
|
71
69
|
void setSSBox(double x_width, double y_width, double z_height, double r, uint fineness=2);
|
|
72
70
|
void setSSCvx(const arr& core, double r, uint fineness=2);
|
|
73
|
-
void setImplicitSurface(
|
|
74
|
-
void setImplicitSurface(const
|
|
75
|
-
void setImplicitSurface(const arr& gridValues, const arr&
|
|
76
|
-
void setImplicitSurface(const floatA& gridValues, const arr&
|
|
77
|
-
void setImplicitSurfaceBySphereProjection(
|
|
71
|
+
void setImplicitSurface(ScalarFunction f, double lo=-10., double up=+10., uint res=100);
|
|
72
|
+
void setImplicitSurface(std::function<double(const arr& x)> f, const arr& bounds, uint res);
|
|
73
|
+
void setImplicitSurface(const arr& gridValues, const arr& size);
|
|
74
|
+
void setImplicitSurface(const floatA& gridValues, const arr& size);
|
|
75
|
+
void setImplicitSurfaceBySphereProjection(ScalarFunction f, double rad, uint fineness=3);
|
|
78
76
|
Mesh& setRandom(uint vertices=10);
|
|
79
77
|
void setGrid(uint X, uint Y);
|
|
80
78
|
|
|
81
79
|
/// @name transform and modify
|
|
82
80
|
void subDivide();
|
|
83
81
|
void subDivide(uint tri);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
Mesh& scale(double s);
|
|
83
|
+
Mesh& scale(double sx, double sy, double sz);
|
|
84
|
+
Mesh& scale(const arr& s);
|
|
87
85
|
void translate(double dx, double dy, double dz);
|
|
88
86
|
void translate(const arr& d);
|
|
89
87
|
void transform(const Transformation& t);
|
|
@@ -95,6 +93,8 @@ struct Mesh {
|
|
|
95
93
|
void makeTriangleFan();
|
|
96
94
|
void makeLines();
|
|
97
95
|
void makeArrayFormatted(double avgNormalsThreshold=.9);
|
|
96
|
+
void makeLinesArrayFormatted();
|
|
97
|
+
|
|
98
98
|
|
|
99
99
|
/// @name convex decomposition
|
|
100
100
|
rai::Mesh decompose();
|
|
@@ -102,7 +102,6 @@ struct Mesh {
|
|
|
102
102
|
|
|
103
103
|
/// @name support function
|
|
104
104
|
uint support(const double* dir);
|
|
105
|
-
void supportMargin(uintA& verts, const arr& dir, double margin, int initialization=-1);
|
|
106
105
|
|
|
107
106
|
/// @name internal computations & cleanup
|
|
108
107
|
void computeTriNormals();
|
|
@@ -125,6 +124,7 @@ struct Mesh {
|
|
|
125
124
|
double getCircum(uint tri) const;
|
|
126
125
|
double getVolume() const;
|
|
127
126
|
uintA getVertexDegrees() const;
|
|
127
|
+
void samplePoints(arr& pts, arr& normals, uint n);
|
|
128
128
|
|
|
129
129
|
ANN& ensure_ann();
|
|
130
130
|
|
|
@@ -148,6 +148,7 @@ struct Mesh {
|
|
|
148
148
|
void writeJson(std::ostream&);
|
|
149
149
|
void readJson(std::istream&);
|
|
150
150
|
void writeArr(std::ostream&);
|
|
151
|
+
void writeAssimp(const char* filename, const char* format);
|
|
151
152
|
void writeH5(const char* filename, const String& group);
|
|
152
153
|
void readH5(const char* filename, const String& group);
|
|
153
154
|
void readArr(std::istream&);
|
|
@@ -156,8 +157,11 @@ struct Mesh {
|
|
|
156
157
|
|
|
157
158
|
stdOutPipe(Mesh)
|
|
158
159
|
|
|
160
|
+
void clearAssetMeshesTextures();
|
|
161
|
+
|
|
159
162
|
} //namespace
|
|
160
163
|
|
|
164
|
+
|
|
161
165
|
//===========================================================================
|
|
162
166
|
|
|
163
167
|
//
|
|
@@ -166,6 +170,7 @@ stdOutPipe(Mesh)
|
|
|
166
170
|
|
|
167
171
|
uintA getSubMeshPositions(const char* filename);
|
|
168
172
|
arr MinkowskiSum(const arr& A, const arr& B);
|
|
173
|
+
void supportMargin(const arr& V, uintA& verts, const arr& dir, double margin, int initialization=-1);
|
|
169
174
|
|
|
170
175
|
//===========================================================================
|
|
171
176
|
//
|