From 9304b6ce3329807af2f719be2f66f411174a109b Mon Sep 17 00:00:00 2001
From: Steve Tonneau <stonneau@laas.fr>
Date: Fri, 19 Jun 2015 18:52:09 +0200
Subject: [PATCH] onto path validation rbprm

---
 CMakeLists.txt                            |  26 ++++++++++
 data/meshes/box.stl                       | Bin 684 -> 684 bytes
 data/meshes/robot_box.stl                 | Bin 0 -> 1284 bytes
 data/urdf/box.urdf                        |   4 +-
 data/urdf/box_rom.urdf                    |   4 +-
 script/load.py                            |  20 ++------
 script/load2.py                           |  58 ++++++++++++++++++++++
 src/hpp/corbaserver/rbprm/rbprmbuilder.py |   4 +-
 src/rbprmbuilder.impl.cc                  |  15 ++++++
 src/rbprmbuilder.impl.hh                  |  12 +----
 10 files changed, 110 insertions(+), 33 deletions(-)
 create mode 100644 data/meshes/robot_box.stl
 create mode 100644 script/load2.py

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3b2858..71e55db 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,5 +53,31 @@ ADD_SUBDIRECTORY(src)
 
 CONFIG_FILES (include/hpp/corbaserver/rbprm/doc.hh)
 
+SET(CATKIN_PACKAGE_SHARE_DESTINATION
+  ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME})
+
+install(FILES
+  data/package.xml
+  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+  )
+install(FILES
+  data/urdf/box_rom.urdf
+  data/urdf/box.urdf
+  data/urdf/scene.urdf
+  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/urdf
+  )
+install(FILES
+  data/srdf/box_rom.srdf
+  data/srdf/box.srdf
+  data/srdf/scene.srdf
+  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/srdf
+  )
+install(FILES
+  data/meshes/car.stl
+	data/meshes/box.stl
+	data/meshes/box_rom.stl
+  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/meshes
+  )
+  
 SETUP_PROJECT_FINALIZE()
 
diff --git a/data/meshes/box.stl b/data/meshes/box.stl
index 37d433d50d312b85d9a2b1e3a02e75964aa01088..f788745d4c2233b819d0b4d6095da0b1645161a6 100644
GIT binary patch
literal 684
zcmb7By=nqM5FRa3rPMlCCPgH~g;eoC2w3C=Y{j#RIk_YtSmb&i!o0(2d2A`7s00%7
z78W*wc$1ku1D|CMc6Z?Wnfc}(`n@oE4ccBO3cFtYDR^!N(e-WRuIgRBytTZWEBe=W
ze!`CJdhvL_lGE9iYFf)lwf>ZMd90lz&V{i>WG;*^Q2#ldDEx0>%;YSagPJf>?W46Q
zQ+3cfch{Tw-A809?4KhGos=8<8J8z#)Ei?CWT84&=zZYCAcD!!NvA1HWFlLn57$Fb
zw;xpFwCX)dWHP(wO%)N`8}@UFZN{O=c#|Lt)wnm8!yb5O_Ixo$1pfy*5vjj!b|)|H
V2h*Zja}14cn5bb8!G7pO^b7fsF`WPa

literal 684
zcmb7By=uZx6h3uu>gsGpJG4l>;3R=Up+ldd7$@6EROn`QAHu#vbiCZL6s0YK(zkFe
zh&i5<tM+qjAonEse$M$$?q7RxGKktiCyAefyKeN-j*{!!n`R@Z^@mSE{fho|U7oR1
z_q}**eaS7=>hq!6rM!RoZ?=%6UYI&W=E7M0sZLI3if}EA56@D@u}@2sRvomjch{47
z6e992=+A+LPRdQgoGY_3^``1^%z-Radxf4m&I}@$9G!HUi<wO1O7vFr5LD;2sK#m4
zdy>gyZp)hnBDgo~S0r{h$0p}ZhAdR$-ijP<$78eQ>J$<DALvA+{<_&;skk3Zi)zg=
PHo9S=2ZIRqLnop=Hl9ce

