diff --git a/notes/descartes_capability.txt b/notes/descartes_capability.txt new file mode 100644 index 0000000000000000000000000000000000000000..e5c289e1d02ef42546084d7f7b5cd631a6ad78f7 --- /dev/null +++ b/notes/descartes_capability.txt @@ -0,0 +1,64 @@ +Un proyecto de ejemplo donde se está planificando con Descartes desde Moveit es el siguiente: + +https://git.code.tecnalia.com/tecnalia_robotics/smart3d/smart3d_workcell.git + +Como podrás ver las dependencias de proyecto son: + +# UR +- git: + local-name: Universal_Robots_ROS_Driver + uri: https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git + version: master +- git: + local-name: universal_robot + uri: https://github.com/ros-industrial/universal_robot.git + version: melodic-devel-staging +# Advance IK +- git: + local-name: flexbotics_kinematics_plugin + uri: git@git.code.tecnalia.com:tecnalia_robotics/flexbotics_kinematics_plugin.git + version: noetic-devel +# Descrates +- git: + local-name: descartes + uri: https://github.com/tecnalia-advancedmanufacturing-robotics/descartes.git + version: melodic-collision-minimum +- git: + local-name: descartes_capability + uri: https://github.com/tecnalia-advancedmanufacturing-robotics/descartes_capability.git + version: ikfast +# Extras +- git: + local-name: robotnik_sensors + uri: https://github.com/RobotnikAutomation/robotnik_sensors.git + version: melodic-devel +- git: + local-name: smart3d_database + uri: git@git.code.tecnalia.com:tecnalia_robotics/smart3d/smart3d_database.git + version: main + +Conceptualmente, Descartes es una librería para buscar en un grafo. Las nuevas versiones <<Descartes Light>> han removido todo lo de modelo de la escena, robot y se enfocan únicamente en la construcción y búsqueda en el grafo. +<<descartes_capability>> es un plugin para MoveIt que preparó PikNik Robotics, nosotros lo que hemos hecho es ponerlo en Noetic y con algunas modificaciones de Iñigo para que trabaje como se esperaría que lo hiciera. De ahí que usemos el fork. + +Descartes requiere de un solver de IK que regrese más de una solución por ello el uso de IKFast. + +Para generar el Plugin de MoveIt de IKFast en la dentro del repo tienes el paquete <<smart3d_workcell/smart3d_ikfast_manipulator_plugin>> como ejemplo. +La clave está en la carpeta generate_ikfast, para que funcione necesitas: +- docker +- modelo URDF de la escena con el robot +En el readme te darás cuenta que se puede llamar el script (autoría de Miguel / Jon Azpiazu) con dos opciones -i para que te de la información de la escena, lo tendrá que hacer para tomar unos numerillos y saber entre que números de joints está definido tu robot. +Con esos números modificas el script genrate_ikfast.bash y al lanzarlo con la opción -g te generará la solución. <<Si no te aclaras me das una llamada y lo hacemos en on-line>> +Una vez genberada la IK, queda en la carpeta /src/solvers del paquete un archivo con extensión .cpp.autogen con ese nombre en mente modicficas el CMakeLists.txt del proyecto para que la macro coja el archivo que te interese. +Tambien madificas el ---ikfast_plugin_description.xml para que se exporte tu plugin y ahora moveit lo pueda "ver". + +Para que el descrates_capability esté disponible en MoveIt tienes que pasar unos argumentos cuando lanzas el move_group: + +<arg name="capabilities" value="descartes_capability/MoveGroupDescartesPathService"/> +<arg name="disable_capabilities" value="move_group/MoveGroupCartesianPathService"/> + +Más detalles tienes en el archivo set_up_moveit.launch del paquete smart3d_workcell_launch. +En la carpeta scripts del mismo paquete tienes entre otros, un ejemplo de interés: scan_moves.py, donde te darás cuenta que si todo está bien configurado usar descartes es tan simple como: +(plan, fraction) = ur_group.compute_cartesian_path(waypoints, 0.01, threshold) +donde waypoints son los puntos cartesianos sobre los que quieres planificar, usando la interfaz de MoveIt, por supuesto. + +