From e6bae9ca0c58cf78b3bdb50916da7e4f64bf9b44 Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 13:39:24 +0900 Subject: [PATCH 1/7] Fixed readthe docs settings --- .readthedocs.yml | 22 +++++++++++++++------- docs/rtd_conda.yml | 6 ------ 2 files changed, 15 insertions(+), 13 deletions(-) delete mode 100644 docs/rtd_conda.yml diff --git a/.readthedocs.yml b/.readthedocs.yml index 8d159f3e..70305893 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,8 +1,16 @@ -name: scikit-robot -type: sphinx -base: docs/source -conda: - file: docs/rtd_conda.yml +version: 2 +build: + os: "ubuntu-22.04" + tools: + python: "3.11" + +sphinx: + configuration: docs/source/conf.py + fail_on_warning: true + python: - version: 3.7 - setup_py_install: true + install: + - method: pip + path: . + extra_requirements: + - all diff --git a/docs/rtd_conda.yml b/docs/rtd_conda.yml deleted file mode 100644 index 1361b2a6..00000000 --- a/docs/rtd_conda.yml +++ /dev/null @@ -1,6 +0,0 @@ -# Conda environment definition to build documentation on RTD - -name: scikit-robot-docs -dependencies: - - python=3.10 - - cmake From 0f696533d778596d8a4807db04a0fc506b19433c Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 14:03:30 +0900 Subject: [PATCH 2/7] Fixed trimesh document path --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index e8e42498..2a2f76f2 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -213,7 +213,7 @@ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = { 'python': ('https://docs.python.org/3/', None), - 'trimesh': ('https://trimsh.org/', None), + 'trimesh': ('https://trimesh.org/', None), 'numpy': ('https://docs.scipy.org/doc/numpy/', None), } From 87b553dd8459395200e5b3a8d6c441f524b882ee Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 14:04:05 +0900 Subject: [PATCH 3/7] Add viewer docs --- docs/image/robot_models.jpg | Bin 0 -> 37471 bytes docs/source/reference/index.rst | 1 + docs/source/reference/viewers.rst | 79 ++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 docs/image/robot_models.jpg create mode 100644 docs/source/reference/viewers.rst diff --git a/docs/image/robot_models.jpg b/docs/image/robot_models.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c0c6ab2dcfe7b91f6ceaa6ee9d9088c4ec755e1 GIT binary patch literal 37471 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 + +.. code-block:: bash + + python robot_models.py --viewer trimesh + + +.. figure:: ../../image/robot_models.jpg + :scale: 100% + :align: center + + + +CommandLine Tools +================= + + +You can easily visualize a URDF by providing it as an argument to the visualize-urdf command. + + +.. code-block:: bash + + visualize-urdf ~/.skrobot/pr2_description/pr2.urdf + + +.. figure:: ../../image/pr2.png + :scale: 20% + :align: center + + +Viewer classes +============== + +TrimeshSceneViewer +------------------ + +**Description:** + The ``TrimeshSceneViewer`` is an extension of the ``trimesh.viewer.SceneViewer`` tailored for visualizing 3D scenes using the Trimesh library. It is specifically designed for 3D triangle meshes visualization and manipulation in robotic applications. + +**Key Functionalities:** + +- **Initialization and Configuration:** + Initializes with options for screen resolution and an update interval. It sets up a scene using Trimesh to manage various geometrical entities. + +- **Rendering Control:** + Manages redraws upon user interactions such as mouse clicks, drags, scrolls, and key presses. It also handles window resizing events to ensure the scene is accurately rendered. + +- **Scene Management:** + Supports dynamic addition and deletion of geometrical entities. It allows management of links and their associated meshes, enabling real-time updates based on robotic movements. + +- **Camera Management:** + Facilitates camera positioning and orientation, allowing for customizable views based on specified angles and transformations reflective of the robotic link configurations. + +PyrenderViewer +-------------- + +**Description:** + The ``PyrenderViewer`` utilizes the Pyrender library for advanced 3D rendering, ideal for creating realistic visual simulations. This viewer is particularly suited for complex rendering tasks in robotics, including detailed lighting and shading effects. + +**Key Functionalities:** + +- **Initialization and Configuration:** + The viewer is initialized with specified resolution and rendering flags, creating a scene managed by Pyrender. It supports high-quality rendering features like raymond lighting. + +- **Rendering Control:** + Handles real-time scene updates triggered by user interactions such as mouse events and keyboard inputs, ensuring the scene remains interactive and up-to-date. + +- **Scene Management:** + Similar to ``TrimeshSceneViewer``, it allows for the addition and removal of visual meshes linked to robotic models, supporting dynamic updates to the scene as robotic configurations change. + +- **Camera Management:** + Offers detailed camera setup options, including angle adjustments, distance settings, center positioning, and field of view configuration, providing flexibility in viewing angles for complex scenes. From 934e90dcbd35b780cf25c3328a7c5ef57dd15710 Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 14:16:13 +0900 Subject: [PATCH 4/7] Use main tag --- docs/source/conf.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 2a2f76f2..58e036f4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -27,7 +27,7 @@ __version__ = pkg_resources.get_distribution('scikit-robot').version on_rtd = os.environ.get('READTHEDOCS', None) == 'True' -tag = 'master' +tag = 'main' # -- Project information ----------------------------------------------------- diff --git a/setup.py b/setup.py index b970a1bc..7f3487ce 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ # Release via github-actions. commands = [ 'git tag v{:s}'.format(version), - 'git push origin master --tag', + 'git push origin main --tag', ] for cmd in commands: print('+ {}'.format(cmd)) From 07c9b597469c518a77b110371b0164db8b02f217 Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 14:16:21 +0900 Subject: [PATCH 5/7] Use en for docs language --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 58e036f4..1390507a 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -78,7 +78,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. From e08108b35d73796553d88699e59e4ebea6fa2fac Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 14:25:17 +0900 Subject: [PATCH 6/7] Enable site-package --- docs/source/conf.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1390507a..28735e10 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -250,6 +250,10 @@ def _is_git_root(path): return os.path.isdir(os.path.join(path, '.git')) +def _is_site_packages(path): + return 'site-packages' in path or 'dist-packages' in path + + _source_root = None @@ -260,7 +264,7 @@ def _find_source_root(source_abs_path): if _source_root is None: dir = os.path.dirname(source_abs_path) while True: - if _is_egg_directory(dir) or _is_git_root(dir): + if _is_egg_directory(dir) or _is_git_root(dir) or _is_site_packages(dir): # Reached the root directory _source_root = dir break From 356062d23498b5c16f9cc5036e2793de8a05d7b4 Mon Sep 17 00:00:00 2001 From: Iori Yanokura Date: Wed, 1 May 2024 15:13:06 +0900 Subject: [PATCH 7/7] 0.0.39 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 7f3487ce..1ddd47c5 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ from setuptools import setup -version = '0.0.38' +version = '0.0.39' if sys.argv[-1] == 'release':