diff --git a/data/meshes/robot_box.stl b/data/meshes/robot_box.stl
new file mode 100644
index 0000000000000000000000000000000000000000..8e2180da3ee15ddc5e0f5766ea3670d2b8568535
GIT binary patch
literal 1284
zcmb7CyGjE=6dgtV0tKzIr51{q1uL^42o|FF7{peRRBA$05G>p#Rci5#(MGUMwh^*Z
ziYQTph<}m7MhMAx@64{AlrGH7-93-{*qJ-X=L&n7w3995ww>9n%uYH}7@wM$PCBEz
z`<u?>nE2N-+{O0Q<=IH;f)<@2$I%&H(fhgm78;3fg}y@Mlo;hd)vr^R!n+~HiDfY(
z&XXc#$PS#>x<@%YM2-o)jacZ!T;J>HM6fQ4RrZMcKo+X4g7>@o2Nx0S9G!%avOl0a
zs!x<n4nn!!5Y<?%5G%4#Va1YcBoV>6VLnrplCtP(ov0!U)i^h+SS3Y^6o}yeKqu~_
z=<>W4rF3yV*e$AsSdJ8Hq(B7op%YgXKfZc<S(tgHmHiq_aZIbm@jIRMC^l^0YJ7#r
zGcg*Vj-9#`-Ul(BXw^3kQ^cro9*#*_V+W3{JMUT_d5Am``!iyp6La}q4Fv-tU&TI<
zg=(wdy{#)QBG@@PaWy>wRit|9ULgzBSS@>Bn|syL%_Jf?H*_)`tB%gO9o?)T3)MI`
q(}!y7lDSui;Qv4;A=sZM`%Nd#2fIZz_fax8QHXgL5zL29Li_+WO&hoX

literal 0
HcmV?d00001

diff --git a/data/urdf/box.urdf b/data/urdf/box.urdf
index 90b6109..3719aba 100644
--- a/data/urdf/box.urdf
+++ b/data/urdf/box.urdf
@@ -3,7 +3,7 @@
     <visual>
       <origin xyz="0 0 0" rpy="0 0 0" />
       <geometry>
-        <box size="0.05 0.05 0.05"/>
+        <mesh filename="package://hpp-rbprm-corba/meshes/robot_box.stl"/>
       </geometry>
       <material name="white">
         <color rgba="1 1 1 1"/>
@@ -12,7 +12,7 @@
     <collision>
       <origin xyz="0 0 0" rpy="0 0 0" />
       <geometry>
-        <box size="0.05 0.05 0.05"/>
+        <mesh filename="package://hpp-rbprm-corba/meshes/box.stl"/>
       </geometry>
     </collision>
   </link>
diff --git a/data/urdf/box_rom.urdf b/data/urdf/box_rom.urdf
index a3cce00..bbf27ab 100644
--- a/data/urdf/box_rom.urdf
+++ b/data/urdf/box_rom.urdf
@@ -3,7 +3,7 @@
     <visual>
       <origin xyz="0 0 0" rpy="0 0 0" />
       <geometry>
-        <box size="0.1 0.1 0.1"/>
+        <mesh filename="package://hpp-rbprm-corba/meshes/box_rom.stl"/>
       </geometry>
       <material name="white">
         <color rgba="1 1 1 1"/>
@@ -12,7 +12,7 @@
     <collision>
       <origin xyz="0 0 0" rpy="0 0 0" />
       <geometry>
-        <box size="0.1 0.1 0.1"/>
+        <mesh filename="package://hpp-rbprm-corba/meshes/box_rom.stl"/>
       </geometry>
     </collision>
   </link>
diff --git a/script/load.py b/script/load.py
index 4fb7bf8..9a68d80 100644
--- a/script/load.py
+++ b/script/load.py
@@ -23,22 +23,8 @@ r = Viewer (ps)
 
 q_init = rbprmBuilder.getCurrentConfig ()
 q_goal = q_init [::]
-q_init [0:3] = [0, -0.5, 0.4]
-
-#~ rank = rbprmBuilder.rankInConfiguration ['torso_lift_joint']
-#~ q_init [rank] = 0.2
-r (q_init)
-
-q_goal [0:3] = [1, -0.5, 1]
-#~ q_goal [0:3] = [-3.2, 0, 3]
-#~ rank = rbprmBuilder.rankInConfiguration ['l_shoulder_lift_joint']
-#~ q_goal [rank] = 0.5
-#~ rank = rbprmBuilder.rankInConfiguration ['l_elbow_flex_joint']
-#~ q_goal [rank] = -0.5
-#~ rank = rbprmBuilder.rankInConfiguration ['r_shoulder_lift_joint']
-#~ q_goal [rank] = 0.5
-#~ rank = rbprmBuilder.rankInConfiguration ['r_elbow_flex_joint']
-#~ q_goal [rank] = -0.5
+q_init [0:3] = [0, -0.5, 0]
+q_goal [0:3] = [1.1, -0.5, 1]
 r (q_goal)
 
 r.loadObstacleModel (packageName, "scene", "car")
@@ -47,7 +33,7 @@ ps.setInitialConfig (q_init)
 ps.addGoalConfig (q_goal)
 
 ps.client.problem.selectConFigurationShooter("RbprmShooter")
-
+ps.client.problem.selectPathValidation("RbprmPathValidation",0.05)
 ps.solve ()
 
 
diff --git a/script/load2.py b/script/load2.py
new file mode 100644
index 0000000..4fb7bf8
--- /dev/null
+++ b/script/load2.py
@@ -0,0 +1,58 @@
+from hpp.corbaserver.rbprm.rbprmbuilder import Builder
+from hpp.gepetto import Viewer
+
+rootJointType = 'freeflyer'
+packageName = 'hpp-rbprm-corba'
+meshPackageName = 'hpp-rbprm-corba'
+urdfName = 'box'
+urdfNameRom = 'box_rom'
+urdfSuffix = ""
+srdfSuffix = ""
+
+rbprmBuilder = Builder ()
+
+rbprmBuilder.loadModel(urdfName, urdfNameRom, rootJointType, meshPackageName, packageName, urdfSuffix, srdfSuffix)
+rbprmBuilder.setJointBounds ("base_joint_xyz", [0, 2, -2, 0, 0, 1.5])
+
+#~ from hpp.corbaserver.rbprm. import ProblemSolver
+from hpp.corbaserver.rbprm.problem_solver import ProblemSolver
+
+ps = ProblemSolver( rbprmBuilder )
+
+r = Viewer (ps)
+
+q_init = rbprmBuilder.getCurrentConfig ()
+q_goal = q_init [::]
+q_init [0:3] = [0, -0.5, 0.4]
+
+#~ rank = rbprmBuilder.rankInConfiguration ['torso_lift_joint']
+#~ q_init [rank] = 0.2
+r (q_init)
+
+q_goal [0:3] = [1, -0.5, 1]
+#~ q_goal [0:3] = [-3.2, 0, 3]
+#~ rank = rbprmBuilder.rankInConfiguration ['l_shoulder_lift_joint']
+#~ q_goal [rank] = 0.5
+#~ rank = rbprmBuilder.rankInConfiguration ['l_elbow_flex_joint']
+#~ q_goal [rank] = -0.5
+#~ rank = rbprmBuilder.rankInConfiguration ['r_shoulder_lift_joint']
+#~ q_goal [rank] = 0.5
+#~ rank = rbprmBuilder.rankInConfiguration ['r_elbow_flex_joint']
+#~ q_goal [rank] = -0.5
+r (q_goal)
+
+r.loadObstacleModel (packageName, "scene", "car")
+
+ps.setInitialConfig (q_init)
+ps.addGoalConfig (q_goal)
+
+ps.client.problem.selectConFigurationShooter("RbprmShooter")
+
+ps.solve ()
+
+
+from hpp.gepetto import PathPlayer
+pp = PathPlayer (rbprmBuilder.client.basic, r)
+
+pp (0)
+
diff --git a/src/hpp/corbaserver/rbprm/rbprmbuilder.py b/src/hpp/corbaserver/rbprm/rbprmbuilder.py
index e77378d..c43d630 100644
--- a/src/hpp/corbaserver/rbprm/rbprmbuilder.py
+++ b/src/hpp/corbaserver/rbprm/rbprmbuilder.py
@@ -49,9 +49,9 @@ class Builder (object):
         self.load = load
         
     ## Virtual function to load the robot model
-    def loadModel (self, urdfName, rootJointType, packageName, meshPackageName, urdfSuffix, srdfSuffix):
+    def loadModel (self, urdfName, urdfNamerom, rootJointType, packageName, meshPackageName, urdfSuffix, srdfSuffix):
 		self.client.rbprm.rbprm.loadRobotRomModel(urdfName, rootJointType, packageName, urdfName, urdfSuffix, srdfSuffix)
-		self.client.rbprm.rbprm.loadRobotCompleteModel(urdfName, rootJointType, packageName, urdfName, urdfSuffix, srdfSuffix)		
+		self.client.rbprm.rbprm.loadRobotCompleteModel(urdfNamerom, rootJointType, packageName, urdfName, urdfSuffix, srdfSuffix)		
 		self.name = urdfName
 		self.displayName = urdfName
 		self.tf_root = "base_link"
diff --git a/src/rbprmbuilder.impl.cc b/src/rbprmbuilder.impl.cc
index 442641e..734e16c 100644
--- a/src/rbprmbuilder.impl.cc
+++ b/src/rbprmbuilder.impl.cc
@@ -19,8 +19,11 @@
 #include <hpp/util/debug.hh>
 #include "rbprmbuilder.impl.hh"
 #include "hpp/rbprm/rbprm-device.hh"
+#include "hpp/rbprm/rbprm-validation.hh"
 #include "hpp/model/urdf/util.hh"
+#include <hpp/core/collision-path-validation-report.hh>
 #include <hpp/core/problem-solver.hh>
+#include <hpp/core/discretized-collision-checking.hh>
 
 
 
@@ -95,6 +98,17 @@ namespace hpp {
         }
     }
 
+    namespace
+    {
+        hpp::core::PathValidationPtr_t createPathValidation (const hpp::model::DevicePtr_t& robot, const hpp::model::value_type& val)
+        {
+            hpp::model::RbPrmDevicePtr_t robotcast = boost::static_pointer_cast<hpp::model::RbPrmDevice>(robot);
+            hpp::rbprm::RbPrmValidationPtr_t validation(hpp::rbprm::RbPrmValidation::create(robotcast));
+            hpp::core::CollisionPathValidationReport defaultValidation;
+            return hpp::core::DiscretizedCollisionChecking::createWithValidation(robot,val ,defaultValidation, validation);
+        }
+    }
+
     void RbprmBuilder::SetProblemSolver (hpp::core::ProblemSolverPtr_t problemSolver)
     {
         problemSolver_ = problemSolver;
@@ -104,6 +118,7 @@ namespace hpp {
         // add rbprmshooter
         problemSolver->addConfigurationShooterType("RbprmShooter",
                                                    boost::bind(&BindShooter::create, boost::ref(bindShooter_), _1));
+        problemSolver->addPathValidationType("RbprmPathValidation", &createPathValidation);
     }
 
     } // namespace impl
diff --git a/src/rbprmbuilder.impl.hh b/src/rbprmbuilder.impl.hh
index 313b7bb..72fa402 100644
--- a/src/rbprmbuilder.impl.hh
+++ b/src/rbprmbuilder.impl.hh
@@ -33,23 +33,15 @@ namespace hpp {
     struct BindShooter
     {
         BindShooter(const std::size_t shootLimit = 10000,
-                    const std::size_t displacementLimit = 100)
+                    const std::size_t displacementLimit = 10)
             : shootLimit_(shootLimit)
             , displacementLimit_(displacementLimit) {}
 
         hpp::rbprm::RbPrmShooterPtr_t create (const hpp::model::DevicePtr_t& robot)
         {
-            hpp::model::DevicePtr_t pRobot = robot;
             hpp::model::RbPrmDevicePtr_t robotcast = boost::static_pointer_cast<hpp::model::RbPrmDevice>(robot);
-            hpp::rbprm::RbPrmValidationPtr_t validator = hpp::rbprm::RbPrmValidation::create(robotcast);
-            const hpp::core::ObjectVector_t& obstacles = problemSolver_->collisionObstacles();
-            for(hpp::core::ObjectVector_t::const_iterator cit = obstacles.begin();
-                cit != obstacles.end(); ++cit)
-            {
-                validator->addObstacle(*cit);
-            }
             return hpp::rbprm::RbPrmShooter::create
-                    (robotcast,problemSolver_->collisionObstacles(),validator,shootLimit_,displacementLimit_);
+                    (robotcast,problemSolver_->problem ()->collisionObstacles(),shootLimit_,displacementLimit_);
         }
         hpp::core::ProblemSolverPtr_t problemSolver_;
         std::size_t shootLimit_;
-- 
GitLab