# scikit-robot: A Flexible Framework for Robot visualization and programming in Python

[](https://github.com/iory/scikit-robot/actions)
<h4>
<a href="https://scikit-robot.readthedocs.io/en/latest/">Documentation</a> |
<a href="https://scikit-robot.readthedocs.io/en/latest/install/index.html">Installation</a> |
<a href="https://scikit-robot.readthedocs.io/en/latest/examples/index.html">Quick Start</a> |
<a href="https://scikit-robot.readthedocs.io/en/latest/reference/index.html">Python API</a> |
<a href="https://scikit-robot.readthedocs.io/en/latest/development/index.html">Contribute</a>
</h4>
Scikit-Robot is a lightweight pure-Python library for robotic kinematics,
motion planning, visualization and control.
## Installation
You may need to install some dependencies by apt-get install:
```bash
sudo apt-get update
sudo apt-get install libspatialindex-dev freeglut3-dev libsuitesparse-dev libblas-dev liblapack-dev
```
Then,
```bash
pip install scikit-robot
```
If you would like to use `Pybullet Interface`, `open3d` and `fast-simplification` for mesh simplification,
```bash
pip install scikit-robot[all]
```
## Command Line Tools
### Visualize URDF
To visualize a URDF model and inspect your robot's configuration, you can use the `visualize-urdf` command as follows:
```bash
visualize-urdf ~/.skrobot/pr2_description/pr2.urdf
```
If you experience performance issues with the default viewer, try pyrender for smoother visualization:
```bash
visualize-urdf ~/.skrobot/pr2_description/pr2.urdf --viewer pyrender
```
Running these commands should open a viewer displaying your robot’s 3D model. Below is a sample image of what you should expect.

## Create Your Own Robot Model (URDF)
If you want to build your own robot from scratch, you can refer to the [How to Create URDF from CAD Software](https://scikit-robot.readthedocs.io/en/latest/reference/how_to_create_urdf_from_cad.html) documentation.

## Features
- [x] Loading robot model from URDF ([examples/robot_models.py](examples/robot_models.py))
- [x] Forward and inverse kinematics ([examples/trimesh_scene_viewer.py](examples/trimesh_scene_viewer.py) [examples/pr2_inverse_kinematics.py](examples/pr2_inverse_kinematics.py))
- [x] Collision detection
- [x] Interactive viewer ([examples/trimesh_scene_viewer.py](examples/trimesh_scene_viewer.py))
- [x] Pybullet and ROS command interface ([examples/pybullet_robot_interface.py](examples/pybullet_robot_interface.py))
- [x] Forward and inverse dynamics
- [x] Path planning ([examples/collision_free_trajectory.py](examples/collision_free_trajectory.py))
Raw data
{
"_id": null,
"home_page": "https://github.com/iory/scikit-robot",
"name": "scikit-robot",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "iory",
"author_email": "ab.ioryz@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/f0/ac/9c0a9ab7628301c8d724b7b87cd1043e3bb38c97bd0b277012064dcb3ffa/scikit_robot-0.1.25.tar.gz",
"platform": null,
"description": "# scikit-robot: A Flexible Framework for Robot visualization and programming in Python\n\n\n[](https://github.com/iory/scikit-robot/actions)\n\n\n<h4>\n <a href=\"https://scikit-robot.readthedocs.io/en/latest/\">Documentation</a> |\n <a href=\"https://scikit-robot.readthedocs.io/en/latest/install/index.html\">Installation</a> |\n <a href=\"https://scikit-robot.readthedocs.io/en/latest/examples/index.html\">Quick Start</a> |\n <a href=\"https://scikit-robot.readthedocs.io/en/latest/reference/index.html\">Python API</a> |\n <a href=\"https://scikit-robot.readthedocs.io/en/latest/development/index.html\">Contribute</a>\n</h4>\n\nScikit-Robot is a lightweight pure-Python library for robotic kinematics,\nmotion planning, visualization and control.\n\n## Installation\nYou may need to install some dependencies by apt-get install:\n```bash\nsudo apt-get update\nsudo apt-get install libspatialindex-dev freeglut3-dev libsuitesparse-dev libblas-dev liblapack-dev\n```\n\nThen,\n```bash\npip install scikit-robot\n```\n\nIf you would like to use `Pybullet Interface`, `open3d` and `fast-simplification` for mesh simplification,\n\n```bash\npip install scikit-robot[all]\n```\n\n## Command Line Tools\n\n### Visualize URDF\n\nTo visualize a URDF model and inspect your robot's configuration, you can use the `visualize-urdf` command as follows:\n\n```bash\nvisualize-urdf ~/.skrobot/pr2_description/pr2.urdf\n```\n\nIf you experience performance issues with the default viewer, try pyrender for smoother visualization:\n\n```bash\nvisualize-urdf ~/.skrobot/pr2_description/pr2.urdf --viewer pyrender\n```\n\nRunning these commands should open a viewer displaying your robot\u2019s 3D model. Below is a sample image of what you should expect.\n\n\n\n## Create Your Own Robot Model (URDF)\n\nIf you want to build your own robot from scratch, you can refer to the [How to Create URDF from CAD Software](https://scikit-robot.readthedocs.io/en/latest/reference/how_to_create_urdf_from_cad.html) documentation.\n\n\n\n\n## Features\n\n- [x] Loading robot model from URDF ([examples/robot_models.py](examples/robot_models.py))\n- [x] Forward and inverse kinematics ([examples/trimesh_scene_viewer.py](examples/trimesh_scene_viewer.py) [examples/pr2_inverse_kinematics.py](examples/pr2_inverse_kinematics.py))\n- [x] Collision detection\n- [x] Interactive viewer ([examples/trimesh_scene_viewer.py](examples/trimesh_scene_viewer.py))\n- [x] Pybullet and ROS command interface ([examples/pybullet_robot_interface.py](examples/pybullet_robot_interface.py))\n- [x] Forward and inverse dynamics\n- [x] Path planning ([examples/collision_free_trajectory.py](examples/collision_free_trajectory.py))\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A Flexible Framework for Robot Control in Python",
"version": "0.1.25",
"project_urls": {
"Homepage": "https://github.com/iory/scikit-robot"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4afd721ac51079e77d1289931322a1d38c48d972c022e57cac85afa5af0aa502",
"md5": "b6204713408a7c07e915993363840a14",
"sha256": "321a6ad0399fc0dd00e50e25eca2e0cb0b2d03d8ad1bbb18ce81f9505deef7b0"
},
"downloads": -1,
"filename": "scikit_robot-0.1.25-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b6204713408a7c07e915993363840a14",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 771303,
"upload_time": "2025-07-09T04:31:35",
"upload_time_iso_8601": "2025-07-09T04:31:35.665327Z",
"url": "https://files.pythonhosted.org/packages/4a/fd/721ac51079e77d1289931322a1d38c48d972c022e57cac85afa5af0aa502/scikit_robot-0.1.25-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f0ac9c0a9ab7628301c8d724b7b87cd1043e3bb38c97bd0b277012064dcb3ffa",
"md5": "f0e04a63dfd6b1f8121db3bf737f1794",
"sha256": "842009d60714cbd0dd804edfd266f7492eb3b66a2dfa498cd5c95b0c2949a81a"
},
"downloads": -1,
"filename": "scikit_robot-0.1.25.tar.gz",
"has_sig": false,
"md5_digest": "f0e04a63dfd6b1f8121db3bf737f1794",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 768393,
"upload_time": "2025-07-09T04:31:37",
"upload_time_iso_8601": "2025-07-09T04:31:37.472028Z",
"url": "https://files.pythonhosted.org/packages/f0/ac/9c0a9ab7628301c8d724b7b87cd1043e3bb38c97bd0b277012064dcb3ffa/scikit_robot-0.1.25.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 04:31:37",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "iory",
"github_project": "scikit-robot",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "cached-property",
"specs": []
},
{
"name": "cached-property",
"specs": [
[
"<=",
"1.5.2"
]
]
},
{
"name": "filelock",
"specs": []
},
{
"name": "future",
"specs": []
},
{
"name": "gdown",
"specs": []
},
{
"name": "lxml",
"specs": []
},
{
"name": "networkx",
"specs": [
[
">=",
"2.2.0"
]
]
},
{
"name": "networkx",
"specs": [
[
">=",
"2.5"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.16.0"
]
]
},
{
"name": "numpy",
"specs": [
[
">=",
"1.21.0"
]
]
},
{
"name": "ordered_set",
"specs": []
},
{
"name": "packaging",
"specs": []
},
{
"name": "pillow",
"specs": []
},
{
"name": "pycollada",
"specs": [
[
"<",
"0.9"
]
]
},
{
"name": "pycollada",
"specs": [
[
"<=",
"0.9"
],
[
">=",
"0.8"
]
]
},
{
"name": "pycollada",
"specs": [
[
">=",
"0.8"
]
]
},
{
"name": "pyglet",
"specs": [
[
"<",
"2.0"
]
]
},
{
"name": "pysdfgen",
"specs": [
[
">=",
"0.2.0"
]
]
},
{
"name": "repoze.lru",
"specs": []
},
{
"name": "rtree",
"specs": []
},
{
"name": "scikit-learn",
"specs": []
},
{
"name": "scikit-learn",
"specs": [
[
">=",
"0.24.0"
]
]
},
{
"name": "scipy",
"specs": []
},
{
"name": "scipy",
"specs": [
[
"<=",
"1.2.3"
]
]
},
{
"name": "scipy",
"specs": [
[
">=",
"1.6.3"
]
]
},
{
"name": "six",
"specs": []
},
{
"name": "trimesh",
"specs": [
[
"!=",
"3.23.0"
],
[
">=",
"3.9.0"
]
]
}
],
"lcname": "scikit-robot"
}