# Tesseract Python
[![Python](https://img.shields.io/badge/python-3.7+-blue.svg)](https://github.com/tesseract-robotics/tesseract_python)
![PyPI](https://img.shields.io/pypi/v/tesseract-robotics)
Platform | CI Status
---------------------|:---------
Linux (Focal) | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/workflows/Focal-Build/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)
Windows | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/workflows/Windows-Noetic-Build/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)
Wheels | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/actions/workflows/wheels.yml/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)
[![Github Issues](https://img.shields.io/github/issues/tesseract-robotics/tesseract_python.svg)](http://github.com/tesseract-robotics/tesseract_python/issues)
[![license - apache 2.0](https://img.shields.io/:license-Apache%202.0-yellowgreen.svg)](https://opensource.org/licenses/Apache-2.0)
[![license - bsd 2 clause](https://img.shields.io/:license-BSD%202--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause)
[![support level: consortium](https://img.shields.io/badge/support%20level-consortium-brightgreen.png)](http://rosindustrial.org/news/2016/10/7/better-supporting-a-growing-ros-industrial-software-platform)
`tesseract_python` contains Python wrappers for the Tesseract robot motion planner, generated using SWIG. These wrappers
contain most of the Tesseract functionality, including scene loading and management (URDF,SRDF, meshes), collision
checking (Bullet, FCL), kinematics (KDL, OPW, UR), planning (OMPL, Descartes, TrajOpt), and visualization
(tesseract_viewer_python)
Standalone packages are provided on PyPi (pip install) for Windows and Linux, containing all the native dependencies
for Python 3.7+.
The Tesseract Python package is developed and maintained by Wason Technology, LLC.
**Note that these are low level wrappers.** The lifecycle of objects follow the underlying C++ objects, meaning
that the target of C++ references may be destroyed before the reference, leading to a memory error. These wrappers
do not attempt to change the memory lifecycle of the underlying C++ objects.
## Documentation
See https://tesseract-robotics.github.io/tesseract_python/ for documentation.
## Installation
Standalone packages are provided on PyPi (pip install) for Windows and Linux, containing Tesseract, Tesseract
Planning, andall the native dependencies
for Python 3.7+. These packages have been tested on Windows 10, Ubuntu 20.04, and Ubuntu 22.04, but should work
on any relatively recent x64 Windows or Linux operating system. Packages are available for Python 3.7 - 3.11.
To install on Windows:
```
python -m pip install tesseract-robotics tesseract-robotics-viewer
```
To install on Ubuntu 20.04 and Ubuntu 22.04:
```
sudo apt install python3-pip python3-numpy
# The supplied version of pip on Ubuntu 20.04 is too old for manylinux_2_31, upgrade pip
python3 -m pip install -U pip
python3 -m pip install --user tesseract_robotics tesseract_robotics_viewer
```
## Example
ABB Tesseract viewer plan and viewer example:
Install `tesseract_robotics` and `tesseract_robotics_viewer` as shown in Installation section.
Clone `tesseract`, `tesseract_planning`, and `tesseract_python` repositories to retrieve example assets. This is not
necessary if the example assets are not used.
```
git clone --depth=1 https://github.com/tesseract-robotics/tesseract.git
git clone --depth=1 https://github.com/tesseract-robotics/tesseract_planning.git
git clone --depth=1 https://github.com/tesseract-robotics/tesseract_python.git
```
Set the `TESSERACT_RESOURCE_PATH` and `TESSERACT_TASK_COMPOSER_CONFIG_FILE` environmental variables so the example
can find required resources:
Linux:
```
export TESSERACT_RESOURCE_PATH=`pwd`/tesseract
export TESSERACT_TASK_COMPOSER_CONFIG_FILE=`pwd`/tesseract_planning/tesseract_task_composer/config/task_composer_plugins_no_trajopt_ifopt.yaml
```
Windows:
```
set TESSERACT_RESOURCE_PATH=%CD%/tesseract
set TESSERACT_TASK_COMPOSER_CONFIG_FILE=%CD%/tesseract_planning/tesseract_task_composer/config/task_composer_plugins_no_trajopt_ifopt.yaml
```
Now run the example!
Windows:
```
cd tesseract_python\examples
python tesseract_planning_example_composer.py
```
Linux:
```
cd tesseract_python/examples
python3 tesseract_planning_example_composer.py
```
And point a modern browser to `http://localhost:8000` to see the animation!
Example source:
```python
import re
import traceback
import os
import numpy as np
import numpy.testing as nptest
from tesseract_robotics.tesseract_common import GeneralResourceLocator
from tesseract_robotics.tesseract_environment import Environment
from tesseract_robotics.tesseract_common import FilesystemPath, Isometry3d, Translation3d, Quaterniond, \
ManipulatorInfo, AnyPoly, AnyPoly_wrap_double
from tesseract_robotics.tesseract_command_language import CartesianWaypoint, WaypointPoly, \
MoveInstructionType_FREESPACE, MoveInstruction, InstructionPoly, StateWaypoint, StateWaypointPoly, \
CompositeInstruction, MoveInstructionPoly, CartesianWaypointPoly, ProfileDictionary, \
AnyPoly_as_CompositeInstruction, CompositeInstructionOrder_ORDERED, DEFAULT_PROFILE_KEY, \
AnyPoly_wrap_CompositeInstruction, DEFAULT_PROFILE_KEY, JointWaypoint, JointWaypointPoly, \
InstructionPoly_as_MoveInstructionPoly, WaypointPoly_as_StateWaypointPoly, \
MoveInstructionPoly_wrap_MoveInstruction, StateWaypointPoly_wrap_StateWaypoint, \
CartesianWaypointPoly_wrap_CartesianWaypoint, JointWaypointPoly_wrap_JointWaypoint
from tesseract_robotics.tesseract_task_composer import TaskComposerPluginFactory, PlanningTaskComposerProblem, \
TaskComposerDataStorage, TaskComposerContext
from tesseract_robotics_viewer import TesseractViewer
# Run example FreespacePipeline planner
OMPL_DEFAULT_NAMESPACE = "OMPLMotionPlannerTask"
TRAJOPT_DEFAULT_NAMESPACE = "TrajOptMotionPlannerTask"
task_composer_filename = os.environ["TESSERACT_TASK_COMPOSER_CONFIG_FILE"]
# Initialize the resource locator and environment
locator = GeneralResourceLocator()
abb_irb2400_urdf_package_url = "package://tesseract_support/urdf/abb_irb2400.urdf"
abb_irb2400_srdf_package_url = "package://tesseract_support/urdf/abb_irb2400.srdf"
abb_irb2400_urdf_fname = FilesystemPath(locator.locateResource(abb_irb2400_urdf_package_url).getFilePath())
abb_irb2400_srdf_fname = FilesystemPath(locator.locateResource(abb_irb2400_srdf_package_url).getFilePath())
t_env = Environment()
# locator_fn must be kept alive by maintaining a reference
assert t_env.init(abb_irb2400_urdf_fname, abb_irb2400_srdf_fname, locator)
# Fill in the manipulator information. This is used to find the kinematic chain for the manipulator. This must
# match the SRDF, although the exact tcp_frame can differ if a tool is used.
manip_info = ManipulatorInfo()
manip_info.tcp_frame = "tool0"
manip_info.manipulator = "manipulator"
manip_info.working_frame = "base_link"
# Create a viewer and set the environment so the results can be displayed later
viewer = TesseractViewer()
viewer.update_environment(t_env, [0,0,0])
# Set the initial state of the robot
joint_names = ["joint_%d" % (i+1) for i in range(6)]
viewer.update_joint_positions(joint_names, np.array([1,-.2,.01,.3,-.5,1]))
# Start the viewer
viewer.start_serve_background()
# Set the initial state of the robot
t_env.setState(joint_names, np.ones(6)*0.1)
# Create the input command program waypoints
wp1 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,-0.3,1.455) * Quaterniond(0.70710678,0,0.70710678,0))
wp2 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,0.3,1.455) * Quaterniond(0.70710678,0,0.70710678,0))
wp3 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,0.5,1.455) * Quaterniond(0.70710678,0,0.70710678,0))
# Create the input command program instructions. Note the use of explicit construction of the CartesianWaypointPoly
# using the *_wrap_CartesianWaypoint functions. This is required because the Python bindings do not support implicit
# conversion from the CartesianWaypoint to the CartesianWaypointPoly.
start_instruction = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp1), MoveInstructionType_FREESPACE, "DEFAULT")
plan_f1 = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp2), MoveInstructionType_FREESPACE, "DEFAULT")
plan_f2 = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp3), MoveInstructionType_FREESPACE, "DEFAULT")
# Create the input command program. Note the use of *_wrap_MoveInstruction functions. This is required because the
# Python bindings do not support implicit conversion from the MoveInstruction to the MoveInstructionPoly.
program = CompositeInstruction("DEFAULT")
program.setManipulatorInfo(manip_info)
program.appendMoveInstruction(MoveInstructionPoly_wrap_MoveInstruction(start_instruction))
program.appendMoveInstruction(MoveInstructionPoly_wrap_MoveInstruction(plan_f1))
# program.appendMoveInstruction(MoveInstructionPoly(plan_f2))
# Create the task composer plugin factory and load the plugins
config_path = FilesystemPath(task_composer_filename)
factory = TaskComposerPluginFactory(config_path)
# Create the task composer node. In this case the FreespacePipeline is used. Many other are available.
task = factory.createTaskComposerNode("FreespacePipeline")
# Get the output keys for the task
output_key = task.getOutputKeys()[0]
# Create a profile dictionary. Profiles can be customized by adding to this dictionary and setting the profiles
# in the instructions.
profiles = ProfileDictionary()
# Create an AnyPoly containing the program. This explicit step is required because the Python bindings do not
# support implicit conversion from the CompositeInstruction to the AnyPoly.
program_anypoly = AnyPoly_wrap_CompositeInstruction(program)
# Create the task problem and input
task_planning_problem = PlanningTaskComposerProblem(t_env, profiles)
task_planning_problem.input = program_anypoly
# Create an executor to run the task
task_executor = factory.createTaskComposerExecutor("TaskflowExecutor")
# Run the task and wait for completion
future = task_executor.run(task.get(), task_planning_problem)
future.wait()
# Retrieve the output, converting the AnyPoly back to a CompositeInstruction
results = AnyPoly_as_CompositeInstruction(future.context.data_storage.getData(output_key))
# Display the output
# Print out the resulting waypoints
for instr in results:
assert instr.isMoveInstruction()
move_instr1 = InstructionPoly_as_MoveInstructionPoly(instr)
wp1 = move_instr1.getWaypoint()
assert wp1.isStateWaypoint()
wp = WaypointPoly_as_StateWaypointPoly(wp1)
print(f"Joint Positions: {wp.getPosition().flatten()} time: {wp.getTime()}")
# Update the viewer with the results to animate the trajectory
# Open web browser to http://localhost:8000 to view the results
viewer.update_trajectory(results)
viewer.plot_trajectory(results, manip_info)
input("press enter to exit")
```
## Tesseract Python Supported Packages
* **tesseract_collision** – This package contains privides a common interface for collision checking prividing several implementation of a Bullet collision library and FCL collision library. It includes both continuous and discrete collision checking for convex-convex, convex-concave and concave-concave shapes.
* **tesseract_common** – This package contains common functionality needed by the majority of the packages.
* **tesseract_environment** – This package contains the Tesseract Environment which provides functionality to add,remove,move and modify links and joint. It also manages adding object to the contact managers and provides the ability.
* **tesseract_geometry** – This package contains geometry types used by Tesseract including primitive shapes, mesh, convex hull mesh, octomap and signed distance field.
* **tesseract_kinematics** – This package contains a common interface for Forward and Inverse kinematics for Chain, Tree's and Graphs including implementation using KDL and OPW Kinematics.
* **tesseract_scene_graph** – This package contains the scene graph which is the data structure used to manage the connectivity of objects in the environment. It inherits from boost graph and provides addition functionality for adding,removing and modifying Links and Joints along with search implementation.
* **tesseract_support** – This package contains support data used for unit tests and examples throughout Tesseract.
* **tesseract_urdf** - This package contains a custom urdf parser supporting addition shapes and features currently not supported by urdfdom.
* **tesseract_visualization** – This package contains visualization utilities and libraries.
* **tesseract_command_language** - This is a generic programing language used as input for motion and process planning. It is very similar to how you currently program a robot on an industrial teach pendant.
* **tesseract_motion_planners** – This package contains a common interface for Planners and includes implementation for OMPL, TrajOpt, TrajOpt IFOPT and Descartes.
* **tesseract_task_composer** – This package contains a common interface for task pipelines and includes implementation for a wide variaty of process found industrial automation like painting, griding, welding, pick and place and more.
* **tesseract_time_parameterization** – This package contains a time parameterization algorithms and includes iterative spline.
## Related Repositories
* [Tesseract](https://github.com/tesseract-robotics/tesseract)
* [Tesseract Planning](https://github.com/tesseract-robotics/tesseract_planning)
* [Tesseract ROS](https://github.com/tesseract-robotics/tesseract_ros)
* [General Robotics Toolbox](https://github.com/rpiRobotics/rpi_general_robotics_toolbox_py)
* [PyRI Open Source Teach Pendant](https://github.com/pyri-project)
## Documentation
* [Wiki](https://ros-industrial-tesseract-python.rtfd.io)
* [Doxygen](https://tesseract-robotics.github.io/tesseract_python/)
* [Benchmark](https://tesseract-robotics.github.io/tesseract_python/dev/bench)
## Build Instructions
Building the tesseract_python package is complicated and not recommended for novice users. See the wheels.yml
workflow for details on how to build the packages and all dependencies.
Raw data
{
"_id": null,
"home_page": "https://tesseract-robotics.github.io/tesseract_python/",
"name": "tesseract-robotics",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "John Wason",
"author_email": "wason@wasontech.com",
"download_url": "",
"platform": null,
"description": "# Tesseract Python\n\n[![Python](https://img.shields.io/badge/python-3.7+-blue.svg)](https://github.com/tesseract-robotics/tesseract_python)\n\n![PyPI](https://img.shields.io/pypi/v/tesseract-robotics)\n\nPlatform | CI Status\n---------------------|:---------\nLinux (Focal) | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/workflows/Focal-Build/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)\nWindows | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/workflows/Windows-Noetic-Build/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)\nWheels | [![Build Status](https://github.com/tesseract-robotics/tesseract_python/actions/workflows/wheels.yml/badge.svg)](https://github.com/tesseract-robotics/tesseract_python/actions)\n\n[![Github Issues](https://img.shields.io/github/issues/tesseract-robotics/tesseract_python.svg)](http://github.com/tesseract-robotics/tesseract_python/issues)\n\n[![license - apache 2.0](https://img.shields.io/:license-Apache%202.0-yellowgreen.svg)](https://opensource.org/licenses/Apache-2.0)\n[![license - bsd 2 clause](https://img.shields.io/:license-BSD%202--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause)\n\n[![support level: consortium](https://img.shields.io/badge/support%20level-consortium-brightgreen.png)](http://rosindustrial.org/news/2016/10/7/better-supporting-a-growing-ros-industrial-software-platform)\n\n`tesseract_python` contains Python wrappers for the Tesseract robot motion planner, generated using SWIG. These wrappers\ncontain most of the Tesseract functionality, including scene loading and management (URDF,SRDF, meshes), collision\nchecking (Bullet, FCL), kinematics (KDL, OPW, UR), planning (OMPL, Descartes, TrajOpt), and visualization \n(tesseract_viewer_python)\n\nStandalone packages are provided on PyPi (pip install) for Windows and Linux, containing all the native dependencies \nfor Python 3.7+.\n\nThe Tesseract Python package is developed and maintained by Wason Technology, LLC.\n\n**Note that these are low level wrappers.** The lifecycle of objects follow the underlying C++ objects, meaning\nthat the target of C++ references may be destroyed before the reference, leading to a memory error. These wrappers\ndo not attempt to change the memory lifecycle of the underlying C++ objects.\n\n## Documentation\n\nSee https://tesseract-robotics.github.io/tesseract_python/ for documentation.\n\n## Installation\n\nStandalone packages are provided on PyPi (pip install) for Windows and Linux, containing Tesseract, Tesseract\nPlanning, andall the native dependencies \nfor Python 3.7+. These packages have been tested on Windows 10, Ubuntu 20.04, and Ubuntu 22.04, but should work\non any relatively recent x64 Windows or Linux operating system. Packages are available for Python 3.7 - 3.11.\n\nTo install on Windows:\n```\npython -m pip install tesseract-robotics tesseract-robotics-viewer\n```\nTo install on Ubuntu 20.04 and Ubuntu 22.04:\n\n```\nsudo apt install python3-pip python3-numpy\n# The supplied version of pip on Ubuntu 20.04 is too old for manylinux_2_31, upgrade pip\npython3 -m pip install -U pip\npython3 -m pip install --user tesseract_robotics tesseract_robotics_viewer\n```\n\n## Example\n\nABB Tesseract viewer plan and viewer example:\n\nInstall `tesseract_robotics` and `tesseract_robotics_viewer` as shown in Installation section.\n\nClone `tesseract`, `tesseract_planning`, and `tesseract_python` repositories to retrieve example assets. This is not \nnecessary if the example assets are not used.\n\n```\ngit clone --depth=1 https://github.com/tesseract-robotics/tesseract.git\ngit clone --depth=1 https://github.com/tesseract-robotics/tesseract_planning.git\ngit clone --depth=1 https://github.com/tesseract-robotics/tesseract_python.git\n```\n\nSet the `TESSERACT_RESOURCE_PATH` and `TESSERACT_TASK_COMPOSER_CONFIG_FILE` environmental variables so the example \ncan find required resources:\n\nLinux:\n\n```\nexport TESSERACT_RESOURCE_PATH=`pwd`/tesseract\nexport TESSERACT_TASK_COMPOSER_CONFIG_FILE=`pwd`/tesseract_planning/tesseract_task_composer/config/task_composer_plugins_no_trajopt_ifopt.yaml\n```\n\nWindows:\n\n```\nset TESSERACT_RESOURCE_PATH=%CD%/tesseract\nset TESSERACT_TASK_COMPOSER_CONFIG_FILE=%CD%/tesseract_planning/tesseract_task_composer/config/task_composer_plugins_no_trajopt_ifopt.yaml\n```\n\nNow run the example!\n\nWindows:\n\n```\ncd tesseract_python\\examples\npython tesseract_planning_example_composer.py\n```\n\nLinux:\n\n```\ncd tesseract_python/examples\npython3 tesseract_planning_example_composer.py\n```\n\nAnd point a modern browser to `http://localhost:8000` to see the animation!\n\nExample source:\n\n```python\nimport re\nimport traceback\nimport os\nimport numpy as np\nimport numpy.testing as nptest\n\nfrom tesseract_robotics.tesseract_common import GeneralResourceLocator\nfrom tesseract_robotics.tesseract_environment import Environment\nfrom tesseract_robotics.tesseract_common import FilesystemPath, Isometry3d, Translation3d, Quaterniond, \\\n ManipulatorInfo, AnyPoly, AnyPoly_wrap_double\nfrom tesseract_robotics.tesseract_command_language import CartesianWaypoint, WaypointPoly, \\\n MoveInstructionType_FREESPACE, MoveInstruction, InstructionPoly, StateWaypoint, StateWaypointPoly, \\\n CompositeInstruction, MoveInstructionPoly, CartesianWaypointPoly, ProfileDictionary, \\\n AnyPoly_as_CompositeInstruction, CompositeInstructionOrder_ORDERED, DEFAULT_PROFILE_KEY, \\\n AnyPoly_wrap_CompositeInstruction, DEFAULT_PROFILE_KEY, JointWaypoint, JointWaypointPoly, \\\n InstructionPoly_as_MoveInstructionPoly, WaypointPoly_as_StateWaypointPoly, \\\n MoveInstructionPoly_wrap_MoveInstruction, StateWaypointPoly_wrap_StateWaypoint, \\\n CartesianWaypointPoly_wrap_CartesianWaypoint, JointWaypointPoly_wrap_JointWaypoint\n\nfrom tesseract_robotics.tesseract_task_composer import TaskComposerPluginFactory, PlanningTaskComposerProblem, \\\n TaskComposerDataStorage, TaskComposerContext\n\nfrom tesseract_robotics_viewer import TesseractViewer\n\n# Run example FreespacePipeline planner\n\nOMPL_DEFAULT_NAMESPACE = \"OMPLMotionPlannerTask\"\nTRAJOPT_DEFAULT_NAMESPACE = \"TrajOptMotionPlannerTask\"\n\ntask_composer_filename = os.environ[\"TESSERACT_TASK_COMPOSER_CONFIG_FILE\"]\n\n# Initialize the resource locator and environment\nlocator = GeneralResourceLocator()\nabb_irb2400_urdf_package_url = \"package://tesseract_support/urdf/abb_irb2400.urdf\"\nabb_irb2400_srdf_package_url = \"package://tesseract_support/urdf/abb_irb2400.srdf\"\nabb_irb2400_urdf_fname = FilesystemPath(locator.locateResource(abb_irb2400_urdf_package_url).getFilePath())\nabb_irb2400_srdf_fname = FilesystemPath(locator.locateResource(abb_irb2400_srdf_package_url).getFilePath())\n\nt_env = Environment()\n\n# locator_fn must be kept alive by maintaining a reference\nassert t_env.init(abb_irb2400_urdf_fname, abb_irb2400_srdf_fname, locator)\n\n# Fill in the manipulator information. This is used to find the kinematic chain for the manipulator. This must\n# match the SRDF, although the exact tcp_frame can differ if a tool is used.\nmanip_info = ManipulatorInfo()\nmanip_info.tcp_frame = \"tool0\"\nmanip_info.manipulator = \"manipulator\"\nmanip_info.working_frame = \"base_link\"\n\n# Create a viewer and set the environment so the results can be displayed later\nviewer = TesseractViewer()\nviewer.update_environment(t_env, [0,0,0])\n\n# Set the initial state of the robot\njoint_names = [\"joint_%d\" % (i+1) for i in range(6)]\nviewer.update_joint_positions(joint_names, np.array([1,-.2,.01,.3,-.5,1]))\n\n# Start the viewer\nviewer.start_serve_background()\n\n# Set the initial state of the robot\nt_env.setState(joint_names, np.ones(6)*0.1)\n\n# Create the input command program waypoints\nwp1 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,-0.3,1.455) * Quaterniond(0.70710678,0,0.70710678,0))\nwp2 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,0.3,1.455) * Quaterniond(0.70710678,0,0.70710678,0))\nwp3 = CartesianWaypoint(Isometry3d.Identity() * Translation3d(0.8,0.5,1.455) * Quaterniond(0.70710678,0,0.70710678,0))\n\n# Create the input command program instructions. Note the use of explicit construction of the CartesianWaypointPoly\n# using the *_wrap_CartesianWaypoint functions. This is required because the Python bindings do not support implicit\n# conversion from the CartesianWaypoint to the CartesianWaypointPoly.\nstart_instruction = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp1), MoveInstructionType_FREESPACE, \"DEFAULT\")\nplan_f1 = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp2), MoveInstructionType_FREESPACE, \"DEFAULT\")\nplan_f2 = MoveInstruction(CartesianWaypointPoly_wrap_CartesianWaypoint(wp3), MoveInstructionType_FREESPACE, \"DEFAULT\")\n\n# Create the input command program. Note the use of *_wrap_MoveInstruction functions. This is required because the\n# Python bindings do not support implicit conversion from the MoveInstruction to the MoveInstructionPoly.\nprogram = CompositeInstruction(\"DEFAULT\")\nprogram.setManipulatorInfo(manip_info)\nprogram.appendMoveInstruction(MoveInstructionPoly_wrap_MoveInstruction(start_instruction))\nprogram.appendMoveInstruction(MoveInstructionPoly_wrap_MoveInstruction(plan_f1))\n# program.appendMoveInstruction(MoveInstructionPoly(plan_f2))\n\n# Create the task composer plugin factory and load the plugins\nconfig_path = FilesystemPath(task_composer_filename)\nfactory = TaskComposerPluginFactory(config_path)\n\n# Create the task composer node. In this case the FreespacePipeline is used. Many other are available.\ntask = factory.createTaskComposerNode(\"FreespacePipeline\")\n\n# Get the output keys for the task\noutput_key = task.getOutputKeys()[0]\n\n# Create a profile dictionary. Profiles can be customized by adding to this dictionary and setting the profiles\n# in the instructions.\nprofiles = ProfileDictionary()\n\n# Create an AnyPoly containing the program. This explicit step is required because the Python bindings do not\n# support implicit conversion from the CompositeInstruction to the AnyPoly.\nprogram_anypoly = AnyPoly_wrap_CompositeInstruction(program)\n\n# Create the task problem and input\ntask_planning_problem = PlanningTaskComposerProblem(t_env, profiles)\ntask_planning_problem.input = program_anypoly\n\n# Create an executor to run the task\ntask_executor = factory.createTaskComposerExecutor(\"TaskflowExecutor\")\n\n# Run the task and wait for completion\nfuture = task_executor.run(task.get(), task_planning_problem)\nfuture.wait()\n\n# Retrieve the output, converting the AnyPoly back to a CompositeInstruction\nresults = AnyPoly_as_CompositeInstruction(future.context.data_storage.getData(output_key))\n\n# Display the output\n# Print out the resulting waypoints\nfor instr in results:\n assert instr.isMoveInstruction()\n move_instr1 = InstructionPoly_as_MoveInstructionPoly(instr)\n wp1 = move_instr1.getWaypoint()\n assert wp1.isStateWaypoint()\n wp = WaypointPoly_as_StateWaypointPoly(wp1)\n print(f\"Joint Positions: {wp.getPosition().flatten()} time: {wp.getTime()}\")\n\n# Update the viewer with the results to animate the trajectory\n# Open web browser to http://localhost:8000 to view the results\nviewer.update_trajectory(results)\nviewer.plot_trajectory(results, manip_info)\n\ninput(\"press enter to exit\")\n```\n\n## Tesseract Python Supported Packages\n\n* **tesseract_collision** \u2013 This package contains privides a common interface for collision checking prividing several implementation of a Bullet collision library and FCL collision library. It includes both continuous and discrete collision checking for convex-convex, convex-concave and concave-concave shapes.\n* **tesseract_common** \u2013 This package contains common functionality needed by the majority of the packages.\n* **tesseract_environment** \u2013 This package contains the Tesseract Environment which provides functionality to add,remove,move and modify links and joint. It also manages adding object to the contact managers and provides the ability.\n* **tesseract_geometry** \u2013 This package contains geometry types used by Tesseract including primitive shapes, mesh, convex hull mesh, octomap and signed distance field.\n* **tesseract_kinematics** \u2013 This package contains a common interface for Forward and Inverse kinematics for Chain, Tree's and Graphs including implementation using KDL and OPW Kinematics.\n* **tesseract_scene_graph** \u2013 This package contains the scene graph which is the data structure used to manage the connectivity of objects in the environment. It inherits from boost graph and provides addition functionality for adding,removing and modifying Links and Joints along with search implementation.\n* **tesseract_support** \u2013 This package contains support data used for unit tests and examples throughout Tesseract.\n* **tesseract_urdf** - This package contains a custom urdf parser supporting addition shapes and features currently not supported by urdfdom.\n* **tesseract_visualization** \u2013 This package contains visualization utilities and libraries.\n* **tesseract_command_language** - This is a generic programing language used as input for motion and process planning. It is very similar to how you currently program a robot on an industrial teach pendant.\n* **tesseract_motion_planners** \u2013 This package contains a common interface for Planners and includes implementation for OMPL, TrajOpt, TrajOpt IFOPT and Descartes.\n* **tesseract_task_composer** \u2013 This package contains a common interface for task pipelines and includes implementation for a wide variaty of process found industrial automation like painting, griding, welding, pick and place and more.\n* **tesseract_time_parameterization** \u2013 This package contains a time parameterization algorithms and includes iterative spline.\n\n## Related Repositories\n\n* [Tesseract](https://github.com/tesseract-robotics/tesseract)\n* [Tesseract Planning](https://github.com/tesseract-robotics/tesseract_planning)\n* [Tesseract ROS](https://github.com/tesseract-robotics/tesseract_ros)\n* [General Robotics Toolbox](https://github.com/rpiRobotics/rpi_general_robotics_toolbox_py)\n* [PyRI Open Source Teach Pendant](https://github.com/pyri-project)\n\n## Documentation\n\n* [Wiki](https://ros-industrial-tesseract-python.rtfd.io)\n* [Doxygen](https://tesseract-robotics.github.io/tesseract_python/)\n* [Benchmark](https://tesseract-robotics.github.io/tesseract_python/dev/bench)\n\n## Build Instructions\n\nBuilding the tesseract_python package is complicated and not recommended for novice users. See the wheels.yml\nworkflow for details on how to build the packages and all dependencies.\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Tesseract Python Library",
"version": "0.4.0",
"project_urls": {
"Documentation": "https://tesseract-robotics.github.io/tesseract_python/",
"Homepage": "https://tesseract-robotics.github.io/tesseract_python/",
"Source": "https://github.com/tesseract-robotics/tesseract_python",
"Tracker": "https://github.com/tesseract-robotics/tesseract_python/issues"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7eb4602720e1279e1bf744604fe143d292c4e2e52f867114ce4a98262c9980db",
"md5": "3d625269a8faf12822faf0a13f1c0ff6",
"sha256": "10eee4fab00927011ae2e5ade35a23012fab0556b8958eb2ec1bd99b018fd6b1"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp310-cp310-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "3d625269a8faf12822faf0a13f1c0ff6",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 35981730,
"upload_time": "2024-01-18T21:39:09",
"upload_time_iso_8601": "2024-01-18T21:39:09.425595Z",
"url": "https://files.pythonhosted.org/packages/7e/b4/602720e1279e1bf744604fe143d292c4e2e52f867114ce4a98262c9980db/tesseract_robotics-0.4.0-cp310-cp310-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1a78e6923716504b264486f45b6ad3f3cd19488cbcb20d7002a46fc2aefa3b8d",
"md5": "dd41c3127fd0bd0ada41813a0000d8e1",
"sha256": "8a08675d8f6ebe2d6ce37ece0909f2abbf10dde3039b8dce912a982f31665bb3"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "dd41c3127fd0bd0ada41813a0000d8e1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 20071724,
"upload_time": "2024-01-18T21:39:12",
"upload_time_iso_8601": "2024-01-18T21:39:12.955243Z",
"url": "https://files.pythonhosted.org/packages/1a/78/e6923716504b264486f45b6ad3f3cd19488cbcb20d7002a46fc2aefa3b8d/tesseract_robotics-0.4.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b272787b143da17a9fa5fb5f123b0a8075ab274872c377034dbbccbdedfdbddd",
"md5": "4a69da5ea110b194c3322a3b8ed2d889",
"sha256": "40908159ae4fb42e2b046a3d02835f97568731ac2ce5513a09bf96baaeb6217e"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp311-cp311-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "4a69da5ea110b194c3322a3b8ed2d889",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 35981956,
"upload_time": "2024-01-18T21:39:18",
"upload_time_iso_8601": "2024-01-18T21:39:18.286105Z",
"url": "https://files.pythonhosted.org/packages/b2/72/787b143da17a9fa5fb5f123b0a8075ab274872c377034dbbccbdedfdbddd/tesseract_robotics-0.4.0-cp311-cp311-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7bbb45a61ea5e58aedd2d955fe9bc83c1b21320d6ccb470cd10d871d27f1636d",
"md5": "a205d78a70e5486c9b6fcfbc01c3ca02",
"sha256": "21ca9e0140793647d5d59687a6d4179b6532f26062e270f31076cb8a3a8eb97b"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "a205d78a70e5486c9b6fcfbc01c3ca02",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 20074121,
"upload_time": "2024-01-18T21:39:20",
"upload_time_iso_8601": "2024-01-18T21:39:20.943355Z",
"url": "https://files.pythonhosted.org/packages/7b/bb/45a61ea5e58aedd2d955fe9bc83c1b21320d6ccb470cd10d871d27f1636d/tesseract_robotics-0.4.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fba560121d9bd23178f2ffc093526707a1cc01f88f3f7565cc6c4aff46a06966",
"md5": "45a38346766a93d886ce8c31d645e3c3",
"sha256": "cd7a7f356b55f845c98d336a251aa341b142f6d9029f4d34ecf1ca8dc4b47d2e"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp312-cp312-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "45a38346766a93d886ce8c31d645e3c3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 35973035,
"upload_time": "2024-01-18T21:39:24",
"upload_time_iso_8601": "2024-01-18T21:39:24.540647Z",
"url": "https://files.pythonhosted.org/packages/fb/a5/60121d9bd23178f2ffc093526707a1cc01f88f3f7565cc6c4aff46a06966/tesseract_robotics-0.4.0-cp312-cp312-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7a431ca5da5d5c86917abaa46e77429b1dedacae0065a76816dd43133439ff29",
"md5": "9c29aacf8bed5abfd1215bc4c82c9a83",
"sha256": "392c764bc19d2cb8a4c039d06392ca2997381c94440fd8f896ddc89b04560d9f"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "9c29aacf8bed5abfd1215bc4c82c9a83",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 20076847,
"upload_time": "2024-01-18T21:39:28",
"upload_time_iso_8601": "2024-01-18T21:39:28.217348Z",
"url": "https://files.pythonhosted.org/packages/7a/43/1ca5da5d5c86917abaa46e77429b1dedacae0065a76816dd43133439ff29/tesseract_robotics-0.4.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fea8b241fc11dcd48750c0bd21754a241cc2cb2cd37e8590b42247ef9f34292d",
"md5": "1a43b93b69d90f32ddb020ff80635b21",
"sha256": "3e1f822dd778ec153da0df147f3ee8d1d7b661628c35997f8b17c358336d2449"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp37-cp37m-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "1a43b93b69d90f32ddb020ff80635b21",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 35959795,
"upload_time": "2024-01-18T21:39:31",
"upload_time_iso_8601": "2024-01-18T21:39:31.016296Z",
"url": "https://files.pythonhosted.org/packages/fe/a8/b241fc11dcd48750c0bd21754a241cc2cb2cd37e8590b42247ef9f34292d/tesseract_robotics-0.4.0-cp37-cp37m-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "36551654d206dd79f0176b4e9e62ba35e9e89c79a49fb13e768027d966c19a06",
"md5": "9a8847d691291b8cd20e3c28740caa5c",
"sha256": "4652b40a9d73bfc967e124651ccc384e9787b6335990394b6533dea5df8d3410"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "9a8847d691291b8cd20e3c28740caa5c",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": null,
"size": 20095916,
"upload_time": "2024-01-18T21:39:33",
"upload_time_iso_8601": "2024-01-18T21:39:33.729794Z",
"url": "https://files.pythonhosted.org/packages/36/55/1654d206dd79f0176b4e9e62ba35e9e89c79a49fb13e768027d966c19a06/tesseract_robotics-0.4.0-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "eac0aab4fee64ef92fe06a33b97a3c2971d6fc999b8e82ee7e9f582c94876344",
"md5": "e339de2828afaec9861698842d7b42ba",
"sha256": "be1d98bd296a8d857fa30d19a8434b10ab952748d69c450bccdab3807a821a7d"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp38-cp38-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "e339de2828afaec9861698842d7b42ba",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 35981469,
"upload_time": "2024-01-18T21:39:36",
"upload_time_iso_8601": "2024-01-18T21:39:36.949020Z",
"url": "https://files.pythonhosted.org/packages/ea/c0/aab4fee64ef92fe06a33b97a3c2971d6fc999b8e82ee7e9f582c94876344/tesseract_robotics-0.4.0-cp38-cp38-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58eb66a77daf5ef9b53a6efb095dba977fac79047e8cf4de166eb6d46aca7889",
"md5": "f17dc0f72f1ea2bae9faa00d95f25d1c",
"sha256": "58966d72c0f74a9405ba06eea1892be804be4afda755449f10dbdde0788e82f9"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "f17dc0f72f1ea2bae9faa00d95f25d1c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 20102862,
"upload_time": "2024-01-18T21:39:40",
"upload_time_iso_8601": "2024-01-18T21:39:40.361789Z",
"url": "https://files.pythonhosted.org/packages/58/eb/66a77daf5ef9b53a6efb095dba977fac79047e8cf4de166eb6d46aca7889/tesseract_robotics-0.4.0-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "18214c3336d08ae0949abef660b8cac710530303e52b5f5533c9eacb4791753c",
"md5": "1b31611a32bff890506eb65d58aa6542",
"sha256": "6d9177ba2e4f1f8ac28b3f8f75f3198424e26b26ba1a764bc5234ee138182698"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp39-cp39-manylinux_2_31_x86_64.whl",
"has_sig": false,
"md5_digest": "1b31611a32bff890506eb65d58aa6542",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 35981565,
"upload_time": "2024-01-18T21:39:43",
"upload_time_iso_8601": "2024-01-18T21:39:43.631474Z",
"url": "https://files.pythonhosted.org/packages/18/21/4c3336d08ae0949abef660b8cac710530303e52b5f5533c9eacb4791753c/tesseract_robotics-0.4.0-cp39-cp39-manylinux_2_31_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5e4eb65fc747622559c1dcb25b7a12059a3348351bcc5564f17cf86b97313c29",
"md5": "c1b4c8510811308e246daa925117b01f",
"sha256": "7b971aa5bbd73234d013997098c742e8958e6691b4fb11024da296f60b6bf5d8"
},
"downloads": -1,
"filename": "tesseract_robotics-0.4.0-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "c1b4c8510811308e246daa925117b01f",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 20076525,
"upload_time": "2024-01-18T21:39:46",
"upload_time_iso_8601": "2024-01-18T21:39:46.571743Z",
"url": "https://files.pythonhosted.org/packages/5e/4e/b65fc747622559c1dcb25b7a12059a3348351bcc5564f17cf86b97313c29/tesseract_robotics-0.4.0-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-18 21:39:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "tesseract-robotics",
"github_project": "tesseract_python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tesseract-robotics"
}