diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 120000 index 0000000..66dd650 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1 @@ +/opt/ros/melodic/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/data/test.wav b/data/test.wav deleted file mode 100644 index f9c70d9..0000000 Binary files a/data/test.wav and /dev/null differ diff --git a/docs/conf.py b/docs/conf.py index 5b15467..523fe91 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,7 @@ # The short X.Y version version = u'v1.1' # The full version, including alpha/beta/rc tags -release = u'v1.1.1' +release = u'v1.1.2' # -- General configuration --------------------------------------------------- diff --git a/docs/docker/devel/.built_by b/docs/docker/devel/.built_by new file mode 100644 index 0000000..2e212dd --- /dev/null +++ b/docs/docker/devel/.built_by @@ -0,0 +1 @@ +catkin_make \ No newline at end of file diff --git a/docs/docker/devel/.catkin b/docs/docker/devel/.catkin new file mode 100644 index 0000000..3079de9 --- /dev/null +++ b/docs/docker/devel/.catkin @@ -0,0 +1 @@ +/home/src \ No newline at end of file diff --git a/docs/docker/devel/.rosinstall b/docs/docker/devel/.rosinstall new file mode 100644 index 0000000..8a06aa6 --- /dev/null +++ b/docs/docker/devel/.rosinstall @@ -0,0 +1,2 @@ +- setup-file: + local-name: /home/devel/setup.sh diff --git a/docs/docker/devel/_setup_util.py b/docs/docker/devel/_setup_util.py new file mode 100755 index 0000000..bd65cbd --- /dev/null +++ b/docs/docker/devel/_setup_util.py @@ -0,0 +1,304 @@ +#!/usr/bin/python2 +# -*- coding: utf-8 -*- + +# Software License Agreement (BSD License) +# +# Copyright (c) 2012, Willow Garage, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of Willow Garage, Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +"""This file generates shell code for the setup.SHELL scripts to set environment variables.""" + +from __future__ import print_function + +import argparse +import copy +import errno +import os +import platform +import sys + +CATKIN_MARKER_FILE = '.catkin' + +system = platform.system() +IS_DARWIN = (system == 'Darwin') +IS_WINDOWS = (system == 'Windows') + +PATH_TO_ADD_SUFFIX = ['bin'] +if IS_WINDOWS: + # while catkin recommends putting dll's into bin, 3rd party packages often put dll's into lib + # since Windows finds dll's via the PATH variable, prepend it with path to lib + PATH_TO_ADD_SUFFIX.extend([['lib', os.path.join('lib', 'x86_64-linux-gnu')]]) + +# subfolder of workspace prepended to CMAKE_PREFIX_PATH +ENV_VAR_SUBFOLDERS = { + 'CMAKE_PREFIX_PATH': '', + 'LD_LIBRARY_PATH' if not IS_DARWIN else 'DYLD_LIBRARY_PATH': ['lib', os.path.join('lib', 'x86_64-linux-gnu')], + 'PATH': PATH_TO_ADD_SUFFIX, + 'PKG_CONFIG_PATH': [os.path.join('lib', 'pkgconfig'), os.path.join('lib', 'x86_64-linux-gnu', 'pkgconfig')], + 'PYTHONPATH': 'lib/python2.7/dist-packages', +} + + +def rollback_env_variables(environ, env_var_subfolders): + """ + Generate shell code to reset environment variables. + + by unrolling modifications based on all workspaces in CMAKE_PREFIX_PATH. + This does not cover modifications performed by environment hooks. + """ + lines = [] + unmodified_environ = copy.copy(environ) + for key in sorted(env_var_subfolders.keys()): + subfolders = env_var_subfolders[key] + if not isinstance(subfolders, list): + subfolders = [subfolders] + value = _rollback_env_variable(unmodified_environ, key, subfolders) + if value is not None: + environ[key] = value + lines.append(assignment(key, value)) + if lines: + lines.insert(0, comment('reset environment variables by unrolling modifications based on all workspaces in CMAKE_PREFIX_PATH')) + return lines + + +def _rollback_env_variable(environ, name, subfolders): + """ + For each catkin workspace in CMAKE_PREFIX_PATH remove the first entry from env[NAME] matching workspace + subfolder. + + :param subfolders: list of str '' or subfoldername that may start with '/' + :returns: the updated value of the environment variable. + """ + value = environ[name] if name in environ else '' + env_paths = [path for path in value.split(os.pathsep) if path] + value_modified = False + for subfolder in subfolders: + if subfolder: + if subfolder.startswith(os.path.sep) or (os.path.altsep and subfolder.startswith(os.path.altsep)): + subfolder = subfolder[1:] + if subfolder.endswith(os.path.sep) or (os.path.altsep and subfolder.endswith(os.path.altsep)): + subfolder = subfolder[:-1] + for ws_path in _get_workspaces(environ, include_fuerte=True, include_non_existing=True): + path_to_find = os.path.join(ws_path, subfolder) if subfolder else ws_path + path_to_remove = None + for env_path in env_paths: + env_path_clean = env_path[:-1] if env_path and env_path[-1] in [os.path.sep, os.path.altsep] else env_path + if env_path_clean == path_to_find: + path_to_remove = env_path + break + if path_to_remove: + env_paths.remove(path_to_remove) + value_modified = True + new_value = os.pathsep.join(env_paths) + return new_value if value_modified else None + + +def _get_workspaces(environ, include_fuerte=False, include_non_existing=False): + """ + Based on CMAKE_PREFIX_PATH return all catkin workspaces. + + :param include_fuerte: The flag if paths starting with '/opt/ros/fuerte' should be considered workspaces, ``bool`` + """ + # get all cmake prefix paths + env_name = 'CMAKE_PREFIX_PATH' + value = environ[env_name] if env_name in environ else '' + paths = [path for path in value.split(os.pathsep) if path] + # remove non-workspace paths + workspaces = [path for path in paths if os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE)) or (include_fuerte and path.startswith('/opt/ros/fuerte')) or (include_non_existing and not os.path.exists(path))] + return workspaces + + +def prepend_env_variables(environ, env_var_subfolders, workspaces): + """Generate shell code to prepend environment variables for the all workspaces.""" + lines = [] + lines.append(comment('prepend folders of workspaces to environment variables')) + + paths = [path for path in workspaces.split(os.pathsep) if path] + + prefix = _prefix_env_variable(environ, 'CMAKE_PREFIX_PATH', paths, '') + lines.append(prepend(environ, 'CMAKE_PREFIX_PATH', prefix)) + + for key in sorted(key for key in env_var_subfolders.keys() if key != 'CMAKE_PREFIX_PATH'): + subfolder = env_var_subfolders[key] + prefix = _prefix_env_variable(environ, key, paths, subfolder) + lines.append(prepend(environ, key, prefix)) + return lines + + +def _prefix_env_variable(environ, name, paths, subfolders): + """ + Return the prefix to prepend to the environment variable NAME. + + Adding any path in NEW_PATHS_STR without creating duplicate or empty items. + """ + value = environ[name] if name in environ else '' + environ_paths = [path for path in value.split(os.pathsep) if path] + checked_paths = [] + for path in paths: + if not isinstance(subfolders, list): + subfolders = [subfolders] + for subfolder in subfolders: + path_tmp = path + if subfolder: + path_tmp = os.path.join(path_tmp, subfolder) + # skip nonexistent paths + if not os.path.exists(path_tmp): + continue + # exclude any path already in env and any path we already added + if path_tmp not in environ_paths and path_tmp not in checked_paths: + checked_paths.append(path_tmp) + prefix_str = os.pathsep.join(checked_paths) + if prefix_str != '' and environ_paths: + prefix_str += os.pathsep + return prefix_str + + +def assignment(key, value): + if not IS_WINDOWS: + return 'export %s="%s"' % (key, value) + else: + return 'set %s=%s' % (key, value) + + +def comment(msg): + if not IS_WINDOWS: + return '# %s' % msg + else: + return 'REM %s' % msg + + +def prepend(environ, key, prefix): + if key not in environ or not environ[key]: + return assignment(key, prefix) + if not IS_WINDOWS: + return 'export %s="%s$%s"' % (key, prefix, key) + else: + return 'set %s=%s%%%s%%' % (key, prefix, key) + + +def find_env_hooks(environ, cmake_prefix_path): + """Generate shell code with found environment hooks for the all workspaces.""" + lines = [] + lines.append(comment('found environment hooks in workspaces')) + + generic_env_hooks = [] + generic_env_hooks_workspace = [] + specific_env_hooks = [] + specific_env_hooks_workspace = [] + generic_env_hooks_by_filename = {} + specific_env_hooks_by_filename = {} + generic_env_hook_ext = 'bat' if IS_WINDOWS else 'sh' + specific_env_hook_ext = environ['CATKIN_SHELL'] if not IS_WINDOWS and 'CATKIN_SHELL' in environ and environ['CATKIN_SHELL'] else None + # remove non-workspace paths + workspaces = [path for path in cmake_prefix_path.split(os.pathsep) if path and os.path.isfile(os.path.join(path, CATKIN_MARKER_FILE))] + for workspace in reversed(workspaces): + env_hook_dir = os.path.join(workspace, 'etc', 'catkin', 'profile.d') + if os.path.isdir(env_hook_dir): + for filename in sorted(os.listdir(env_hook_dir)): + if filename.endswith('.%s' % generic_env_hook_ext): + # remove previous env hook with same name if present + if filename in generic_env_hooks_by_filename: + i = generic_env_hooks.index(generic_env_hooks_by_filename[filename]) + generic_env_hooks.pop(i) + generic_env_hooks_workspace.pop(i) + # append env hook + generic_env_hooks.append(os.path.join(env_hook_dir, filename)) + generic_env_hooks_workspace.append(workspace) + generic_env_hooks_by_filename[filename] = generic_env_hooks[-1] + elif specific_env_hook_ext is not None and filename.endswith('.%s' % specific_env_hook_ext): + # remove previous env hook with same name if present + if filename in specific_env_hooks_by_filename: + i = specific_env_hooks.index(specific_env_hooks_by_filename[filename]) + specific_env_hooks.pop(i) + specific_env_hooks_workspace.pop(i) + # append env hook + specific_env_hooks.append(os.path.join(env_hook_dir, filename)) + specific_env_hooks_workspace.append(workspace) + specific_env_hooks_by_filename[filename] = specific_env_hooks[-1] + env_hooks = generic_env_hooks + specific_env_hooks + env_hooks_workspace = generic_env_hooks_workspace + specific_env_hooks_workspace + count = len(env_hooks) + lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_COUNT', count)) + for i in range(count): + lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d' % i, env_hooks[i])) + lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d_WORKSPACE' % i, env_hooks_workspace[i])) + return lines + + +def _parse_arguments(args=None): + parser = argparse.ArgumentParser(description='Generates code blocks for the setup.SHELL script.') + parser.add_argument('--extend', action='store_true', help='Skip unsetting previous environment variables to extend context') + parser.add_argument('--local', action='store_true', help='Only consider this prefix path and ignore other prefix path in the environment') + return parser.parse_known_args(args=args)[0] + + +if __name__ == '__main__': + try: + try: + args = _parse_arguments() + except Exception as e: + print(e, file=sys.stderr) + sys.exit(1) + + if not args.local: + # environment at generation time + CMAKE_PREFIX_PATH = r'/opt/ros/melodic'.split(';') + else: + # don't consider any other prefix path than this one + CMAKE_PREFIX_PATH = [] + # prepend current workspace if not already part of CPP + base_path = os.path.dirname(__file__) + # CMAKE_PREFIX_PATH uses forward slash on all platforms, but __file__ is platform dependent + # base_path on Windows contains backward slashes, need to be converted to forward slashes before comparison + if os.path.sep != '/': + base_path = base_path.replace(os.path.sep, '/') + + if base_path not in CMAKE_PREFIX_PATH: + CMAKE_PREFIX_PATH.insert(0, base_path) + CMAKE_PREFIX_PATH = os.pathsep.join(CMAKE_PREFIX_PATH) + + environ = dict(os.environ) + lines = [] + if not args.extend: + lines += rollback_env_variables(environ, ENV_VAR_SUBFOLDERS) + lines += prepend_env_variables(environ, ENV_VAR_SUBFOLDERS, CMAKE_PREFIX_PATH) + lines += find_env_hooks(environ, CMAKE_PREFIX_PATH) + print('\n'.join(lines)) + + # need to explicitly flush the output + sys.stdout.flush() + except IOError as e: + # and catch potential "broken pipe" if stdout is not writable + # which can happen when piping the output to a file but the disk is full + if e.errno == errno.EPIPE: + print(e, file=sys.stderr) + sys.exit(2) + raise + + sys.exit(0) diff --git a/docs/docker/devel/cmake.lock b/docs/docker/devel/cmake.lock new file mode 100644 index 0000000..e69de29 diff --git a/docs/docker/devel/env.sh b/docs/docker/devel/env.sh new file mode 100755 index 0000000..8aa9d24 --- /dev/null +++ b/docs/docker/devel/env.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env sh +# generated from catkin/cmake/templates/env.sh.in + +if [ $# -eq 0 ] ; then + /bin/echo "Usage: env.sh COMMANDS" + /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually." + exit 1 +fi + +# ensure to not use different shell type which was set before +CATKIN_SHELL=sh + +# source setup.sh from same directory as this file +_CATKIN_SETUP_DIR=$(cd "`dirname "$0"`" > /dev/null && pwd) +. "$_CATKIN_SETUP_DIR/setup.sh" +exec "$@" diff --git a/docs/docker/devel/local_setup.bash b/docs/docker/devel/local_setup.bash new file mode 100644 index 0000000..7da0d97 --- /dev/null +++ b/docs/docker/devel/local_setup.bash @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# generated from catkin/cmake/templates/local_setup.bash.in + +CATKIN_SHELL=bash + +# source setup.sh from same directory as this file +_CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd) +. "$_CATKIN_SETUP_DIR/setup.sh" --extend --local diff --git a/docs/docker/devel/local_setup.sh b/docs/docker/devel/local_setup.sh new file mode 100644 index 0000000..ba8ee2f --- /dev/null +++ b/docs/docker/devel/local_setup.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +# generated from catkin/cmake/template/local_setup.sh.in + +# since this file is sourced either use the provided _CATKIN_SETUP_DIR +# or fall back to the destination set at configure time +: ${_CATKIN_SETUP_DIR:=/home/devel} +CATKIN_SETUP_UTIL_ARGS="--extend --local" +. "$_CATKIN_SETUP_DIR/setup.sh" +unset CATKIN_SETUP_UTIL_ARGS diff --git a/docs/docker/devel/local_setup.zsh b/docs/docker/devel/local_setup.zsh new file mode 100644 index 0000000..e692acc --- /dev/null +++ b/docs/docker/devel/local_setup.zsh @@ -0,0 +1,8 @@ +#!/usr/bin/env zsh +# generated from catkin/cmake/templates/local_setup.zsh.in + +CATKIN_SHELL=zsh + +# source setup.sh from same directory as this file +_CATKIN_SETUP_DIR=$(builtin cd -q "`dirname "$0"`" > /dev/null && pwd) +emulate -R zsh -c 'source "$_CATKIN_SETUP_DIR/setup.sh" --extend --local' diff --git a/docs/docker/devel/setup.bash b/docs/docker/devel/setup.bash new file mode 100644 index 0000000..ff47af8 --- /dev/null +++ b/docs/docker/devel/setup.bash @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# generated from catkin/cmake/templates/setup.bash.in + +CATKIN_SHELL=bash + +# source setup.sh from same directory as this file +_CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd) +. "$_CATKIN_SETUP_DIR/setup.sh" diff --git a/docs/docker/devel/setup.sh b/docs/docker/devel/setup.sh new file mode 100644 index 0000000..2303ba0 --- /dev/null +++ b/docs/docker/devel/setup.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env sh +# generated from catkin/cmake/template/setup.sh.in + +# Sets various environment variables and sources additional environment hooks. +# It tries it's best to undo changes from a previously sourced setup file before. +# Supported command line options: +# --extend: skips the undoing of changes from a previously sourced setup file +# --local: only considers this workspace but not the chained ones +# In plain sh shell which doesn't support arguments for sourced scripts you can +# set the environment variable `CATKIN_SETUP_UTIL_ARGS=--extend/--local` instead. + +# since this file is sourced either use the provided _CATKIN_SETUP_DIR +# or fall back to the destination set at configure time +: ${_CATKIN_SETUP_DIR:=/home/devel} +_SETUP_UTIL="$_CATKIN_SETUP_DIR/_setup_util.py" +unset _CATKIN_SETUP_DIR + +if [ ! -f "$_SETUP_UTIL" ]; then + echo "Missing Python script: $_SETUP_UTIL" + return 22 +fi + +# detect if running on Darwin platform +_UNAME=`uname -s` +_IS_DARWIN=0 +if [ "$_UNAME" = "Darwin" ]; then + _IS_DARWIN=1 +fi +unset _UNAME + +# make sure to export all environment variables +export CMAKE_PREFIX_PATH +if [ $_IS_DARWIN -eq 0 ]; then + export LD_LIBRARY_PATH +else + export DYLD_LIBRARY_PATH +fi +unset _IS_DARWIN +export PATH +export PKG_CONFIG_PATH +export PYTHONPATH + +# remember type of shell if not already set +if [ -z "$CATKIN_SHELL" ]; then + CATKIN_SHELL=sh +fi + +# invoke Python script to generate necessary exports of environment variables +# use TMPDIR if it exists, otherwise fall back to /tmp +if [ -d "${TMPDIR:-}" ]; then + _TMPDIR="${TMPDIR}" +else + _TMPDIR=/tmp +fi +_SETUP_TMP=`mktemp "${_TMPDIR}/setup.sh.XXXXXXXXXX"` +unset _TMPDIR +if [ $? -ne 0 -o ! -f "$_SETUP_TMP" ]; then + echo "Could not create temporary file: $_SETUP_TMP" + return 1 +fi +CATKIN_SHELL=$CATKIN_SHELL "$_SETUP_UTIL" $@ ${CATKIN_SETUP_UTIL_ARGS:-} >> "$_SETUP_TMP" +_RC=$? +if [ $_RC -ne 0 ]; then + if [ $_RC -eq 2 ]; then + echo "Could not write the output of '$_SETUP_UTIL' to temporary file '$_SETUP_TMP': may be the disk if full?" + else + echo "Failed to run '\"$_SETUP_UTIL\" $@': return code $_RC" + fi + unset _RC + unset _SETUP_UTIL + rm -f "$_SETUP_TMP" + unset _SETUP_TMP + return 1 +fi +unset _RC +unset _SETUP_UTIL +. "$_SETUP_TMP" +rm -f "$_SETUP_TMP" +unset _SETUP_TMP + +# source all environment hooks +_i=0 +while [ $_i -lt $_CATKIN_ENVIRONMENT_HOOKS_COUNT ]; do + eval _envfile=\$_CATKIN_ENVIRONMENT_HOOKS_$_i + unset _CATKIN_ENVIRONMENT_HOOKS_$_i + eval _envfile_workspace=\$_CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE + unset _CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE + # set workspace for environment hook + CATKIN_ENV_HOOK_WORKSPACE=$_envfile_workspace + . "$_envfile" + unset CATKIN_ENV_HOOK_WORKSPACE + _i=$((_i + 1)) +done +unset _i + +unset _CATKIN_ENVIRONMENT_HOOKS_COUNT diff --git a/docs/docker/devel/setup.zsh b/docs/docker/devel/setup.zsh new file mode 100644 index 0000000..9f780b7 --- /dev/null +++ b/docs/docker/devel/setup.zsh @@ -0,0 +1,8 @@ +#!/usr/bin/env zsh +# generated from catkin/cmake/templates/setup.zsh.in + +CATKIN_SHELL=zsh + +# source setup.sh from same directory as this file +_CATKIN_SETUP_DIR=$(builtin cd -q "`dirname "$0"`" > /dev/null && pwd) +emulate -R zsh -c 'source "$_CATKIN_SETUP_DIR/setup.sh"' diff --git a/docs/index.rst b/docs/index.rst index 8779f68..f14125a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -45,6 +45,9 @@ Version compatibility * - 1.1.1 - 4.0.1 - ``Niryo One``, ``Ned``, ``Ned2`` + * - 1.1.2 + - >=4.1.1 + - ``Niryo One``, ``Ned``, ``Ned2`` Before getting started ---------------------------- @@ -92,6 +95,7 @@ Learn how to use the PyNiryo package to implement various tasks. source/examples/examples_tool_action source/examples/examples_conveyor source/examples/examples_vision + source/examples/examples_frames source/examples/code_templates API Documentation diff --git a/docs/locale/en/LC_MESSAGES/index.po b/docs/locale/en/LC_MESSAGES/index.po index b2e86f9..771c905 100644 --- a/docs/locale/en/LC_MESSAGES/index.po +++ b/docs/locale/en/LC_MESSAGES/index.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-08 10:44+0000\n" +"POT-Creation-Date: 2022-05-03 09:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,19 +18,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" -#: ../../index.rst:66 ../../index.rst:73 +#: ../../index.rst:69 ../../index.rst:76 msgid "Setup" msgstr "" -#: ../../index.rst:82 ../../index.rst:86 +#: ../../index.rst:85 ../../index.rst:89 msgid "Examples" msgstr "" -#: ../../index.rst:98 ../../index.rst:106 +#: ../../index.rst:102 ../../index.rst:110 msgid "API Documentation" msgstr "" -#: ../../index.rst:119 +#: ../../index.rst:123 msgid "Image Processing" msgstr "" @@ -106,7 +106,7 @@ msgstr "" msgid "4.0.0" msgstr "" -#: ../../index.rst:44 ../../index.rst:47 +#: ../../index.rst:44 ../../index.rst:47 ../../index.rst:50 msgid "``Niryo One``, ``Ned``, ``Ned2``" msgstr "" @@ -118,80 +118,88 @@ msgstr "" msgid "4.0.1" msgstr "" -#: ../../index.rst:50 +#: ../../index.rst:48 +msgid "1.1.2" +msgstr "" + +#: ../../index.rst:49 +msgid ">=4.1.1" +msgstr "" + +#: ../../index.rst:53 msgid "Before getting started" msgstr "" -#: ../../index.rst:54 +#: ../../index.rst:57 msgid "" "If you haven’t already done so, make sure to learn about the ROS robot " "software by reading `ROS documentation " "`_." msgstr "" -#: ../../index.rst:57 +#: ../../index.rst:60 msgid "" "This documentation also contains everything you need to know if you want " "to use Ned through simulation." msgstr "" -#: ../../index.rst:61 +#: ../../index.rst:64 msgid "Sections organization" msgstr "" -#: ../../index.rst:63 +#: ../../index.rst:66 msgid "This document is organized in 4 main sections." msgstr "" -#: ../../index.rst:68 +#: ../../index.rst:71 msgid "Install & Setup your environment in order to use Ned with PyNiryo." msgstr "" -#: ../../index.rst:70 +#: ../../index.rst:73 msgid "" "Firstly, follow :doc:`Installation instructions " "`, then :doc:`find your Robot IP address " "` to be ready." msgstr "" -#: ../../index.rst:84 +#: ../../index.rst:87 msgid "Learn how to use the PyNiryo package to implement various tasks." msgstr "" -#: ../../index.rst:100 +#: ../../index.rst:104 msgid "" "Master controls with PyNiryo with full the detailed functions :doc:`here " "`." msgstr "" -#: ../../index.rst:103 +#: ../../index.rst:107 msgid "" "Discover also :doc:`Vision Functions " "` to create your own image " "processing pipelines!" msgstr "" -#: ../../index.rst:113 +#: ../../index.rst:117 msgid "Start with Image Processing" msgstr "" -#: ../../index.rst:116 +#: ../../index.rst:120 msgid "Discover how to create your own image processing pipelines!" msgstr "" -#: ../../index.rst:128 +#: ../../index.rst:132 msgid "Indices and tables" msgstr "" -#: ../../index.rst:130 +#: ../../index.rst:134 msgid ":ref:`genindex`" msgstr "" -#: ../../index.rst:131 +#: ../../index.rst:135 msgid ":ref:`modindex`" msgstr "" -#: ../../index.rst:132 +#: ../../index.rst:136 msgid ":ref:`search`" msgstr "" diff --git a/docs/locale/en/LC_MESSAGES/source/api_doc/api.po b/docs/locale/en/LC_MESSAGES/source/api_doc/api.po index 1215e36..44c1f0c 100644 --- a/docs/locale/en/LC_MESSAGES/source/api_doc/api.po +++ b/docs/locale/en/LC_MESSAGES/source/api_doc/api.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 15:41+0000\n" +"POT-Creation-Date: 2022-04-13 14:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -105,14 +105,18 @@ msgstr "" #: api.tcp_client.NiryoRobot.calibrate api.tcp_client.NiryoRobot.close_gripper #: api.tcp_client.NiryoRobot.connect api.tcp_client.NiryoRobot.control_conveyor #: api.tcp_client.NiryoRobot.deactivate_electromagnet +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.delete_workspace #: api.tcp_client.NiryoRobot.detect_object #: api.tcp_client.NiryoRobot.digital_read -#: api.tcp_client.NiryoRobot.digital_write api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.digital_write +#: api.tcp_client.NiryoRobot.edit_dynamic_frame +#: api.tcp_client.NiryoRobot.enable_tcp #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints #: api.tcp_client.NiryoRobot.forward_kinematics #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame #: api.tcp_client.NiryoRobot.get_sound_duration #: api.tcp_client.NiryoRobot.get_target_pose_from_cam #: api.tcp_client.NiryoRobot.get_target_pose_from_rel @@ -134,12 +138,16 @@ msgstr "" #: api.tcp_client.NiryoRobot.led_ring_wipe #: api.tcp_client.NiryoRobot.move_joints #: api.tcp_client.NiryoRobot.move_linear_pose -#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_to_object +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_relative +#: api.tcp_client.NiryoRobot.move_to_object #: api.tcp_client.NiryoRobot.open_gripper #: api.tcp_client.NiryoRobot.pick_and_place #: api.tcp_client.NiryoRobot.pick_from_pose #: api.tcp_client.NiryoRobot.place_from_pose #: api.tcp_client.NiryoRobot.play_sound api.tcp_client.NiryoRobot.run_conveyor +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses #: api.tcp_client.NiryoRobot.save_pose #: api.tcp_client.NiryoRobot.save_trajectory #: api.tcp_client.NiryoRobot.save_workspace_from_points @@ -169,19 +177,23 @@ msgstr "" #: api.tcp_client.NiryoRobot.activate_electromagnet #: api.tcp_client.NiryoRobot.analog_read api.tcp_client.NiryoRobot.analog_write #: api.tcp_client.NiryoRobot.calibrate api.tcp_client.NiryoRobot.calibrate_auto +#: api.tcp_client.NiryoRobot.clean_trajectory_memory #: api.tcp_client.NiryoRobot.close_connection #: api.tcp_client.NiryoRobot.close_gripper api.tcp_client.NiryoRobot.connect #: api.tcp_client.NiryoRobot.control_conveyor #: api.tcp_client.NiryoRobot.deactivate_electromagnet +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.delete_pose #: api.tcp_client.NiryoRobot.delete_trajectory #: api.tcp_client.NiryoRobot.delete_workspace #: api.tcp_client.NiryoRobot.detect_object #: api.tcp_client.NiryoRobot.digital_read -#: api.tcp_client.NiryoRobot.digital_write api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.digital_write +#: api.tcp_client.NiryoRobot.edit_dynamic_frame +#: api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.execute_registered_trajectory #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints -#: api.tcp_client.NiryoRobot.execute_trajectory_saved #: api.tcp_client.NiryoRobot.forward_kinematics #: api.tcp_client.NiryoRobot.get_analog_io_state #: api.tcp_client.NiryoRobot.get_camera_intrinsics @@ -196,6 +208,8 @@ msgstr "" #: api.tcp_client.NiryoRobot.get_learning_mode #: api.tcp_client.NiryoRobot.get_pose api.tcp_client.NiryoRobot.get_pose_quat #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list #: api.tcp_client.NiryoRobot.get_saved_pose_list #: api.tcp_client.NiryoRobot.get_saved_trajectory_list #: api.tcp_client.NiryoRobot.get_sound_duration @@ -225,7 +239,8 @@ msgstr "" #: api.tcp_client.NiryoRobot.led_ring_wipe #: api.tcp_client.NiryoRobot.move_joints #: api.tcp_client.NiryoRobot.move_linear_pose -#: api.tcp_client.NiryoRobot.move_pose +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_relative #: api.tcp_client.NiryoRobot.move_to_home_pose #: api.tcp_client.NiryoRobot.move_to_object #: api.tcp_client.NiryoRobot.need_calibration @@ -238,6 +253,9 @@ msgstr "" #: api.tcp_client.NiryoRobot.push_air_vacuum_pump #: api.tcp_client.NiryoRobot.release_with_tool #: api.tcp_client.NiryoRobot.reset_tcp api.tcp_client.NiryoRobot.run_conveyor +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses +#: api.tcp_client.NiryoRobot.save_last_learned_trajectory #: api.tcp_client.NiryoRobot.save_pose #: api.tcp_client.NiryoRobot.save_trajectory #: api.tcp_client.NiryoRobot.save_workspace_from_points @@ -291,7 +309,9 @@ msgstr "" msgid "Get learning mode state" msgstr "" +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.detect_object +#: api.tcp_client.NiryoRobot.edit_dynamic_frame #: api.tcp_client.NiryoRobot.get_analog_io_state #: api.tcp_client.NiryoRobot.get_camera_intrinsics #: api.tcp_client.NiryoRobot.get_connected_conveyors_id @@ -304,6 +324,8 @@ msgstr "" #: api.tcp_client.NiryoRobot.get_learning_mode #: api.tcp_client.NiryoRobot.get_pose_quat #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list #: api.tcp_client.NiryoRobot.get_sound_duration #: api.tcp_client.NiryoRobot.get_sounds #: api.tcp_client.NiryoRobot.get_target_pose_from_cam @@ -324,7 +346,11 @@ msgstr "" #: api.tcp_client.NiryoRobot.led_ring_solid #: api.tcp_client.NiryoRobot.led_ring_turn_off #: api.tcp_client.NiryoRobot.led_ring_wipe +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_relative #: api.tcp_client.NiryoRobot.move_to_object +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses #: api.tcp_client.NiryoRobot.set_conveyor #: api.tcp_client.NiryoRobot.set_led_color #: api.tcp_client.NiryoRobot.vision_pick of @@ -399,7 +425,7 @@ msgid "Move robot joints. Joints are expressed in radians." msgstr "" #: api.tcp_client.NiryoRobot.move_joints:3 -#: api.tcp_client.NiryoRobot.move_pose:4 of +#: api.tcp_client.NiryoRobot.move_pose:5 of msgid "All lines of the next example realize the same operation: ::" msgstr "" @@ -410,30 +436,22 @@ msgstr "" #: api.tcp_client.NiryoRobot.move_pose:1 of msgid "" -"Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose. x, y " -"& z are expressed in meters / roll, pitch & yaw are expressed in radians" +"Move robot end effector pose to a (x, y, z, roll, pitch, yaw, frame_name)" +" pose in a particular frame (frame_name) if defined. x, y & z are " +"expressed in meters / roll, pitch & yaw are expressed in radians" msgstr "" -#: api.tcp_client.NiryoRobot.inverse_kinematics:3 -#: api.tcp_client.NiryoRobot.move_pose:11 of +#: api.tcp_client.NiryoRobot.move_linear_pose:4 +#: api.tcp_client.NiryoRobot.move_pose:15 of msgid "" -"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " -"``PoseObject``" +"either 7 args (1 for each coordinates and 1 for the name of the frame) or" +" a list of 6 coordinates or a ``PoseObject`` and 1 for the frame name" msgstr "" #: api.tcp_client.NiryoRobot.move_linear_pose:1 of msgid "" "Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose with a" -" linear trajectory" -msgstr "" - -#: api.tcp_client.NiryoRobot.move_linear_pose:3 -#: api.tcp_client.NiryoRobot.pick_from_pose:10 -#: api.tcp_client.NiryoRobot.place_from_pose:10 -#: api.tcp_client.NiryoRobot.save_pose:4 api.tcp_client.NiryoRobot.set_tcp:4 of -msgid "" -"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " -"PoseObject" +" linear trajectory, in a particular frame (frame_name) if defined" msgstr "" #: api.tcp_client.NiryoRobot.shift_pose:1 of @@ -494,6 +512,12 @@ msgstr "" msgid "Compute inverse kinematics" msgstr "" +#: api.tcp_client.NiryoRobot.inverse_kinematics:3 of +msgid "" +"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " +"``PoseObject``" +msgstr "" + #: ../../source/api_doc/api.rst:79 msgid "Saved Poses" msgstr "" @@ -514,6 +538,14 @@ msgstr "" msgid "Save pose in robot's memory" msgstr "" +#: api.tcp_client.NiryoRobot.pick_from_pose:10 +#: api.tcp_client.NiryoRobot.place_from_pose:10 +#: api.tcp_client.NiryoRobot.save_pose:4 api.tcp_client.NiryoRobot.set_tcp:4 of +msgid "" +"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " +"PoseObject" +msgstr "" + #: api.tcp_client.NiryoRobot.delete_pose:1 of msgid "Delete pose from robot's memory" msgstr "" @@ -601,12 +633,19 @@ msgstr "" msgid "Trajectory" msgstr "" +#: api.tcp_client.NiryoRobot.get_saved_trajectory_list:1 of +msgid "Get list of trajectories' name saved in robot memory" +msgstr "" + +#: api.tcp_client.NiryoRobot.execute_registered_trajectory:1 of +msgid "Execute trajectory from Ned's memory" +msgstr "" + #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:1 of msgid "Execute trajectory from list of poses" msgstr "" -#: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:3 -#: api.tcp_client.NiryoRobot.save_trajectory:4 of +#: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:3 of msgid "List of [x,y,z,qx,qy,qz,qw] or list of [x,y,z,roll,pitch,yaw]" msgstr "" @@ -614,13 +653,22 @@ msgstr "" msgid "Execute trajectory from list of poses and joints" msgstr "" +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:3 +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:3 #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:3 #: api.tcp_client.NiryoRobot.get_analog_io_state:3 #: api.tcp_client.NiryoRobot.get_digital_io_state:3 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:3 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:3 #: api.tcp_client.NiryoRobot.led_ring_custom:4 #: api.tcp_client.NiryoRobot.led_ring_solid:3 #: api.tcp_client.NiryoRobot.led_ring_turn_off:3 -#: api.tcp_client.NiryoRobot.set_led_color:3 of +#: api.tcp_client.NiryoRobot.move_linear_relative:3 +#: api.tcp_client.NiryoRobot.move_relative:3 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:3 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:3 +#: api.tcp_client.NiryoRobot.set_led_color:3 +#: api.tcp_client.NiryoRobot.tool_reboot:3 of msgid "Example: ::" msgstr "" @@ -637,23 +685,166 @@ msgid "" "in the list." msgstr "" -#: api.tcp_client.NiryoRobot.execute_trajectory_saved:1 of -msgid "Execute trajectory from Ned's memory" -msgstr "" - #: api.tcp_client.NiryoRobot.save_trajectory:1 of msgid "Save trajectory in robot memory" msgstr "" +#: api.tcp_client.NiryoRobot.save_trajectory:3 of +msgid "" +"list of Joints [j1, j2, j3, j4, j5, j6] as waypoints to create the " +"trajectory" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_trajectory:5 of +msgid "Name you want to give to the trajectory" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_trajectory:7 of +msgid "Description you want to give to the trajectory" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_last_learned_trajectory:1 of +msgid "Save last user executed trajectory" +msgstr "" + +#: api.tcp_client.NiryoRobot.clean_trajectory_memory:1 #: api.tcp_client.NiryoRobot.delete_trajectory:1 of msgid "Delete trajectory from robot's memory" msgstr "" -#: api.tcp_client.NiryoRobot.get_saved_trajectory_list:1 of -msgid "Get list of trajectories' name saved in robot memory" +#: ../../source/api_doc/api.rst:107 +msgid "Dynamic frames" +msgstr "" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:1 of +msgid "Get list of saved dynamic frames" +msgstr "" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:9 of +msgid "list of dynamic frames name, list of description of dynamic frames" +msgstr "" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:1 of +msgid "Get name, description and pose of a dynamic frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:7 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:7 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:11 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:11 of +msgid "name of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:9 of +msgid "name, description, position and orientation of a frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:1 of +msgid "Create a dynamic frame with 3 poses (origin, x, y)" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:13 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:13 of +msgid "description of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:15 of +msgid "pose of the origin of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:17 of +msgid "pose of the point x of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:19 of +msgid "pose of the point y of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:9 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:21 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:21 of +msgid "indicate if the frame belong to a workspace" +msgstr "" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:11 +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:13 +#: api.tcp_client.NiryoRobot.led_ring_alternate:24 +#: api.tcp_client.NiryoRobot.led_ring_breath:19 +#: api.tcp_client.NiryoRobot.led_ring_chase:20 +#: api.tcp_client.NiryoRobot.led_ring_custom:12 +#: api.tcp_client.NiryoRobot.led_ring_flashing:22 +#: api.tcp_client.NiryoRobot.led_ring_go_up:20 +#: api.tcp_client.NiryoRobot.led_ring_go_up_down:20 +#: api.tcp_client.NiryoRobot.led_ring_rainbow:16 +#: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:16 +#: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:16 +#: api.tcp_client.NiryoRobot.led_ring_snake:18 +#: api.tcp_client.NiryoRobot.led_ring_solid:9 +#: api.tcp_client.NiryoRobot.led_ring_turn_off:7 +#: api.tcp_client.NiryoRobot.led_ring_wipe:15 +#: api.tcp_client.NiryoRobot.move_linear_relative:11 +#: api.tcp_client.NiryoRobot.move_relative:11 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:23 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:23 +#: api.tcp_client.NiryoRobot.set_led_color:11 of +msgid "status, message" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:1 of +msgid "Create a dynamic frame with 3 points (origin, x, y)" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:15 of +msgid "origin point of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:17 of +msgid "point x of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:19 of +msgid "point y of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:1 of +msgid "Modify a dynamic frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:9 of +msgid "new name of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:11 of +msgid "new description of the frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:1 of +msgid "Delete a dynamic frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:7 of +msgid "name of the frame to remove" +msgstr "" + +#: api.tcp_client.NiryoRobot.move_relative:1 of +msgid "Move robot end of a offset in a frame" msgstr "" -#: ../../source/api_doc/api.rst:105 +#: api.tcp_client.NiryoRobot.move_linear_relative:7 +#: api.tcp_client.NiryoRobot.move_relative:7 of +msgid "list which contains offset of x, y, z, roll, pitch, yaw" +msgstr "" + +#: api.tcp_client.NiryoRobot.move_linear_relative:9 +#: api.tcp_client.NiryoRobot.move_relative:9 of +msgid "name of local frame" +msgstr "" + +#: api.tcp_client.NiryoRobot.move_linear_relative:1 of +msgid "Move robot end of a offset by a linear movement in a frame" +msgstr "" + +#: ../../source/api_doc/api.rst:119 msgid "Tools" msgstr "" @@ -751,12 +942,10 @@ msgid "" msgstr "" #: api.tcp_client.NiryoRobot.tool_reboot:1 of -msgid "" -"Reboot the motor of the tool equipped. Useful when an Overload error " -"occurs. (cf HardwareStatus)" +msgid "Reboot the motor of the tool equparam_list = [workspace_name]" msgstr "" -#: ../../source/api_doc/api.rst:124 +#: ../../source/api_doc/api.rst:138 msgid "Hardware" msgstr "" @@ -818,7 +1007,7 @@ msgstr "" msgid "True if pressed, False else" msgstr "" -#: ../../source/api_doc/api.rst:138 +#: ../../source/api_doc/api.rst:152 msgid "Conveyor" msgstr "" @@ -862,7 +1051,7 @@ msgstr "" msgid "List of the connected conveyors' ID" msgstr "" -#: ../../source/api_doc/api.rst:148 +#: ../../source/api_doc/api.rst:162 msgid "Vision" msgstr "" @@ -1098,7 +1287,7 @@ msgstr "" msgid "Get list of workspaces' name store in robot's memory" msgstr "" -#: ../../source/api_doc/api.rst:168 +#: ../../source/api_doc/api.rst:182 msgid "Led Ring" msgstr "" @@ -1122,24 +1311,6 @@ msgstr "" msgid "Led color in a list of size 3[R, G, B]. RGB channels from 0 to 255." msgstr "" -#: api.tcp_client.NiryoRobot.led_ring_alternate:24 -#: api.tcp_client.NiryoRobot.led_ring_breath:19 -#: api.tcp_client.NiryoRobot.led_ring_chase:20 -#: api.tcp_client.NiryoRobot.led_ring_custom:12 -#: api.tcp_client.NiryoRobot.led_ring_flashing:22 -#: api.tcp_client.NiryoRobot.led_ring_go_up:20 -#: api.tcp_client.NiryoRobot.led_ring_go_up_down:20 -#: api.tcp_client.NiryoRobot.led_ring_rainbow:16 -#: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:16 -#: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:16 -#: api.tcp_client.NiryoRobot.led_ring_snake:18 -#: api.tcp_client.NiryoRobot.led_ring_solid:9 -#: api.tcp_client.NiryoRobot.led_ring_turn_off:7 -#: api.tcp_client.NiryoRobot.led_ring_wipe:15 -#: api.tcp_client.NiryoRobot.set_led_color:11 of -msgid "status, message" -msgstr "" - #: api.tcp_client.NiryoRobot.led_ring_solid:1 of msgid "Set the whole Led Ring to a fixed color." msgstr "" @@ -1307,7 +1478,7 @@ msgid "" "from 0 to 255." msgstr "" -#: ../../source/api_doc/api.rst:186 +#: ../../source/api_doc/api.rst:200 msgid "Sound" msgstr "" @@ -1384,61 +1555,61 @@ msgstr "" msgid "language of the text" msgstr "" -#: ../../source/api_doc/api.rst:197 +#: ../../source/api_doc/api.rst:211 msgid "Enums" msgstr "" -#: ../../source/api_doc/api.rst:199 +#: ../../source/api_doc/api.rst:213 msgid "Enums are used to pass specific parameters to functions." msgstr "" -#: ../../source/api_doc/api.rst:201 +#: ../../source/api_doc/api.rst:215 msgid "" "For instance, :meth:`~.api.tcp_client.NiryoRobot.shift_pose` will need a " "parameter from :class:`~.api.objects.RobotAxis` enum ::" msgstr "" -#: ../../source/api_doc/api.rst:207 +#: ../../source/api_doc/api.rst:221 msgid "List of enums:" msgstr "" -#: ../../source/api_doc/api.rst:209 +#: ../../source/api_doc/api.rst:223 msgid ":class:`~.api.enums_communication.CalibrateMode`" msgstr "" -#: ../../source/api_doc/api.rst:210 +#: ../../source/api_doc/api.rst:224 msgid ":class:`~.api.enums_communication.RobotAxis`" msgstr "" -#: ../../source/api_doc/api.rst:211 +#: ../../source/api_doc/api.rst:225 msgid ":class:`~.api.enums_communication.ToolID`" msgstr "" -#: ../../source/api_doc/api.rst:212 +#: ../../source/api_doc/api.rst:226 msgid ":class:`~.api.enums_communication.PinMode`" msgstr "" -#: ../../source/api_doc/api.rst:213 +#: ../../source/api_doc/api.rst:227 msgid ":class:`~.api.enums_communication.PinState`" msgstr "" -#: ../../source/api_doc/api.rst:214 +#: ../../source/api_doc/api.rst:228 msgid ":class:`~.api.enums_communication.PinID`" msgstr "" -#: ../../source/api_doc/api.rst:215 +#: ../../source/api_doc/api.rst:229 msgid ":class:`~.api.enums_communication.ConveyorID`" msgstr "" -#: ../../source/api_doc/api.rst:216 +#: ../../source/api_doc/api.rst:230 msgid ":class:`~.api.enums_communication.ConveyorDirection`" msgstr "" -#: ../../source/api_doc/api.rst:217 +#: ../../source/api_doc/api.rst:231 msgid ":class:`~.api.enums_communication.ObjectColor`" msgstr "" -#: ../../source/api_doc/api.rst:218 +#: ../../source/api_doc/api.rst:232 msgid ":class:`~.api.enums_communication.ObjectShape`" msgstr "" @@ -1482,11 +1653,11 @@ msgstr "" msgid "Enumeration of Shapes available for image processing" msgstr "" -#: ../../source/api_doc/api.rst:230 +#: ../../source/api_doc/api.rst:245 msgid "Python object classes" msgstr "" -#: ../../source/api_doc/api.rst:232 +#: ../../source/api_doc/api.rst:247 msgid "Special objects" msgstr "" @@ -2369,3 +2540,143 @@ msgstr "" #~ msgid "Leds turn on like a loading circle, and are turned off the same way." #~ msgstr "" +#~ msgid "" +#~ "Move robot end effector pose to a" +#~ " (x, y, z, roll, pitch, yaw, " +#~ "frame_name) pose in the frame " +#~ "(frame_name) if defined. x, y & z" +#~ " are expressed in meters / roll, " +#~ "pitch & yaw are expressed in " +#~ "radians" +#~ msgstr "" + +#~ msgid "" +#~ "and 1 for the frame name :type " +#~ "args: Union[tuple[float], list[float], PoseObject]" +#~ msgstr "" + +#~ msgid "" +#~ "either 7 args (1 for each " +#~ "coordinates and 1 for the name of" +#~ " the frame) or a list of 6 " +#~ "coordinates or a ``PoseObject`` and 1" +#~ " for the frame name" +#~ msgstr "" + +#~ msgid "" +#~ "either 7 args (1 for each " +#~ "coordinates and 1 for the name of" +#~ " the frame) or a list of 6 " +#~ "coordinates or a ``PoseObject``" +#~ msgstr "" + +#~ msgid "" +#~ "and 1 for the frame name :type " +#~ "args: Union[tuple[float], list[float], PoseObject]" +#~ " :rtype: None" +#~ msgstr "" + +#~ msgid "" +#~ "Reboot the motor of the tool " +#~ "equparam_list = [workspace_name] for pose " +#~ "in (pose_origin, pose_2, pose_3, pose_4):" +#~ msgstr "" + +#~ msgid "for pose in (pose_origin, pose_2, pose_3, pose_4):" +#~ msgstr "" + +#~ msgid "" +#~ "pose_list = self.__args_pose_to_list(pose) " +#~ "param_list.append(pose_list)ipped. Useful when an" +#~ " Overload error occurs. (cf HardwareStatus)" +#~ msgstr "" + +#~ msgid "" +#~ "..automethod:: " +#~ "api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list " +#~ "..automethod:: api.tcp_client.NiryoRobot.get_saved_dynamic_frame" +#~ " ..automethod:: " +#~ "api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses " +#~ "..automethod:: " +#~ "api.tcp_client.NiryoRobot.save_dynamic_frame_from_points " +#~ "..automethod:: api.tcp_client.NiryoRobot.edit_dynamic_frame " +#~ "..automethod:: api.tcp_client.NiryoRobot.delete_dynamic_frame" +#~ " ..automethod:: api.tcp_client.NiryoRobot.move_relative " +#~ "..automethod:: api.tcp_client.NiryoRobot.move_linear_relative" +#~ msgstr "" + +#~ msgid "" +#~ "Move robot end effector pose to a" +#~ " (x, y, z, roll, pitch, yaw, " +#~ "frame_name) pose in a particular frame" +#~ " (frame_name) if defined x, y & " +#~ "z are expressed in meters / roll," +#~ " pitch & yaw are expressed in " +#~ "radians" +#~ msgstr "" + +#~ msgid "" +#~ "list_frame, list_desc = " +#~ "robot.frames.get_saved_dynamic_frame_list() print(list_frame)" +#~ " print(list_desc)" +#~ msgstr "" + +#~ msgid "frame = robot.frames.get_saved_dynamic_frame(\"default_frame\")" +#~ msgstr "" + +#~ msgid "" +#~ "pose_o = [0.1, 0.1, 0.1, 0, 0, " +#~ "0] pose_x = [0.2, 0.1, 0.1, 0, " +#~ "0, 0] pose_y = [0.1, 0.2, 0.1, " +#~ "0, 0, 0]" +#~ msgstr "" + +#~ msgid "" +#~ "robot.frames.save_dynamic_frame_from_poses(\"name\", \"une " +#~ "description test\", pose_o, pose_x, pose_y)" +#~ msgstr "" + +#~ msgid "" +#~ "point_o = [-0.1, -0.1, 0.1] point_x " +#~ "= [-0.2, -0.1, 0.1] point_y = " +#~ "[-0.1, -0.2, 0.1]" +#~ msgstr "" + +#~ msgid "" +#~ "robot.frames.save_dynamic_frame_from_points(\"name\", \"une " +#~ "description test\", point_o, point_x, point_y)" +#~ msgstr "" + +#~ msgid "" +#~ "robot.frames.edit_dynamic_frame(\"name\", \"new_name\", " +#~ "\"new description\")" +#~ msgstr "" + +#~ msgid "robot.frames.delete_saved_dynamic_frame(\"name\")" +#~ msgstr "" + +#~ msgid "" +#~ "robot.frames.move_relative(\"default_frame\", [0.05, 0.05," +#~ " 0.05, 0.3, 0, 0])" +#~ msgstr "" + +#~ msgid "" +#~ "robot.frames.move_linear_relative(\"default_frame\", [0.05, " +#~ "0.05, 0.05, 0.3, 0, 0])" +#~ msgstr "" + +#~ msgid "" +#~ ":param frame_name : name of local " +#~ "frame :type frame_name: str :param " +#~ "offset: list which contains offset of" +#~ " x, y, z, roll, pitch, yaw " +#~ ":type offset: list[float] :return: status, " +#~ "message :rtype: (int, str)" +#~ msgstr "" + +#~ msgid "pose of a frame" +#~ msgstr "" + +#~ msgid "camera intrinsics, distortions coefficientspose_origin" +#~ msgstr "" + diff --git a/docs/locale/en/LC_MESSAGES/source/examples/examples_conveyor.po b/docs/locale/en/LC_MESSAGES/source/examples/examples_conveyor.po index 042140a..89e0b1f 100644 --- a/docs/locale/en/LC_MESSAGES/source/examples/examples_conveyor.po +++ b/docs/locale/en/LC_MESSAGES/source/examples/examples_conveyor.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-29 12:34+0000\n" +"POT-Creation-Date: 2022-03-25 14:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.9.1\n" #: ../../source/examples/examples_conveyor.rst:2 -msgid "Examples: Conveyor Belt" +msgid "Examples : Conveyor Belt" msgstr "" #: ../../source/examples/examples_conveyor.rst:4 @@ -95,3 +95,6 @@ msgstr "" #~ "Conveyor`." #~ msgstr "" +#~ msgid "Examples: Conveyor Belt" +#~ msgstr "" + diff --git a/docs/locale/en/LC_MESSAGES/source/examples/examples_frames.po b/docs/locale/en/LC_MESSAGES/source/examples/examples_frames.po new file mode 100644 index 0000000..c80d03a --- /dev/null +++ b/docs/locale/en/LC_MESSAGES/source/examples/examples_frames.po @@ -0,0 +1,60 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, Niryo All rights reserved. No part of this document +# may be reproduced or transmitted in any form or by any means without prior +# written consent of Niryo SAS +# This file is distributed under the same license as the PyNiryo package. +# FIRST AUTHOR , 2022. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PyNiryo v1.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-03-25 14:59+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.1\n" + +#: ../../source/examples/examples_frames.rst:2 +msgid "Examples : Dynamic frames" +msgstr "" + +#: ../../source/examples/examples_frames.rst:4 +msgid "This document shows how to use dynamic frames." +msgstr "" + +#: ../../source/examples/examples_frames.rst:6 +msgid "" +"If you want to see more about dynamic frames functions, you can look at " +":ref:`PyNiryo - Frames`" +msgstr "" + +#: ../../source/examples/examples_frames.rst:9 +msgid "" +"If you are using the real robot, make sure the environment around it is " +"clear." +msgstr "" + +#: ../../source/examples/examples_frames.rst:12 +msgid "Simple dynamic frame control" +msgstr "" + +#: ../../source/examples/examples_frames.rst:13 +msgid "" +"This example shows how to create a frame and do a small pick and place in" +" this frame: ::" +msgstr "" + +#~ msgid "Examples: Dynamic frames" +#~ msgstr "" + +#~ msgid "" +#~ "This example shows how to create " +#~ "un frame and make a small pick " +#~ "and place in this frame: ::" +#~ msgstr "" + diff --git a/docs/locale/en/LC_MESSAGES/source/setup/ip_address.po b/docs/locale/en/LC_MESSAGES/source/setup/ip_address.po index 88e54f9..14116f3 100644 --- a/docs/locale/en/LC_MESSAGES/source/setup/ip_address.po +++ b/docs/locale/en/LC_MESSAGES/source/setup/ip_address.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 16:14+0000\n" +"POT-Creation-Date: 2022-03-22 12:11+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -296,3 +296,21 @@ msgstr "" #~ msgid "And add to its end::" #~ msgstr "" +#~ msgid "" +#~ "In order to use your robot through" +#~ " TCP connection, you will first need" +#~ " to connect to it, which implies " +#~ "that you know its IP address." +#~ msgstr "" + +#~ msgid "" +#~ "In order to use your robot through" +#~ " TCP connection, you will first need" +#~ " to connect to it, which implies " +#~ "that you know its IP address " +#~ "example." +#~ msgstr "" + +#~ msgid "This is a test" +#~ msgstr "" + diff --git a/docs/locale/fr/LC_MESSAGES/index.po b/docs/locale/fr/LC_MESSAGES/index.po index e9d351a..9f82bbb 100644 --- a/docs/locale/fr/LC_MESSAGES/index.po +++ b/docs/locale/fr/LC_MESSAGES/index.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-08 10:44+0000\n" +"POT-Creation-Date: 2022-05-03 09:19+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,19 +18,19 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" -#: ../../index.rst:66 ../../index.rst:73 +#: ../../index.rst:69 ../../index.rst:76 msgid "Setup" msgstr "Installation" -#: ../../index.rst:82 ../../index.rst:86 +#: ../../index.rst:85 ../../index.rst:89 msgid "Examples" msgstr "Exemples" -#: ../../index.rst:98 ../../index.rst:106 +#: ../../index.rst:102 ../../index.rst:110 msgid "API Documentation" msgstr "Documentation API" -#: ../../index.rst:119 +#: ../../index.rst:123 msgid "Image Processing" msgstr "Traitement d'images" @@ -115,7 +115,7 @@ msgstr "1.1.0" msgid "4.0.0" msgstr "4.0.0" -#: ../../index.rst:44 ../../index.rst:47 +#: ../../index.rst:44 ../../index.rst:47 ../../index.rst:50 msgid "``Niryo One``, ``Ned``, ``Ned2``" msgstr "``Niryo One``, ``Ned``, ``Ned2``" @@ -127,11 +127,19 @@ msgstr "1.1.1" msgid "4.0.1" msgstr "4.0.1" -#: ../../index.rst:50 +#: ../../index.rst:48 +msgid "1.1.2" +msgstr "1.1.2" + +#: ../../index.rst:49 +msgid ">=4.1.1" +msgstr ">=4.1.1" + +#: ../../index.rst:53 msgid "Before getting started" msgstr "Avant de commencer" -#: ../../index.rst:54 +#: ../../index.rst:57 msgid "" "If you haven’t already done so, make sure to learn about the ROS robot " "software by reading `ROS documentation " @@ -141,7 +149,7 @@ msgstr "" "robot en lisant `la documentation ROS " "`_." -#: ../../index.rst:57 +#: ../../index.rst:60 msgid "" "This documentation also contains everything you need to know if you want " "to use Ned through simulation." @@ -149,21 +157,21 @@ msgstr "" "Cette documentation contient également tout ce que vous devez savoir si " "vous souhaitez utiliser Ned en simulation." -#: ../../index.rst:61 +#: ../../index.rst:64 msgid "Sections organization" msgstr "Organisation des sections" -#: ../../index.rst:63 +#: ../../index.rst:66 msgid "This document is organized in 4 main sections." msgstr "Ce document est organisé en quatre sections principales." -#: ../../index.rst:68 +#: ../../index.rst:71 msgid "Install & Setup your environment in order to use Ned with PyNiryo." msgstr "" "Installez et mettez en place votre environnement afin d'utiliser Ned avec" " PyNiryo." -#: ../../index.rst:70 +#: ../../index.rst:73 msgid "" "Firstly, follow :doc:`Installation instructions " "`, then :doc:`find your Robot IP address " @@ -173,13 +181,13 @@ msgstr "" "`, puis :doc:`trouvez l'adresse IP de votre " "robot ` afin d'être complètement prêt." -#: ../../index.rst:84 +#: ../../index.rst:87 msgid "Learn how to use the PyNiryo package to implement various tasks." msgstr "" "Apprenez comment utiliser le package PyNiryo afin d'implémenter diverses " "tâches." -#: ../../index.rst:100 +#: ../../index.rst:104 msgid "" "Master controls with PyNiryo with full the detailed functions :doc:`here " "`." @@ -187,7 +195,7 @@ msgstr "" "Le master est contrôlé par PyNiryo via les fonctions détaillées :doc:`ici" " `." -#: ../../index.rst:103 +#: ../../index.rst:107 msgid "" "Discover also :doc:`Vision Functions " "` to create your own image " @@ -197,27 +205,27 @@ msgstr "" "` afin de créer vos propres " "pipelines de traitement d'images !" -#: ../../index.rst:113 +#: ../../index.rst:117 msgid "Start with Image Processing" msgstr "Débuter avec le traitement d'images" -#: ../../index.rst:116 +#: ../../index.rst:120 msgid "Discover how to create your own image processing pipelines!" msgstr "Découvrez comment créer vos propres pipelines de traitement d'images !" -#: ../../index.rst:128 +#: ../../index.rst:132 msgid "Indices and tables" msgstr "Indexes et tableaux" -#: ../../index.rst:130 +#: ../../index.rst:134 msgid ":ref:`genindex`" msgstr ":ref:`genindex`" -#: ../../index.rst:131 +#: ../../index.rst:135 msgid ":ref:`modindex`" msgstr ":ref:`modindex`" -#: ../../index.rst:132 +#: ../../index.rst:136 msgid ":ref:`search`" msgstr ":ref:`search`" diff --git a/docs/locale/fr/LC_MESSAGES/source/api_doc/api.po b/docs/locale/fr/LC_MESSAGES/source/api_doc/api.po index b039e37..cceec29 100644 --- a/docs/locale/fr/LC_MESSAGES/source/api_doc/api.po +++ b/docs/locale/fr/LC_MESSAGES/source/api_doc/api.po @@ -9,14 +9,17 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 15:41+0000\n" +"POT-Creation-Date: 2022-04-13 14:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.9.1\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Language: fr_FR\n" +"X-Source-Language: C\n" #: ../../source/api_doc/api.rst:2 msgid "PyNiryo API Documentation" @@ -34,9 +37,8 @@ msgstr "" #: ../../source/api_doc/api.rst:7 msgid "" -":ref:`source/api_doc/api:Command Functions` are used to deal directly " -"with the robot. It could be " -":meth:`~.api.tcp_client.NiryoRobot.move_joints`, " +":ref:`source/api_doc/api:Command Functions` are used to deal directly with " +"the robot. It could be :meth:`~.api.tcp_client.NiryoRobot.move_joints`, " ":meth:`~.api.tcp_client.NiryoRobot.get_hardware_status` " ":meth:`~.api.tcp_client.NiryoRobot.vision_pick`, or also " ":meth:`~.api.tcp_client.NiryoRobot.run_conveyor`" @@ -61,11 +63,11 @@ msgstr "" #: ../../source/api_doc/api.rst:15 msgid "" -":ref:`source/api_doc/api:Python Object classes`, as |pose_object|, ease " -"some operations" +":ref:`source/api_doc/api:Python Object classes`, as |pose_object|, ease some " +"operations" msgstr "" -"Les :ref:`objets Python `, tels" -" que |pose_object|, facilitent certaines opérations." +"Les :ref:`objets Python `, tels " +"que |pose_object|, facilitent certaines opérations." #: ../../source/api_doc/api.rst:18 msgid "Command functions" @@ -73,8 +75,8 @@ msgstr "Fonctions de commande" #: ../../source/api_doc/api.rst:20 msgid "" -"This section references all existing functions to control your robot, " -"which includes:" +"This section references all existing functions to control your robot, which " +"includes:" msgstr "" "Cette section référence toutes les fonctions existantes permettant de " "contrôler votre robot, incluant :" @@ -123,18 +125,23 @@ msgid "Connect to the TCP Server" msgstr "Se connecter au serveur TCP" #: api.tcp_client.NiryoRobot.activate_electromagnet -#: api.tcp_client.NiryoRobot.analog_read api.tcp_client.NiryoRobot.analog_write -#: api.tcp_client.NiryoRobot.calibrate api.tcp_client.NiryoRobot.close_gripper -#: api.tcp_client.NiryoRobot.connect api.tcp_client.NiryoRobot.control_conveyor +#: api.tcp_client.NiryoRobot.analog_read +#: api.tcp_client.NiryoRobot.analog_write api.tcp_client.NiryoRobot.calibrate +#: api.tcp_client.NiryoRobot.close_gripper api.tcp_client.NiryoRobot.connect +#: api.tcp_client.NiryoRobot.control_conveyor #: api.tcp_client.NiryoRobot.deactivate_electromagnet +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.delete_workspace #: api.tcp_client.NiryoRobot.detect_object #: api.tcp_client.NiryoRobot.digital_read -#: api.tcp_client.NiryoRobot.digital_write api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.digital_write +#: api.tcp_client.NiryoRobot.edit_dynamic_frame +#: api.tcp_client.NiryoRobot.enable_tcp #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints #: api.tcp_client.NiryoRobot.forward_kinematics #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame #: api.tcp_client.NiryoRobot.get_sound_duration #: api.tcp_client.NiryoRobot.get_target_pose_from_cam #: api.tcp_client.NiryoRobot.get_target_pose_from_rel @@ -156,17 +163,22 @@ msgstr "Se connecter au serveur TCP" #: api.tcp_client.NiryoRobot.led_ring_wipe #: api.tcp_client.NiryoRobot.move_joints #: api.tcp_client.NiryoRobot.move_linear_pose -#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_to_object +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_relative +#: api.tcp_client.NiryoRobot.move_to_object #: api.tcp_client.NiryoRobot.open_gripper #: api.tcp_client.NiryoRobot.pick_and_place #: api.tcp_client.NiryoRobot.pick_from_pose #: api.tcp_client.NiryoRobot.place_from_pose #: api.tcp_client.NiryoRobot.play_sound api.tcp_client.NiryoRobot.run_conveyor +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses #: api.tcp_client.NiryoRobot.save_pose #: api.tcp_client.NiryoRobot.save_trajectory #: api.tcp_client.NiryoRobot.save_workspace_from_points #: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses -#: api.tcp_client.NiryoRobot.say api.tcp_client.NiryoRobot.set_arm_max_velocity +#: api.tcp_client.NiryoRobot.say +#: api.tcp_client.NiryoRobot.set_arm_max_velocity #: api.tcp_client.NiryoRobot.set_brightness #: api.tcp_client.NiryoRobot.set_contrast #: api.tcp_client.NiryoRobot.set_jog_control @@ -177,7 +189,8 @@ msgstr "Se connecter au serveur TCP" #: api.tcp_client.NiryoRobot.set_volume #: api.tcp_client.NiryoRobot.setup_electromagnet #: api.tcp_client.NiryoRobot.shift_linear_pose -#: api.tcp_client.NiryoRobot.shift_pose api.tcp_client.NiryoRobot.stop_conveyor +#: api.tcp_client.NiryoRobot.shift_pose +#: api.tcp_client.NiryoRobot.stop_conveyor #: api.tcp_client.NiryoRobot.unset_conveyor #: api.tcp_client.NiryoRobot.vision_pick api.tcp_client.NiryoRobot.wait of msgid "Parameters" @@ -189,21 +202,26 @@ msgstr "Adresse IP" #: api.objects.PoseObject.copy_with_offsets api.objects.PoseObject.to_list #: api.tcp_client.NiryoRobot.activate_electromagnet -#: api.tcp_client.NiryoRobot.analog_read api.tcp_client.NiryoRobot.analog_write -#: api.tcp_client.NiryoRobot.calibrate api.tcp_client.NiryoRobot.calibrate_auto +#: api.tcp_client.NiryoRobot.analog_read +#: api.tcp_client.NiryoRobot.analog_write api.tcp_client.NiryoRobot.calibrate +#: api.tcp_client.NiryoRobot.calibrate_auto +#: api.tcp_client.NiryoRobot.clean_trajectory_memory #: api.tcp_client.NiryoRobot.close_connection #: api.tcp_client.NiryoRobot.close_gripper api.tcp_client.NiryoRobot.connect #: api.tcp_client.NiryoRobot.control_conveyor #: api.tcp_client.NiryoRobot.deactivate_electromagnet +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.delete_pose #: api.tcp_client.NiryoRobot.delete_trajectory #: api.tcp_client.NiryoRobot.delete_workspace #: api.tcp_client.NiryoRobot.detect_object #: api.tcp_client.NiryoRobot.digital_read -#: api.tcp_client.NiryoRobot.digital_write api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.digital_write +#: api.tcp_client.NiryoRobot.edit_dynamic_frame +#: api.tcp_client.NiryoRobot.enable_tcp +#: api.tcp_client.NiryoRobot.execute_registered_trajectory #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints -#: api.tcp_client.NiryoRobot.execute_trajectory_saved #: api.tcp_client.NiryoRobot.forward_kinematics #: api.tcp_client.NiryoRobot.get_analog_io_state #: api.tcp_client.NiryoRobot.get_camera_intrinsics @@ -218,6 +236,8 @@ msgstr "Adresse IP" #: api.tcp_client.NiryoRobot.get_learning_mode #: api.tcp_client.NiryoRobot.get_pose api.tcp_client.NiryoRobot.get_pose_quat #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list #: api.tcp_client.NiryoRobot.get_saved_pose_list #: api.tcp_client.NiryoRobot.get_saved_trajectory_list #: api.tcp_client.NiryoRobot.get_sound_duration @@ -247,7 +267,8 @@ msgstr "Adresse IP" #: api.tcp_client.NiryoRobot.led_ring_wipe #: api.tcp_client.NiryoRobot.move_joints #: api.tcp_client.NiryoRobot.move_linear_pose -#: api.tcp_client.NiryoRobot.move_pose +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_pose api.tcp_client.NiryoRobot.move_relative #: api.tcp_client.NiryoRobot.move_to_home_pose #: api.tcp_client.NiryoRobot.move_to_object #: api.tcp_client.NiryoRobot.need_calibration @@ -260,11 +281,15 @@ msgstr "Adresse IP" #: api.tcp_client.NiryoRobot.push_air_vacuum_pump #: api.tcp_client.NiryoRobot.release_with_tool #: api.tcp_client.NiryoRobot.reset_tcp api.tcp_client.NiryoRobot.run_conveyor +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses +#: api.tcp_client.NiryoRobot.save_last_learned_trajectory #: api.tcp_client.NiryoRobot.save_pose #: api.tcp_client.NiryoRobot.save_trajectory #: api.tcp_client.NiryoRobot.save_workspace_from_points #: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses -#: api.tcp_client.NiryoRobot.say api.tcp_client.NiryoRobot.set_arm_max_velocity +#: api.tcp_client.NiryoRobot.say +#: api.tcp_client.NiryoRobot.set_arm_max_velocity #: api.tcp_client.NiryoRobot.set_brightness #: api.tcp_client.NiryoRobot.set_contrast #: api.tcp_client.NiryoRobot.set_conveyor @@ -276,7 +301,8 @@ msgstr "Adresse IP" #: api.tcp_client.NiryoRobot.set_volume #: api.tcp_client.NiryoRobot.setup_electromagnet #: api.tcp_client.NiryoRobot.shift_linear_pose -#: api.tcp_client.NiryoRobot.shift_pose api.tcp_client.NiryoRobot.stop_conveyor +#: api.tcp_client.NiryoRobot.shift_pose +#: api.tcp_client.NiryoRobot.stop_conveyor #: api.tcp_client.NiryoRobot.stop_sound api.tcp_client.NiryoRobot.tool_reboot #: api.tcp_client.NiryoRobot.update_tool api.tcp_client.NiryoRobot.vision_pick #: api.tcp_client.NiryoRobot.wait of @@ -293,8 +319,8 @@ msgstr "Fonctions principales" #: api.tcp_client.NiryoRobot.calibrate:1 of msgid "" -"Calibrate (manually or automatically) motors. Automatic calibration will " -"do nothing if motors are already calibrated" +"Calibrate (manually or automatically) motors. Automatic calibration will do " +"nothing if motors are already calibrated" msgstr "" "Calibrer (manuellement ou automatiquement) les moteurs. La calibration " "automatique ne provoquera rien si les moteurs sont déjà calibrés" @@ -319,7 +345,9 @@ msgstr "" msgid "Get learning mode state" msgstr "Afficher l'état du mode apprentissage" +#: api.tcp_client.NiryoRobot.delete_dynamic_frame #: api.tcp_client.NiryoRobot.detect_object +#: api.tcp_client.NiryoRobot.edit_dynamic_frame #: api.tcp_client.NiryoRobot.get_analog_io_state #: api.tcp_client.NiryoRobot.get_camera_intrinsics #: api.tcp_client.NiryoRobot.get_connected_conveyors_id @@ -332,6 +360,8 @@ msgstr "Afficher l'état du mode apprentissage" #: api.tcp_client.NiryoRobot.get_learning_mode #: api.tcp_client.NiryoRobot.get_pose_quat #: api.tcp_client.NiryoRobot.get_pose_saved +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list #: api.tcp_client.NiryoRobot.get_sound_duration #: api.tcp_client.NiryoRobot.get_sounds #: api.tcp_client.NiryoRobot.get_target_pose_from_cam @@ -352,7 +382,11 @@ msgstr "Afficher l'état du mode apprentissage" #: api.tcp_client.NiryoRobot.led_ring_solid #: api.tcp_client.NiryoRobot.led_ring_turn_off #: api.tcp_client.NiryoRobot.led_ring_wipe +#: api.tcp_client.NiryoRobot.move_linear_relative +#: api.tcp_client.NiryoRobot.move_relative #: api.tcp_client.NiryoRobot.move_to_object +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses #: api.tcp_client.NiryoRobot.set_conveyor #: api.tcp_client.NiryoRobot.set_led_color #: api.tcp_client.NiryoRobot.vision_pick of @@ -374,7 +408,8 @@ msgstr "``Vrai`` ou ``Faux``" #: api.tcp_client.NiryoRobot.set_arm_max_velocity:1 of msgid "Limit arm max velocity to a percentage of its maximum velocity" -msgstr "Limiter la vitesse maximum du bras à un pourcentage de sa vitesse maximum" +msgstr "" +"Limiter la vitesse maximum du bras à un pourcentage de sa vitesse maximum" #: api.tcp_client.NiryoRobot.set_arm_max_velocity:3 of msgid "Should be between 1 & 100" @@ -415,9 +450,9 @@ msgid "" "expressed in meters / roll, pitch & yaw are expressed in radians You can " "also use a getter ::" msgstr "" -"Obtenir la position de l'effecteur en [w, y, z, roll, pitch, yaw]. x, y &" -" z sont exprimés en mètres / roll, pitch & yaw sont exprimés en radians. " -"Il est également possible d'utiliser un getter ::" +"Obtenir la position de l'effecteur en [w, y, z, roll, pitch, yaw]. x, y & z " +"sont exprimés en mètres / roll, pitch & yaw sont exprimés en radians. Il est " +"également possible d'utiliser un getter ::" #: api.tcp_client.NiryoRobot.get_pose_quat:1 of msgid "Get end effector link pose in Quaternion coordinates" @@ -425,20 +460,21 @@ msgstr "Obtenir la position de l'effecteur en coordonnées Quaternion" #: api.tcp_client.NiryoRobot.get_pose_quat:3 of msgid "" -"Position and quaternion coordinates concatenated in a list : [x, y, z, " -"qx, qy, qz, qw]" +"Position and quaternion coordinates concatenated in a list : [x, y, z, qx, " +"qy, qz, qw]" msgstr "" -"Position and quaternion coordinates concatenated in a list : [x, y, z, " -"qx, qy, qz, qw]" +"Position and quaternion coordinates concatenated in a list : [x, y, z, qx, " +"qy, qz, qw]" #: api.tcp_client.NiryoRobot.move_joints:1 of msgid "Move robot joints. Joints are expressed in radians." msgstr "Bouger les axes du robots. Les axes sont exprimés en radians." #: api.tcp_client.NiryoRobot.move_joints:3 -#: api.tcp_client.NiryoRobot.move_pose:4 of +#: api.tcp_client.NiryoRobot.move_pose:5 of msgid "All lines of the next example realize the same operation: ::" -msgstr "L'ensemble des lignes du prochain exemple réalisent la même opération : ::" +msgstr "" +"L'ensemble des lignes du prochain exemple réalisent la même opération : ::" #: api.tcp_client.NiryoRobot.forward_kinematics:4 #: api.tcp_client.NiryoRobot.move_joints:9 of @@ -447,40 +483,31 @@ msgstr "soit 6 args (1 pour chaque axe) ou une liste de 6 axes" #: api.tcp_client.NiryoRobot.move_pose:1 of msgid "" -"Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose. x, y " -"& z are expressed in meters / roll, pitch & yaw are expressed in radians" +"Move robot end effector pose to a (x, y, z, roll, pitch, yaw, frame_name) " +"pose in a particular frame (frame_name) if defined. x, y & z are expressed " +"in meters / roll, pitch & yaw are expressed in radians" msgstr "" -"Modifier la position de l'effecteur du robot à une position (x, y, z, " -"roll, pitch, yaw). x, y & z sont exprimés en mètres, roll, pitch et yaw " -"sont exprimés en radians" +"Modifie la position de l'effecteur du robot à une position (x, y, z,roll, " +"pitch, yaw), dans un repère particulier si défini. x, y & z sont exprimés en " +"mètres / roll, pitch, yaw sont exprimés en radians" -#: api.tcp_client.NiryoRobot.inverse_kinematics:3 -#: api.tcp_client.NiryoRobot.move_pose:11 of +#: api.tcp_client.NiryoRobot.move_linear_pose:4 +#: api.tcp_client.NiryoRobot.move_pose:15 of msgid "" -"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " -"``PoseObject``" +"either 7 args (1 for each coordinates and 1 for the name of the frame) or a " +"list of 6 coordinates or a ``PoseObject`` and 1 for the frame name" msgstr "" -"soit 6 args (1 pour chaque coordonnées) ou une liste de 6 coordonnées, ou" -" un ``PoseObject``" +"soit 6 args (1 pour chaque coordonnées et 1 pour le nom du repère) ou une " +"liste de 6 coordonnées, ou un ``PoseObject`` et 1 pour le nom du repère" #: api.tcp_client.NiryoRobot.move_linear_pose:1 of msgid "" -"Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose with a" -" linear trajectory" -msgstr "" -"Modifier la position de l'effecteur du robot à une position (x, y, " -"z,roll, pitch, yaw) avec une trajectoire linéaire" - -#: api.tcp_client.NiryoRobot.move_linear_pose:3 -#: api.tcp_client.NiryoRobot.pick_from_pose:10 -#: api.tcp_client.NiryoRobot.place_from_pose:10 -#: api.tcp_client.NiryoRobot.save_pose:4 api.tcp_client.NiryoRobot.set_tcp:4 of -msgid "" -"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " -"PoseObject" +"Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose with a " +"linear trajectory, in a particular frame (frame_name) if defined" msgstr "" -"soit 6 args (1 pour chaque coordonnées) ou une liste de 6 coordonnées, ou" -" un PoseObject" +"Modifie la position de l'effecteur du robot à une position (x, y, z,roll, " +"pitch, yaw), dans un repère particulier si défini, avec une trajectoire " +"linéaire" #: api.tcp_client.NiryoRobot.shift_pose:1 of msgid "Shift robot end effector pose along one axis" @@ -517,9 +544,8 @@ msgstr "soit 6 args (1 pour chaque axe) ou une liste des offsets des 6 axes" #: api.tcp_client.NiryoRobot.jog_pose:1 of msgid "" "Jog robot end effector pose Jog corresponds to a shift without motion " -"planning Arguments are [dx, dy, dz, d_roll, d_pitch, d_yaw] dx, dy & dz " -"are expressed in meters / d_roll, d_pitch & d_yaw are expressed in " -"radians" +"planning Arguments are [dx, dy, dz, d_roll, d_pitch, d_yaw] dx, dy & dz are " +"expressed in meters / d_roll, d_pitch & d_yaw are expressed in radians" msgstr "" "Les arguments sont [dx, dy, dz, d_roll, d_pitch, d_yaw] dx, dy & dz sont " "exprimés en mètres / d_roll, d_pitch & d_yaw sont exprimés en radians" @@ -531,8 +557,8 @@ msgstr "soit 6 args (1 pour chaque axe) ou une liste de 6 offset" #: api.tcp_client.NiryoRobot.move_to_home_pose:1 of msgid "Move to a position where the forearm lays on shoulder" msgstr "" -"Bouger le robot à une position dans laquelle l'avant bras du robot repose" -" sur son épaule" +"Bouger le robot à une position dans laquelle l'avant bras du robot repose " +"sur son épaule" #: api.tcp_client.NiryoRobot.go_to_sleep:1 of msgid "Go to home pose and activate learning mode" @@ -550,6 +576,14 @@ msgstr "" msgid "Compute inverse kinematics" msgstr "Calculer la cinématique inverse" +#: api.tcp_client.NiryoRobot.inverse_kinematics:3 of +msgid "" +"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " +"``PoseObject``" +msgstr "" +"soit 6 args (1 pour chaque coordonnées) ou une liste de 6 coordonnées, ou un " +" ``PoseObject``" + #: ../../source/api_doc/api.rst:79 msgid "Saved Poses" msgstr "Positions sauvegardées" @@ -570,6 +604,16 @@ msgstr "Position associée au pose_name" msgid "Save pose in robot's memory" msgstr "Sauvegarder une position dans la mémoire du robot" +#: api.tcp_client.NiryoRobot.pick_from_pose:10 +#: api.tcp_client.NiryoRobot.place_from_pose:10 +#: api.tcp_client.NiryoRobot.save_pose:4 api.tcp_client.NiryoRobot.set_tcp:4 of +msgid "" +"either 6 args (1 for each coordinates) or a list of 6 coordinates or a " +"PoseObject" +msgstr "" +"soit 6 args (1 pour chaque coordonnées) ou une liste de 6 coordonnées, ou un " +"PoseObject" + #: api.tcp_client.NiryoRobot.delete_pose:1 of msgid "Delete pose from robot's memory" msgstr "Supprimer une position dans la mémoire du robot" @@ -577,8 +621,7 @@ msgstr "Supprimer une position dans la mémoire du robot" #: api.tcp_client.NiryoRobot.get_saved_pose_list:1 of msgid "Get list of poses' name saved in robot memory" msgstr "" -"Afficher la liste de noms des positions sauvegardées dans la mémoire du " -"robot" +"Afficher la liste de noms des positions sauvegardées dans la mémoire du robot" #: ../../source/api_doc/api.rst:87 msgid "Pick & Place" @@ -645,7 +688,8 @@ msgstr "Position de placement : [x, y, z, roll, pitch, yaw] ou PoseObject" #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:17 #: api.tcp_client.NiryoRobot.pick_and_place:7 of msgid "Distance from waypoints before smoothing trajectory" -msgstr "Distance entre les points de passage avant le lissage de la trajectoire" +msgstr "" +"Distance entre les points de passage avant le lissage de la trajectoire" #: ../../source/api_doc/api.rst:94 msgid "Trajectories" @@ -659,65 +703,229 @@ msgstr "Obtenir la trajectoire sauvegardée dans la mémoire de Ned" msgid "Trajectory" msgstr "Trajectoires" +#: api.tcp_client.NiryoRobot.get_saved_trajectory_list:1 of +msgid "Get list of trajectories' name saved in robot memory" +msgstr "" +"Obtenir la liste des noms des trajectoires sauvegardées dans la mémoire du " +"robot" + +#: api.tcp_client.NiryoRobot.execute_registered_trajectory:1 of +msgid "Execute trajectory from Ned's memory" +msgstr "Exécuter la trajectoire depuis la mémoire de Ned" + #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:1 of msgid "Execute trajectory from list of poses" msgstr "Exécuter une trajectoire depuis une liste de positions" -#: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:3 -#: api.tcp_client.NiryoRobot.save_trajectory:4 of +#: api.tcp_client.NiryoRobot.execute_trajectory_from_poses:3 of msgid "List of [x,y,z,qx,qy,qz,qw] or list of [x,y,z,roll,pitch,yaw]" -msgstr "Liste de position [x,y,z,qx,qy,qz,qw] ou liste de posiiton [x,y,z,roll,pitch,yaw]" +msgstr "" +"Liste de position [x,y,z,qx,qy,qz,qw] ou liste de posiiton " +"[x,y,z,roll,pitch,yaw]" #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:1 of msgid "Execute trajectory from list of poses and joints" -msgstr "Exécuter la trajectoire à partir de la liste de positions cartésiennes et de" -"positions des joints" +msgstr "" +"Exécuter la trajectoire à partir de la liste de positions cartésiennes et " +"depositions des joints" +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:3 +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:3 #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:3 #: api.tcp_client.NiryoRobot.get_analog_io_state:3 #: api.tcp_client.NiryoRobot.get_digital_io_state:3 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:3 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:3 #: api.tcp_client.NiryoRobot.led_ring_custom:4 #: api.tcp_client.NiryoRobot.led_ring_solid:3 #: api.tcp_client.NiryoRobot.led_ring_turn_off:3 -#: api.tcp_client.NiryoRobot.set_led_color:3 of +#: api.tcp_client.NiryoRobot.move_linear_relative:3 +#: api.tcp_client.NiryoRobot.move_relative:3 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:3 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:3 +#: api.tcp_client.NiryoRobot.set_led_color:3 +#: api.tcp_client.NiryoRobot.tool_reboot:3 of msgid "Example: ::" msgstr "Exemple ::" #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:11 of msgid "" -"List of [x,y,z,qx,qy,qz,qw] or list of [x,y,z,roll,pitch,yaw] or a list " -"of [j1,j2,j3,j4,j5,j6]" +"List of [x,y,z,qx,qy,qz,qw] or list of [x,y,z,roll,pitch,yaw] or a list of " +"[j1,j2,j3,j4,j5,j6]" msgstr "Liste contenant [x,y,z,qx,qy,qz,qw] ou [x,y,z,roll,pitch,yaw]" #: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints:14 of msgid "" -"List of string 'pose' or 'joint', or ['pose'] (if poses only) or " -"['joint'] (if joints only). If None, it is assumed there are only poses " -"in the list." +"List of string 'pose' or 'joint', or ['pose'] (if poses only) or ['joint'] " +"(if joints only). If None, it is assumed there are only poses in the list." msgstr "" -"Liste de string contenant 'pose' ou 'joint', ou ['pose'] (si uniquement " -"des 'pose') ou ['joint'] (si uniquement des 'joint'). Si l'argument est " -"None, le type est mis à ['Pose'] par défaut." - -#: api.tcp_client.NiryoRobot.execute_trajectory_saved:1 of -msgid "Execute trajectory from Ned's memory" -msgstr "Exécuter la trajectoire depuis la mémoire de Ned" +"Liste de string contenant 'pose' ou 'joint', ou ['pose'] (si uniquement des " +"'pose') ou ['joint'] (si uniquement des 'joint'). Si l'argument est None, le " +"type est mis à ['Pose'] par défaut." #: api.tcp_client.NiryoRobot.save_trajectory:1 of msgid "Save trajectory in robot memory" msgstr "Sauvegarder la trajectoire dans la mémoire du robot" +#: api.tcp_client.NiryoRobot.save_trajectory:3 of +msgid "" +"list of Joints [j1, j2, j3, j4, j5, j6] as waypoints to create the trajectory" +msgstr "" +"la liste des axes [j1, j2, j3, j4, j5, j6] comme point de passage pour créer " +"la trajectoire" + +#: api.tcp_client.NiryoRobot.save_trajectory:5 of +msgid "Name you want to give to the trajectory" +msgstr "Nom de la trajectoire" + +#: api.tcp_client.NiryoRobot.save_trajectory:7 of +msgid "Description you want to give to the trajectory" +msgstr "Description de la trajectoire" + +#: api.tcp_client.NiryoRobot.save_last_learned_trajectory:1 of +msgid "Save last user executed trajectory" +msgstr "Sauvegarde la dernière trajectoire exécutée par l'utilisateur" + +#: api.tcp_client.NiryoRobot.clean_trajectory_memory:1 #: api.tcp_client.NiryoRobot.delete_trajectory:1 of msgid "Delete trajectory from robot's memory" msgstr "Supprimer la trajectoire de la mémoire du robot." -#: api.tcp_client.NiryoRobot.get_saved_trajectory_list:1 of -msgid "Get list of trajectories' name saved in robot memory" +#: ../../source/api_doc/api.rst:107 +msgid "Dynamic frames" +msgstr "Repères dynamiques" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:1 of +msgid "Get list of saved dynamic frames" +msgstr "Obtient la liste des repères sauvegardés" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list:9 of +msgid "list of dynamic frames name, list of description of dynamic frames" +msgstr "la liste des nom des repères, la liste des descriptions des repères" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:1 of +msgid "Get name, description and pose of a dynamic frame" +msgstr "Obtient le nom, la description et la position d'un repère dynamique" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:7 +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:7 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:11 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:11 of +msgid "name of the frame" +msgstr "nom du repère" + +#: api.tcp_client.NiryoRobot.get_saved_dynamic_frame:9 of +msgid "name, description, position and orientation of a frame" +msgstr "le nom, la description et la position d'un repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:1 of +msgid "Create a dynamic frame with 3 poses (origin, x, y)" +msgstr "Créer un repère dynamique avec 3 positions (origine, x, y)" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:13 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:13 of +msgid "description of the frame" +msgstr "description du repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:15 of +msgid "pose of the origin of the frame" +msgstr "position d'origine du repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:17 of +msgid "pose of the point x of the frame" +msgstr "position du point x du repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:19 of +msgid "pose of the point y of the frame" +msgstr "position du point y du repère" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:9 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:21 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:21 of +msgid "indicate if the frame belong to a workspace" +msgstr "indique si le repère appartient à un espace de travail" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:11 +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:13 +#: api.tcp_client.NiryoRobot.led_ring_alternate:24 +#: api.tcp_client.NiryoRobot.led_ring_breath:19 +#: api.tcp_client.NiryoRobot.led_ring_chase:20 +#: api.tcp_client.NiryoRobot.led_ring_custom:12 +#: api.tcp_client.NiryoRobot.led_ring_flashing:22 +#: api.tcp_client.NiryoRobot.led_ring_go_up:20 +#: api.tcp_client.NiryoRobot.led_ring_go_up_down:20 +#: api.tcp_client.NiryoRobot.led_ring_rainbow:16 +#: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:16 +#: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:16 +#: api.tcp_client.NiryoRobot.led_ring_snake:18 +#: api.tcp_client.NiryoRobot.led_ring_solid:9 +#: api.tcp_client.NiryoRobot.led_ring_turn_off:7 +#: api.tcp_client.NiryoRobot.led_ring_wipe:15 +#: api.tcp_client.NiryoRobot.move_linear_relative:11 +#: api.tcp_client.NiryoRobot.move_relative:11 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:23 +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses:23 +#: api.tcp_client.NiryoRobot.set_led_color:11 of +msgid "status, message" +msgstr "status, message" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:1 of +msgid "Create a dynamic frame with 3 points (origin, x, y)" +msgstr "Créer un repère dynamique avec 3 points (origine, x, y)" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:15 of +msgid "origin point of the frame" +msgstr "point d'origine du repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:17 of +msgid "point x of the frame" +msgstr "point x du repère" + +#: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points:19 of +msgid "point y of the frame" +msgstr "point y du repère" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:1 of +msgid "Modify a dynamic frame" +msgstr "Modifie un repère dynamique" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:9 of +msgid "new name of the frame" +msgstr "nouveau nom du repère" + +#: api.tcp_client.NiryoRobot.edit_dynamic_frame:11 of +msgid "new description of the frame" +msgstr "nouvelle description du repère" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:1 of +msgid "Delete a dynamic frame" +msgstr "Supprime un repère dynamique" + +#: api.tcp_client.NiryoRobot.delete_dynamic_frame:7 of +msgid "name of the frame to remove" +msgstr "nom du repère à supprimer" + +#: api.tcp_client.NiryoRobot.move_relative:1 of +msgid "Move robot end of a offset in a frame" +msgstr "Déplace l'effecteur du robot d'un offset dans un repère" + +#: api.tcp_client.NiryoRobot.move_linear_relative:7 +#: api.tcp_client.NiryoRobot.move_relative:7 of +msgid "list which contains offset of x, y, z, roll, pitch, yaw" +msgstr "list qui contient les paramètres x, y, z, roll, pitch & yaw" + +#: api.tcp_client.NiryoRobot.move_linear_relative:9 +#: api.tcp_client.NiryoRobot.move_relative:9 of +msgid "name of local frame" +msgstr "nom du repère" + +#: api.tcp_client.NiryoRobot.move_linear_relative:1 of +msgid "Move robot end of a offset by a linear movement in a frame" msgstr "" -"Obtenir la liste des noms des trajectoires sauvegardées dans la mémoire " -"du robot" +"Déplace l'effecteur du robot d'un offset dans un repère par un mouvement " +"linéaire" -#: ../../source/api_doc/api.rst:105 +#: ../../source/api_doc/api.rst:119 msgid "Tools" msgstr "Outils" @@ -731,20 +939,19 @@ msgstr "Mettre à jour l'outil installé" #: api.tcp_client.NiryoRobot.grasp_with_tool:1 of msgid "" -"Grasp with tool | This action correspond to | - Close gripper for " -"Grippers | - Pull Air for Vacuum pump | - Activate for Electromagnet" +"Grasp with tool | This action correspond to | - Close gripper for Grippers | " +"- Pull Air for Vacuum pump | - Activate for Electromagnet" msgstr "" -"Saisir avec l'outil | Cette action correspond à | - Close gripper pour " -"les grippers | - Pull Air pour la pompe à vide | - Activate pour " -"l'électroaimant" +"Saisir avec l'outil | Cette action correspond à | - Close gripper pour les " +"grippers | - Pull Air pour la pompe à vide | - Activate pour l'électroaimant" #: api.tcp_client.NiryoRobot.release_with_tool:1 of msgid "" -"Release with tool | This action correspond to | - Open gripper for " -"Grippers | - Push Air for Vacuum pump | - Deactivate for Electromagnet" +"Release with tool | This action correspond to | - Open gripper for Grippers " +"| - Push Air for Vacuum pump | - Deactivate for Electromagnet" msgstr "" -"Relâcher avec l'outil | Cette action correspond à | - Open gripper pour " -"les grippers | - Push Air pour la pompe à vide | - Deactivate pour " +"Relâcher avec l'outil | Cette action correspond à | - Open gripper pour les " +"grippers | - Push Air pour la pompe à vide | - Deactivate pour " "l'électroaimant" #: api.tcp_client.NiryoRobot.open_gripper:1 of @@ -762,8 +969,8 @@ msgstr "Pourcentage de couple de fermeture (uniquement pour Ned2)" #: api.tcp_client.NiryoRobot.open_gripper:7 of msgid "Hold torque percentage after closing (only for Ned2)" -msgstr "Pourcentage de couple de maintien après fermeture (uniquement" -"pour Ned2)" +msgstr "" +"Pourcentage de couple de maintien après fermeture (uniquementpour Ned2)" #: api.tcp_client.NiryoRobot.close_gripper:1 of msgid "Close gripper" @@ -775,8 +982,7 @@ msgstr "Pourcentage de couple d'ouverture (uniquement pour Ned2)" #: api.tcp_client.NiryoRobot.close_gripper:7 of msgid "Hold torque percentage after opening (only for Ned2)" -msgstr "Pourcentage de couple de maintien ouverture (uniquement" -"pour Ned2)" +msgstr "Pourcentage de couple de maintien ouverture (uniquementpour Ned2)" #: api.tcp_client.NiryoRobot.pull_air_vacuum_pump:1 of msgid "Pull air of vacuum pump" @@ -800,16 +1006,15 @@ msgstr "Désactiver l'électroaimant associé à electromagnet_id sur pin_id" #: api.tcp_client.NiryoRobot.enable_tcp:1 of msgid "" -"Enables or disables the TCP function (Tool Center Point). If activation " -"is requested, the last recorded TCP value will be applied. The default " -"value depends on the gripper equipped. If deactivation is requested, the " -"TCP will be coincident with the tool_link." +"Enables or disables the TCP function (Tool Center Point). If activation is " +"requested, the last recorded TCP value will be applied. The default value " +"depends on the gripper equipped. If deactivation is requested, the TCP will " +"be coincident with the tool_link." msgstr "" "Active ou désactive la fonction PCO (Point Central de l'Outil). Si une " -"activation est demandée, la dernière valeur pour le PCO va être " -"appliquée. Par défaut la valeur dépend de la pince équipée. Si la " -"désactivation est demandée, le PCO va coincider avec le repère " -"'tool_link'." +"activation est demandée, la dernière valeur pour le PCO va être appliquée. " +"Par défaut la valeur dépend de la pince équipée. Si la désactivation est " +"demandée, le PCO va coincider avec le repère 'tool_link'." #: api.tcp_client.NiryoRobot.enable_tcp:6 of msgid "True to enable, False otherwise." @@ -828,18 +1033,14 @@ msgid "" "Reset the TCP (Tool Center Point) transformation. The TCP will be reset " "according to the tool equipped." msgstr "" -"Réinitialise la transformation appliquée au PCO (Point Central de " -"l'Outil). La valeur par défaut dépend de l'outil actuellement équipé." +"Réinitialise la transformation appliquée au PCO (Point Central de l'Outil). " +"La valeur par défaut dépend de l'outil actuellement équipé." #: api.tcp_client.NiryoRobot.tool_reboot:1 of -msgid "" -"Reboot the motor of the tool equipped. Useful when an Overload error " -"occurs. (cf HardwareStatus)" -msgstr "" -"Redémarre le moteur de l'outil actuellement équipé. Peut être utile quand" -" une erreur 'Overload' apparaît. (cf HardwareStatus)" +msgid "Reboot the motor of the tool equparam_list = [workspace_name]" +msgstr "Redémarre le moteur de l'outil equipé" -#: ../../source/api_doc/api.rst:124 +#: ../../source/api_doc/api.rst:138 msgid "Hardware" msgstr "Matériel" @@ -857,11 +1058,10 @@ msgstr "Lire le numéro de broche pin_id et retourne à son état" #: api.tcp_client.NiryoRobot.get_hardware_status:1 of msgid "" -"Get hardware status : Temperature, Hardware version, motors names & types" -" ..." +"Get hardware status : Temperature, Hardware version, motors names & types ..." msgstr "" -"Obtenir le statut hardware : température, version hardware, noms et types" -" des moteurs ..." +"Obtenir le statut hardware : température, version hardware, noms et types " +"des moteurs ..." #: api.tcp_client.NiryoRobot.get_hardware_status:3 of msgid "Infos contains in a HardwareStatusObject" @@ -903,7 +1103,7 @@ msgstr "Optenir l'état du bouton **Custom** du Ned2" msgid "True if pressed, False else" msgstr "True si pressé, False sinon" -#: ../../source/api_doc/api.rst:138 +#: ../../source/api_doc/api.rst:152 msgid "Conveyor" msgstr "Convoyeur" @@ -947,7 +1147,7 @@ msgstr "Direction du convoyeur" msgid "List of the connected conveyors' ID" msgstr "Liste des ID des convoyeurs connectés" -#: ../../source/api_doc/api.rst:148 +#: ../../source/api_doc/api.rst:162 msgid "Vision" msgstr "Vision" @@ -969,12 +1169,11 @@ msgstr "Modifie la luminosité du stream vidéo" #: api.tcp_client.NiryoRobot.set_brightness:3 of msgid "" -"How much to adjust the brightness. 0.5 will give a darkened image, 1 will" -" give the original image while 2 will enhance the brightness by a factor " -"of 2." +"How much to adjust the brightness. 0.5 will give a darkened image, 1 will " +"give the original image while 2 will enhance the brightness by a factor of 2." msgstr "" -"Comment ajuster la luminosité: 0.5 donnera une image assombrie, 1 l'image" -" d'origine et 2 augmentera la luminosité par un facteur de 2." +"Comment ajuster la luminosité: 0.5 donnera une image assombrie, 1 l'image " +"d'origine et 2 augmentera la luminosité par un facteur de 2." #: api.tcp_client.NiryoRobot.set_contrast:1 of msgid "Modify video stream contrast" @@ -982,13 +1181,12 @@ msgstr "Modifie le contraste du stream vidéo" #: api.tcp_client.NiryoRobot.set_contrast:3 of msgid "" -"While a factor of 1 gives original image. Making the factor towards 0 " -"makes the image greyer, while factor>1 increases the contrast of the " -"image." +"While a factor of 1 gives original image. Making the factor towards 0 makes " +"the image greyer, while factor>1 increases the contrast of the image." msgstr "" "Un facteur de 1 équivaut à l'image d'origine. Plus le multiplicateur se " -"rapproche de 0 et plus l'image deviendra grise, \"tandis qu'un facteur > " -"1 augmentera le contraste de l'image." +"rapproche de 0 et plus l'image deviendra grise, \"tandis qu'un facteur > 1 " +"augmentera le contraste de l'image." #: api.tcp_client.NiryoRobot.set_saturation:1 of msgid "Modify video stream saturation" @@ -996,13 +1194,13 @@ msgstr "Modifie la saturation du stream vidéo" #: api.tcp_client.NiryoRobot.set_saturation:3 of msgid "" -"How much to adjust the saturation. 0 will give a black and white image, 1" -" will give the original image while 2 will enhance the saturation by a " -"factor of 2." +"How much to adjust the saturation. 0 will give a black and white image, 1 " +"will give the original image while 2 will enhance the saturation by a factor " +"of 2." msgstr "" "Comment ajuster la saturation: 0 donnera une image en noir et blanc, 1 " -"équivaut à l'image d'origine, tandis que 2 va augmenter la saturation par" -" un facteur de 2." +"équivaut à l'image d'origine, tandis que 2 va augmenter la saturation par un " +"facteur de 2." #: api.tcp_client.NiryoRobot.get_image_parameters:1 of msgid "" @@ -1018,19 +1216,18 @@ msgid "" "darkened image, 1 will give the original image while 2 will enhance the " "brightness by a factor of 2." msgstr "" -"Comment ajuster le facteur de luminosité: 0.5 donnera une image " -"assombrie, 1 l'image d'origine et 2 augmentera la luminosité par un " -"facteur de 2." +"Comment ajuster le facteur de luminosité: 0.5 donnera une image assombrie, 1 " +"l'image d'origine et 2 augmentera la luminosité par un facteur de 2." #: api.tcp_client.NiryoRobot.get_image_parameters:6 of msgid "" "Contrast factor: A factor of 1 gives original image. Making the factor " -"towards 0 makes the image greyer, while factor>1 increases the contrast " -"of the image." +"towards 0 makes the image greyer, while factor>1 increases the contrast of " +"the image." msgstr "" "Comment ajuster le facteur de contraste: 1 équivaut à l'image d'origine. " -"Plus le multiplicateur se rapproche de 0 et plus l'image deviendra grise," -" \"tandis qu'un facteur > 1 augmentera le contraste de l'image." +"Plus le multiplicateur se rapproche de 0 et plus l'image deviendra grise, " +"\"tandis qu'un facteur > 1 augmentera le contraste de l'image." #: api.tcp_client.NiryoRobot.get_image_parameters:9 of msgid "" @@ -1047,23 +1244,23 @@ msgstr "Facteur de luminosité, contraste et saturation" #: api.tcp_client.NiryoRobot.get_target_pose_from_rel:1 of msgid "" -"Given a pose (x_rel, y_rel, yaw_rel) relative to a workspace, this " -"function returns the robot pose in which the current tool will be able to" -" pick an object at this pose." +"Given a pose (x_rel, y_rel, yaw_rel) relative to a workspace, this function " +"returns the robot pose in which the current tool will be able to pick an " +"object at this pose." msgstr "" -"Pour une pose (x_rel, y_rel, yaw_rel) donnée relative à un workspace, " -"cette fonction retourne la position du robot dans laquelle l'outil actuel" -" sera capable d'attraper un objet." +"Pour une pose (x_rel, y_rel, yaw_rel) donnée relative à un workspace, cette " +"fonction retourne la position du robot dans laquelle l'outil actuel sera " +"capable d'attraper un objet." #: api.tcp_client.NiryoRobot.get_target_pose_from_rel:4 of msgid "" -"The height_offset argument (in m) defines how high the tool will hover " -"over the workspace. If height_offset = 0, the tool will nearly touch the " +"The height_offset argument (in m) defines how high the tool will hover over " +"the workspace. If height_offset = 0, the tool will nearly touch the " "workspace." msgstr "" "L'argument height_offset (en mètres) définit à quelle hauteur l'outil va " -"passer au dessus du workspace. Si height_offset = 0, alors l'outil " -"touchera presque l'espace de travail." +"passer au dessus du workspace. Si height_offset = 0, alors l'outil touchera " +"presque l'espace de travail." #: api.tcp_client.NiryoRobot.detect_object:3 #: api.tcp_client.NiryoRobot.get_target_pose_from_cam:4 @@ -1101,9 +1298,9 @@ msgid "" "First detects the specified object using the camera and then returns the " "robot pose in which the object can be picked with the current tool" msgstr "" -"Commence par détecter l'objet spécifié en utilisant la caméra puis " -"renvoie la position du robot à laquelle l'objet peut être attrapé avec " -"l'outil utilisé." +"Commence par détecter l'objet spécifié en utilisant la caméra puis renvoie " +"la position du robot à laquelle l'objet peut être attrapé avec l'outil " +"utilisé." #: api.tcp_client.NiryoRobot.detect_object:5 #: api.tcp_client.NiryoRobot.get_target_pose_from_cam:8 @@ -1126,11 +1323,11 @@ msgstr "object_found, object_pose, object_shape, object_color" #: api.tcp_client.NiryoRobot.vision_pick:1 of msgid "" -"Picks the specified object from the workspace. This function has multiple" -" phases:" +"Picks the specified object from the workspace. This function has multiple " +"phases:" msgstr "" -"Attrape l'objet spécifié sur le workspace. Cette fonction est composée de" -" plusieurs phases :" +"Attrape l'objet spécifié sur le workspace. Cette fonction est composée de " +"plusieurs phases :" #: api.tcp_client.NiryoRobot.vision_pick:3 of msgid "1. detect object using the camera" @@ -1168,8 +1365,8 @@ msgstr "object_found, object_shape, object_color" #: api.tcp_client.NiryoRobot.move_to_object:1 of msgid "Same as `get_target_pose_from_cam` but directly moves to this position" msgstr "" -"Même fonction que `get_target_pose_from_cam` mais bouge directement à " -"cette position" +"Même fonction que `get_target_pose_from_cam` mais bouge directement à cette " +"position" #: api.tcp_client.NiryoRobot.detect_object:1 of msgid "Detect object in workspace and return its pose and characteristics" @@ -1180,8 +1377,8 @@ msgstr "" #: api.tcp_client.NiryoRobot.get_camera_intrinsics:1 of msgid "Get calibration object: camera intrinsics, distortions coefficients" msgstr "" -"Obtenir la calibration de l'objet : paramètres instrinsèques de la " -"caméra, taux de distorsion" +"Obtenir la calibration de l'objet : paramètres instrinsèques de la caméra, " +"taux de distorsion" #: api.tcp_client.NiryoRobot.get_camera_intrinsics:3 of msgid "camera intrinsics, distortions coefficients" @@ -1189,20 +1386,21 @@ msgstr "paramètres instrinsèque de la caméra, taux de distorsion" #: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses:1 of msgid "" -"Save workspace by giving the poses of the robot to point its 4 corners " -"with the calibration Tip. Corners should be in the good order. Markers' " -"pose will be deduced from these poses" +"Save workspace by giving the poses of the robot to point its 4 corners with " +"the calibration Tip. Corners should be in the good order. Markers' pose will " +"be deduced from these poses" msgstr "" -"Sauvegarder le workspace en donnant au robot les 4 positions lui " -"permettant de pointer ses 4 coins avec la pointe de calibration. Les " -"coins doivent être dans le bon ordre. La position de ces marqueurs sera " -"déduite de ces positions." +"Sauvegarder le workspace en donnant au robot les 4 positions lui permettant " +"de pointer ses 4 coins avec la pointe de calibration. Les coins doivent être " +"dans le bon ordre. La position de ces marqueurs sera déduite de ces " +"positions." #: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses:5 of -msgid "Poses should be either a list [x, y, z, roll, pitch, yaw] or a PoseObject" +msgid "" +"Poses should be either a list [x, y, z, roll, pitch, yaw] or a PoseObject" msgstr "" -"Les positions peuvent également être une liste [x, y, z, roll, pitch, " -"yaw] ou un PoseObject." +"Les positions peuvent également être une liste [x, y, z, roll, pitch, yaw] " +"ou un PoseObject." #: api.tcp_client.NiryoRobot.save_workspace_from_points:4 #: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses:7 of @@ -1214,9 +1412,8 @@ msgid "" "Save workspace by giving the points of worskpace's 4 corners. Points are " "written as [x, y, z] Corners should be in the good order." msgstr "" -"Sauvegarder le workspace en donnant les points des 4 coins du workspaces." -" Ces points sont écrits [x, y, z]. Les coins doivent être dans le bon " -"ordre." +"Sauvegarder le workspace en donnant les points des 4 coins du workspaces. " +"Ces points sont écrits [x, y, z]. Les coins doivent être dans le bon ordre." #: api.tcp_client.NiryoRobot.delete_workspace:1 of msgid "Delete workspace from robot's memory" @@ -1228,9 +1425,10 @@ msgstr "Obtenir le ratio du workspace depuis la mémoire du robot" #: api.tcp_client.NiryoRobot.get_workspace_list:1 of msgid "Get list of workspaces' name store in robot's memory" -msgstr "Obtenir la liste des noms des workspaces stockés dans la mémoire du robot" +msgstr "" +"Obtenir la liste des noms des workspaces stockés dans la mémoire du robot" -#: ../../source/api_doc/api.rst:168 +#: ../../source/api_doc/api.rst:182 msgid "Led Ring" msgstr "Anneau Led" @@ -1252,25 +1450,9 @@ msgstr "ID de la LED: entre 0 et 29" #: api.tcp_client.NiryoRobot.led_ring_wipe:9 #: api.tcp_client.NiryoRobot.set_led_color:9 of msgid "Led color in a list of size 3[R, G, B]. RGB channels from 0 to 255." -msgstr "Couleur du led dans une liste de taille 3[R, G, B]. Les canaux RVB ont une valeur comprise entre 0 et 255." - -#: api.tcp_client.NiryoRobot.led_ring_alternate:24 -#: api.tcp_client.NiryoRobot.led_ring_breath:19 -#: api.tcp_client.NiryoRobot.led_ring_chase:20 -#: api.tcp_client.NiryoRobot.led_ring_custom:12 -#: api.tcp_client.NiryoRobot.led_ring_flashing:22 -#: api.tcp_client.NiryoRobot.led_ring_go_up:20 -#: api.tcp_client.NiryoRobot.led_ring_go_up_down:20 -#: api.tcp_client.NiryoRobot.led_ring_rainbow:16 -#: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:16 -#: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:16 -#: api.tcp_client.NiryoRobot.led_ring_snake:18 -#: api.tcp_client.NiryoRobot.led_ring_solid:9 -#: api.tcp_client.NiryoRobot.led_ring_turn_off:7 -#: api.tcp_client.NiryoRobot.led_ring_wipe:15 -#: api.tcp_client.NiryoRobot.set_led_color:11 of -msgid "status, message" -msgstr "status, message" +msgstr "" +"Couleur du led dans une liste de taille 3[R, G, B]. Les canaux RVB ont une " +"valeur comprise entre 0 et 255." #: api.tcp_client.NiryoRobot.led_ring_solid:1 of msgid "Set the whole Led Ring to a fixed color." @@ -1284,8 +1466,9 @@ msgstr "Éteignez toutes les LED" msgid "" "Flashes a color according to a frequency. The frequency is equal to 1 / " "period." -msgstr "Clignote d'une couleur selon une fréquence. La fréquence est égale" -"à 1/période." +msgstr "" +"Clignote d'une couleur selon une fréquence. La fréquence est égaleà " +"1/période." #: api.tcp_client.NiryoRobot.led_ring_alternate:3 #: api.tcp_client.NiryoRobot.led_ring_breath:3 @@ -1312,15 +1495,15 @@ msgstr "Exemple ::" #: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:9 #: api.tcp_client.NiryoRobot.led_ring_wipe:11 of msgid "" -"Execution time for a pattern in seconds. If 0, the default time will be " -"used." -msgstr "Temps d'exécution d'un motif en secondes. Si 0, la période par défaut" -"sera utilisée." +"Execution time for a pattern in seconds. If 0, the default time will be used." +msgstr "" +"Temps d'exécution d'un motif en secondes. Si 0, la période par défautsera " +"utilisée." #: api.tcp_client.NiryoRobot.led_ring_flashing:17 of msgid "Number of consecutive flashes. If 0, the Led Ring flashes endlessly." -msgstr "Nombre de clignotements consécutifs. Si 0, la Led Ring clignote" -"indéfiniment." +msgstr "" +"Nombre de clignotements consécutifs. Si 0, la Led Ring clignoteindéfiniment." #: api.tcp_client.NiryoRobot.led_ring_alternate:21 #: api.tcp_client.NiryoRobot.led_ring_chase:17 @@ -1328,8 +1511,9 @@ msgstr "Nombre de clignotements consécutifs. Si 0, la Led Ring clignote" msgid "" "The service wait for the animation to finish all iterations or not to " "answer. If iterations is 0, the service answers immediately." -msgstr "Le service attend que l'animation termine toutes les itérations" -"ou ne réponde pas. Si le nombre d'itérations vaut 0, le service répond immédiatement." +msgstr "" +"Le service attend que l'animation termine toutes les itérationsou ne réponde " +"pas. Si le nombre d'itérations vaut 0, le service répond immédiatement." #: api.tcp_client.NiryoRobot.led_ring_alternate:1 of msgid "Several colors are alternated one after the other." @@ -1337,15 +1521,14 @@ msgstr "Plusieurs couleurs s'alternéent les unes après les autres." #: api.tcp_client.NiryoRobot.led_ring_alternate:15 of msgid "Led color list of lists of size 3[R, G, B]. RGB channels from 0 to 255." -msgstr "Liste des couleurs des leds de taille 3[R, G, B]. Canaux RVB" -"de 0 à 255." +msgstr "" +"Liste des couleurs des leds de taille 3[R, G, B]. Canaux RVBde 0 à 255." #: api.tcp_client.NiryoRobot.led_ring_alternate:19 of msgid "" -"Number of consecutive alternations. If 0, the Led Ring alternates " -"endlessly." -msgstr "Nombre d'alternances consécutives. Si 0, le Led Ring alterne" -"indéfiniment." +"Number of consecutive alternations. If 0, the Led Ring alternates endlessly." +msgstr "" +"Nombre d'alternances consécutives. Si 0, le Led Ring alterneindéfiniment." #: api.tcp_client.NiryoRobot.led_ring_chase:1 of msgid "Movie theater light style chaser animation." @@ -1353,10 +1536,11 @@ msgstr "Animation de **Chase** de style lumière de cinéma." #: api.tcp_client.NiryoRobot.led_ring_chase:14 of msgid "" -"Number of consecutive chase. If 0, the animation continues endlessly. One" -" chase just lights one Led every 3 LEDs." -msgstr "Nombre de poursuites consécutives. Si 0, l'animation continue" -"indéfiniment. Un **Chase** allume juste une LED sur 3." +"Number of consecutive chase. If 0, the animation continues endlessly. One " +"chase just lights one Led every 3 LEDs." +msgstr "" +"Nombre de poursuites consécutives. Si 0, l'animation continueindéfiniment. " +"Un **Chase** allume juste une LED sur 3." #: api.tcp_client.NiryoRobot.led_ring_wipe:1 of msgid "Wipe a color across the Led Ring, light a Led at a time." @@ -1368,13 +1552,13 @@ msgstr "Le service attend que l'animation se termine ou ne réponde pas." #: api.tcp_client.NiryoRobot.led_ring_rainbow:1 of msgid "Draw rainbow that fades across all LEDs at once." -msgstr "Dessinez un arc-en-ciel qui s'estompe sur toutes les LED à la" -"fois." +msgstr "Dessinez un arc-en-ciel qui s'estompe sur toutes les LED à lafois." #: api.tcp_client.NiryoRobot.led_ring_rainbow:11 of -msgid "Number of consecutive rainbows. If 0, the animation continues endlessly." -msgstr "Nombre d'arcs-en-ciel consécutifs. Si 0, l'animation continue" -"indéfiniment." +msgid "" +"Number of consecutive rainbows. If 0, the animation continues endlessly." +msgstr "" +"Nombre d'arcs-en-ciel consécutifs. Si 0, l'animation continueindéfiniment." #: api.tcp_client.NiryoRobot.led_ring_breath:16 #: api.tcp_client.NiryoRobot.led_ring_go_up:17 @@ -1384,32 +1568,36 @@ msgstr "Nombre d'arcs-en-ciel consécutifs. Si 0, l'animation continue" #: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:13 #: api.tcp_client.NiryoRobot.led_ring_snake:15 of msgid "" -"The service wait for the animation to finish or not to answer. If " -"iterations is 0, the service answers immediately." -msgstr "Le service attend que l'animation se termine ou ne réponde pas." -"Si itérations vaut 0, le service répond immédiatement." +"The service wait for the animation to finish or not to answer. If iterations " +"is 0, the service answers immediately." +msgstr "" +"Le service attend que l'animation se termine ou ne réponde pas.Si itérations " +"vaut 0, le service répond immédiatement." #: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:1 of msgid "Draw rainbow that uniformly distributes itself across all LEDs." -msgstr "Dessinez un arc-en-ciel qui se répartit uniformément sur toutes" -"les LED." +msgstr "" +"Dessinez un arc-en-ciel qui se répartit uniformément sur toutesles LED." #: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:11 #: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle:11 of msgid "" "Number of consecutive rainbow cycles. If 0, the animation continues " "endlessly." -msgstr "Nombre de cycles arc-en-ciel consécutifs. Si 0, l'animation continue" -"indéfiniment." +msgstr "" +"Nombre de cycles arc-en-ciel consécutifs. Si 0, l'animation " +"continueindéfiniment." #: api.tcp_client.NiryoRobot.led_ring_rainbow_chase:1 of msgid "Rainbow chase animation, like the led_ring_chase method." msgstr "Animation de **Chase** arc-en-ciel, comme la méthode led_ring_chase." #: api.tcp_client.NiryoRobot.led_ring_go_up:1 of -msgid "LEDs turn on like a loading circle, and are then all turned off at once." -msgstr "Les LED s'allument comme un cercle de chargement, puis s'éteignent" -"toutes en même temps." +msgid "" +"LEDs turn on like a loading circle, and are then all turned off at once." +msgstr "" +"Les LED s'allument comme un cercle de chargement, puis s'éteignenttoutes en " +"même temps." #: api.tcp_client.NiryoRobot.led_ring_breath:13 #: api.tcp_client.NiryoRobot.led_ring_go_up:14 @@ -1418,48 +1606,55 @@ msgstr "Les LED s'allument comme un cercle de chargement, puis s'éteignent" msgid "" "Number of consecutive turns around the Led Ring. If 0, the animation " "continues endlessly." -msgstr "Nombre de tours consécutifs autour du Led Ring. Si 0, l'animation" -"continue indéfiniment." +msgstr "" +"Nombre de tours consécutifs autour du Led Ring. Si 0, l'animationcontinue " +"indéfiniment." #: api.tcp_client.NiryoRobot.led_ring_go_up_down:1 of msgid "LEDs turn on like a loading circle, and are turned off the same way." -msgstr "Les LED s'allument comme un cercle de chargement et s'éteignent" -"de la même manière." +msgstr "" +"Les LED s'allument comme un cercle de chargement et s'éteignentde la même " +"manière." #: api.tcp_client.NiryoRobot.led_ring_breath:1 of msgid "" -"Variation of the light intensity of the LED ring, similar to human " -"breathing." -msgstr "Variation de l'intensité lumineuse de l'anneau LED, similaire" -"à la respiration humaine." +"Variation of the light intensity of the LED ring, similar to human breathing." +msgstr "" +"Variation de l'intensité lumineuse de l'anneau LED, similaireà la " +"respiration humaine." #: api.tcp_client.NiryoRobot.led_ring_snake:1 of -msgid "A small coloured snake (certainly a python :D ) runs around the LED ring." -msgstr "Un petit serpent coloré (certainement un python :D ) court autour" -"de l'anneau LED." +msgid "" +"A small coloured snake (certainly a python :D ) runs around the LED ring." +msgstr "" +"Un petit serpent coloré (certainement un python :D ) court autourde l'anneau " +"LED." #: api.tcp_client.NiryoRobot.led_ring_snake:10 of msgid "" -"Execution time for a pattern in seconds. If 0, the default duration will " -"be used." -msgstr "Temps d'exécution d'un motif en secondes. Si 0, la durée par" -"défaut sera utilisée." +"Execution time for a pattern in seconds. If 0, the default duration will be " +"used." +msgstr "" +"Temps d'exécution d'un motif en secondes. Si 0, la durée pardéfaut sera " +"utilisée." #: api.tcp_client.NiryoRobot.led_ring_custom:1 of msgid "" -"Sends a colour command to all LEDs of the LED ring. The function expects " -"a list of colours for the 30 LEDs of the robot." -msgstr "Envoie une commande de couleur à toutes les LED de l'anneau LED." -"La fonction attend une liste de couleurs pour les 30 LED du robot." +"Sends a colour command to all LEDs of the LED ring. The function expects a " +"list of colours for the 30 LEDs of the robot." +msgstr "" +"Envoie une commande de couleur à toutes les LED de l'anneau LED.La fonction " +"attend une liste de couleurs pour les 30 LED du robot." #: api.tcp_client.NiryoRobot.led_ring_custom:9 of msgid "" -"List of size 30 of led color in a list of size 3[R, G, B]. RGB channels " -"from 0 to 255." -msgstr "Liste de taille 30 de couleur led dans une liste de taille 3[R," -"G, B]. La valeur des canaux RVB est comprise entre de 0 et 255." +"List of size 30 of led color in a list of size 3[R, G, B]. RGB channels from " +"0 to 255." +msgstr "" +"Liste de taille 30 de couleur led dans une liste de taille 3[R,G, B]. La " +"valeur des canaux RVB est comprise entre de 0 et 255." -#: ../../source/api_doc/api.rst:186 +#: ../../source/api_doc/api.rst:200 msgid "Sound" msgstr "Son" @@ -1507,9 +1702,9 @@ msgstr "Arrête un son en cours de lecture." msgid "" "Returns the duration in seconds of a sound stored in the robot database " "raise SoundRosWrapperException if the sound doesn't exists" -msgstr "Renvoie la durée en secondes d'un son stocké dans la base de" -"données du robot. Lève SoundRosWrapperException si le son n'existe" -"pas" +msgstr "" +"Renvoie la durée en secondes d'un son stocké dans la base dedonnées du " +"robot. Lève SoundRosWrapperException si le son n'existepas" #: api.tcp_client.NiryoRobot.get_sound_duration:4 of msgid "name of sound" @@ -1521,12 +1716,13 @@ msgstr "durée du son en secondes" #: api.tcp_client.NiryoRobot.say:1 of msgid "" -"Use gtts (Google Text To Speech) to interprete a string as sound " -"Languages available are: * English: 0 * French: 1 * Spanish: 2 * " -"Mandarin: 3 * Portuguese: 4" -msgstr "Utilisez gtts (Google Text To Speech) pour interpréter une chaîne de caractères" -"comme un son. Les langues disponibles sont : * Anglais : 0 * Français" -": 1 * Espagnol : 2 * Mandarin : 3 * Portugais : 4" +"Use gtts (Google Text To Speech) to interprete a string as sound Languages " +"available are: * English: 0 * French: 1 * Spanish: 2 * Mandarin: 3 * " +"Portuguese: 4" +msgstr "" +"Utilisez gtts (Google Text To Speech) pour interpréter une chaîne de " +"caractèrescomme un son. Les langues disponibles sont : * Anglais : 0 * " +"Français: 1 * Espagnol : 2 * Mandarin : 3 * Portugais : 4" #: api.tcp_client.NiryoRobot.say:9 of msgid "Example ::" @@ -1540,65 +1736,65 @@ msgstr "Texte qui doit être prononcé < 100 caractères" msgid "language of the text" msgstr "Langage du texte" -#: ../../source/api_doc/api.rst:197 +#: ../../source/api_doc/api.rst:211 msgid "Enums" msgstr "Enums (énumérations)" -#: ../../source/api_doc/api.rst:199 +#: ../../source/api_doc/api.rst:213 msgid "Enums are used to pass specific parameters to functions." msgstr "" -"Les énumérations sont utilisées pour passer des paramètres spécifiques " -"aux fonctions." +"Les énumérations sont utilisées pour passer des paramètres spécifiques aux " +"fonctions." -#: ../../source/api_doc/api.rst:201 +#: ../../source/api_doc/api.rst:215 msgid "" "For instance, :meth:`~.api.tcp_client.NiryoRobot.shift_pose` will need a " "parameter from :class:`~.api.objects.RobotAxis` enum ::" msgstr "" -"Par exemple, :meth:`~.api.tcp_client.NiryoRobot.shift_pose` aura besoin " -"d'un paramètre de type l'enum :class:`~.api.objects.RobotAxis` ::" +"Par exemple, :meth:`~.api.tcp_client.NiryoRobot.shift_pose` aura besoin d'un " +"paramètre de type l'enum :class:`~.api.objects.RobotAxis` ::" -#: ../../source/api_doc/api.rst:207 +#: ../../source/api_doc/api.rst:221 msgid "List of enums:" msgstr "Liste des énumérations " -#: ../../source/api_doc/api.rst:209 +#: ../../source/api_doc/api.rst:223 msgid ":class:`~.api.enums_communication.CalibrateMode`" msgstr ":class:`~.api.enums_communication.CalibrateMode`" -#: ../../source/api_doc/api.rst:210 +#: ../../source/api_doc/api.rst:224 msgid ":class:`~.api.enums_communication.RobotAxis`" msgstr ":class:`~.api.enums_communication.RobotAxis`" -#: ../../source/api_doc/api.rst:211 +#: ../../source/api_doc/api.rst:225 msgid ":class:`~.api.enums_communication.ToolID`" msgstr ":class:`~.api.enums_communication.ToolID`" -#: ../../source/api_doc/api.rst:212 +#: ../../source/api_doc/api.rst:226 msgid ":class:`~.api.enums_communication.PinMode`" msgstr ":class:`~.api.enums_communication.PinMode`" -#: ../../source/api_doc/api.rst:213 +#: ../../source/api_doc/api.rst:227 msgid ":class:`~.api.enums_communication.PinState`" msgstr ":class:`~.api.enums_communication.PinState`" -#: ../../source/api_doc/api.rst:214 +#: ../../source/api_doc/api.rst:228 msgid ":class:`~.api.enums_communication.PinID`" msgstr ":class:`~.api.enums_communication.PinID`" -#: ../../source/api_doc/api.rst:215 +#: ../../source/api_doc/api.rst:229 msgid ":class:`~.api.enums_communication.ConveyorID`" msgstr ":class:`~.api.enums_communication.ConveyorID`" -#: ../../source/api_doc/api.rst:216 +#: ../../source/api_doc/api.rst:230 msgid ":class:`~.api.enums_communication.ConveyorDirection`" msgstr ":class:`~.api.enums_communication.ConveyorDirection`" -#: ../../source/api_doc/api.rst:217 +#: ../../source/api_doc/api.rst:231 msgid ":class:`~.api.enums_communication.ObjectColor`" msgstr ":class:`~.api.enums_communication.ObjectColor`" -#: ../../source/api_doc/api.rst:218 +#: ../../source/api_doc/api.rst:232 msgid ":class:`~.api.enums_communication.ObjectShape`" msgstr ":class:`~.api.enums_communication.ObjectShape`" @@ -1644,11 +1840,11 @@ msgstr "Énumération des couleurs disponibles pour le traitement d'images" msgid "Enumeration of Shapes available for image processing" msgstr "Énumération des formes disponibles pour le traitement d'images" -#: ../../source/api_doc/api.rst:230 +#: ../../source/api_doc/api.rst:245 msgid "Python object classes" msgstr "Classes d'objets Python" -#: ../../source/api_doc/api.rst:232 +#: ../../source/api_doc/api.rst:247 msgid "Special objects" msgstr "Objets spéciaux" @@ -1659,16 +1855,15 @@ msgstr "Pose object qui stocke les paramètres x, y, z, roll, pitch & yaw" #: api.objects.PoseObject.copy_with_offsets:1 of msgid "Create a new pose from copying from copying actual pose with offsets" msgstr "" -"Créer une nouvelle position en copiant a position actuelle avec des " -"offsets " +"Créer une nouvelle position en copiant a position actuelle avec des offsets " #: api.objects.PoseObject.to_list:1 of msgid "" "Return a list [x, y, z, roll, pitch, yaw] corresponding to the pose's " "parameters" msgstr "" -"Retourne une liste [x, y, z, roll, pitch, yaw] correspondant aux " -"paramètres de la position." +"Retourne une liste [x, y, z, roll, pitch, yaw] correspondant aux paramètres " +"de la position." #: api.objects.HardwareStatusObject:1 of msgid "Object used to store every hardware information" @@ -1677,5 +1872,13 @@ msgstr "Objet utilisé pour stocker toutes les informations matérielles" #: api.objects.AnalogPinObject:1 api.objects.DigitalPinObject:1 of msgid "Object used to store information on digital pins" msgstr "" -"Objet utilisé pour stocker toutes les informations relatives aux digital " -"pins" +"Objet utilisé pour stocker toutes les informations relatives aux digital pins" + +#~ msgid "" +#~ ":param frame_name : name of local frame :type frame_name: str :param " +#~ "offset: list which contains offset of x, y, z, roll, pitch, yaw :type " +#~ "offset: list[float] :return: status, message :rtype: (int, str)" +#~ msgstr "" + +#~ msgid "pose of a frame" +#~ msgstr "position d'un repère" diff --git a/docs/locale/fr/LC_MESSAGES/source/examples/examples_conveyor.po b/docs/locale/fr/LC_MESSAGES/source/examples/examples_conveyor.po index 88574b2..f2593c0 100644 --- a/docs/locale/fr/LC_MESSAGES/source/examples/examples_conveyor.po +++ b/docs/locale/fr/LC_MESSAGES/source/examples/examples_conveyor.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-29 12:34+0000\n" +"POT-Creation-Date: 2022-03-25 14:56+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.9.1\n" #: ../../source/examples/examples_conveyor.rst:2 -msgid "Examples: Conveyor Belt" +msgid "Examples : Conveyor Belt" msgstr "Exemples : Le convoyeur" #: ../../source/examples/examples_conveyor.rst:4 @@ -32,7 +32,8 @@ msgid "" " at :ref:`PyNiryo - Conveyor`" msgstr "" "Si vous souhaitez en apprendre davantage à propos des fonctions du " -"convoyeur, consultez la rubrique :ref:`PyNiryo - Conveyor`." +"convoyeur, consultez la rubrique :ref:`PyNiryo - " +"Conveyor`." #: ../../source/examples/examples_conveyor.rst:9 msgid "" diff --git a/docs/locale/fr/LC_MESSAGES/source/examples/examples_frames.po b/docs/locale/fr/LC_MESSAGES/source/examples/examples_frames.po new file mode 100644 index 0000000..d241648 --- /dev/null +++ b/docs/locale/fr/LC_MESSAGES/source/examples/examples_frames.po @@ -0,0 +1,56 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2022, Niryo All rights reserved. No part of this document +# may be reproduced or transmitted in any form or by any means without prior +# written consent of Niryo SAS +# This file is distributed under the same license as the PyNiryo package. +# FIRST AUTHOR , 2022. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PyNiryo v1.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-03-25 14:59+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.9.1\n" + +#: ../../source/examples/examples_frames.rst:2 +msgid "Examples : Dynamic frames" +msgstr "Exemples : Repères dynamiques" + +#: ../../source/examples/examples_frames.rst:4 +msgid "This document shows how to use dynamic frames." +msgstr "Ce document montre comment utiliser les repères dynamiques." + +#: ../../source/examples/examples_frames.rst:6 +msgid "" +"If you want to see more about dynamic frames functions, you can look at " +":ref:`PyNiryo - Frames`" +msgstr "" +"Si vous souhaitez en apprendre davantage à propos des fonctions des " +"repères dynamiques, consultez la rubrique :ref:`PyNiryo - " +"Frames`." + +#: ../../source/examples/examples_frames.rst:9 +msgid "" +"If you are using the real robot, make sure the environment around it is " +"clear." +msgstr "" +"Si vous utilisez le robot, assurez vous que l'environnement autour de " +"celui-ci est dégagé." + +#: ../../source/examples/examples_frames.rst:12 +msgid "Simple dynamic frame control" +msgstr "Contrôle simple des repères dynamiques" + +#: ../../source/examples/examples_frames.rst:13 +msgid "" +"This example shows how to create a frame and do a small pick and place in" +" this frame: ::" +msgstr "" +"Cet exemple montre comment créer un repère et effectuer un petit pick & place dans ce repère: ::" \ No newline at end of file diff --git a/docs/locale/fr/LC_MESSAGES/source/setup/ip_address.po b/docs/locale/fr/LC_MESSAGES/source/setup/ip_address.po index 0b77c3c..5b438e3 100644 --- a/docs/locale/fr/LC_MESSAGES/source/setup/ip_address.po +++ b/docs/locale/fr/LC_MESSAGES/source/setup/ip_address.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: PyNiryo 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-10 16:14+0000\n" +"POT-Creation-Date: 2022-03-22 12:11+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -137,4 +137,3 @@ msgstr "" #: ../../source/setup/ip_address.rst:74 msgid "Setting up a custom static IP on Niryo Studio" msgstr "Configuration d'une IP statique sur Niryo Studio" - diff --git a/docs/source/api_doc/api.rst b/docs/source/api_doc/api.rst index 1f259c8..8edbd14 100644 --- a/docs/source/api_doc/api.rst +++ b/docs/source/api_doc/api.rst @@ -94,12 +94,26 @@ Trajectories ^^^^^^^^^^^^^ .. automethod:: api.tcp_client.NiryoRobot.get_trajectory_saved +.. automethod:: api.tcp_client.NiryoRobot.get_saved_trajectory_list +.. automethod:: api.tcp_client.NiryoRobot.execute_registered_trajectory .. automethod:: api.tcp_client.NiryoRobot.execute_trajectory_from_poses .. automethod:: api.tcp_client.NiryoRobot.execute_trajectory_from_poses_and_joints -.. automethod:: api.tcp_client.NiryoRobot.execute_trajectory_saved .. automethod:: api.tcp_client.NiryoRobot.save_trajectory +.. automethod:: api.tcp_client.NiryoRobot.save_last_learned_trajectory .. automethod:: api.tcp_client.NiryoRobot.delete_trajectory -.. automethod:: api.tcp_client.NiryoRobot.get_saved_trajectory_list +.. automethod:: api.tcp_client.NiryoRobot.clean_trajectory_memory + +Dynamic frames +^^^^^^^^^^^^^^^^^^^^^^ + +.. automethod:: api.tcp_client.NiryoRobot.get_saved_dynamic_frame_list +.. automethod:: api.tcp_client.NiryoRobot.get_saved_dynamic_frame +.. automethod:: api.tcp_client.NiryoRobot.save_dynamic_frame_from_poses +.. automethod:: api.tcp_client.NiryoRobot.save_dynamic_frame_from_points +.. automethod:: api.tcp_client.NiryoRobot.edit_dynamic_frame +.. automethod:: api.tcp_client.NiryoRobot.delete_dynamic_frame +.. automethod:: api.tcp_client.NiryoRobot.move_relative +.. automethod:: api.tcp_client.NiryoRobot.move_linear_relative Tools ^^^^^^^^^^^^^ diff --git a/docs/source/examples/code_templates.rst b/docs/source/examples/code_templates.rst index b61b471..27cbe6b 100644 --- a/docs/source/examples/code_templates.rst +++ b/docs/source/examples/code_templates.rst @@ -22,7 +22,6 @@ Very simple, straightforward: :: # Releasing connection robot.close_connection() - Advanced template ------------------- diff --git a/docs/source/examples/examples_conveyor.rst b/docs/source/examples/examples_conveyor.rst index fd2b03a..a626fc1 100644 --- a/docs/source/examples/examples_conveyor.rst +++ b/docs/source/examples/examples_conveyor.rst @@ -1,4 +1,4 @@ -Examples: Conveyor Belt +Examples : Conveyor Belt ======================== This document shows how to use Ned's Conveyor Belt. diff --git a/docs/source/examples/examples_frames.rst b/docs/source/examples/examples_frames.rst new file mode 100644 index 0000000..a7e53fa --- /dev/null +++ b/docs/source/examples/examples_frames.rst @@ -0,0 +1,56 @@ +Examples : Dynamic frames +============================ + +This document shows how to use dynamic frames. + +If you want to see more about dynamic frames functions, you can look at :ref:`PyNiryo - Frames` + +.. danger:: + If you are using the real robot, make sure the environment around it is clear. + +Simple dynamic frame control +------------------------------- +This example shows how to create a frame and do a small pick and place in this frame: :: + + from pyniryo import * + + robot_ip_address = "192.168.1.91" + gripper_speed = 400 + + if __name__ == '__main__': + robot = NiryoRobot(robot_ip_address) + + # Create frame + point_o = [0.15, 0.15, 0] + point_x = [0.25, 0.2, 0] + point_y = [0.2, 0.25, 0] + + robot.save_dynamic_frame_from_points("dynamic_frame", "description", point_o, point_x, point_y) + + # Get list of frames + print(robot.get_saved_dynamic_frame_list()) + # Check creation of the frame + info = robot.get_saved_dynamic_frame("dynamic_frame") + print(info) + + # Pick + robot.open_gripper(gripper_speed) + # Move to the frame + initial_pose = PoseObject(0, 0, 0, 0, 1.57, 0) + robot.move_pose(initial_pose, "dynamic_frame") + robot.close_gripper(gripper_speed) + + # Move in frame + robot.move_linear_relative([0, 0, 0.1, 0, 0, 0], "dynamic_frame") + robot.move_relative([0.1, 0, 0, 0, 0, 0], "dynamic_frame") + robot.move_linear_relative([0, 0, -0.1, 0, 0, 0], "dynamic_frame") + + # Place + robot.open_gripper(gripper_speed) + robot.move_linear_relative([0, 0, 0.1, 0, 0, 0], "dynamic_frame") + + # Home + robot.move_joints(0, 0.5, -1.25, 0, 0, 0) + + # Delete frame + robot.delete_dynamic_frame("dynamic_frame") \ No newline at end of file diff --git a/docs/source/examples/examples_movement.rst b/docs/source/examples/examples_movement.rst index d28762f..631df02 100644 --- a/docs/source/examples/examples_movement.rst +++ b/docs/source/examples/examples_movement.rst @@ -31,7 +31,7 @@ or via the ``joints`` setter, at your convenience:: # Moving Joints with function & a list of floats robot.move_joints([-0.5, -0.6, 0.0, 0.3, 0.0, 0.0]) - + # Moving Joints with setter & 6 floats robot.joints = 0.2, -0.4, 0.0, 0.0, 0.0, 0.0 diff --git a/pyniryo/api/enums_communication.py b/pyniryo/api/enums_communication.py index af2bed6..0152527 100644 --- a/pyniryo/api/enums_communication.py +++ b/pyniryo/api/enums_communication.py @@ -183,14 +183,27 @@ class Command(Enum): PLACE_FROM_POSE = 61 PICK_AND_PLACE = 62 - # Trajectories + # Trajectories GET_TRAJECTORY_SAVED = 80 - EXECUTE_TRAJECTORY_FROM_POSES = 81 - EXECUTE_TRAJECTORY_SAVED = 82 - SAVE_TRAJECTORY = 83 - DELETE_TRAJECTORY = 84 - GET_SAVED_TRAJECTORY_LIST = 85 - EXECUTE_TRAJECTORY_FROM_POSES_AND_JOINTS = 86 + GET_SAVED_TRAJECTORY_LIST = 81 + EXECUTE_REGISTERED_TRAJECTORY = 82 + EXECUTE_TRAJECTORY_FROM_POSES = 83 + EXECUTE_TRAJECTORY_FROM_POSES_AND_JOINTS = 84 + SAVE_TRAJECTORY = 85 + SAVE_LAST_LEARNED_TRAJECTORY = 86 + UPDATE_TRAJECTORY_INFOS = 87 + DELETE_TRAJECTORY = 88 + CLEAN_TRAJECTORY_MEMORY = 89 + + # Dynamic frames + GET_SAVED_DYNAMIC_FRAME_LIST = 95 + GET_SAVED_DYNAMIC_FRAME = 96 + SAVE_DYNAMIC_FRAME_FROM_POSES = 97 + SAVE_DYNAMIC_FRAME_FROM_POINTS = 98 + EDIT_DYNAMIC_FRAME = 99 + DELETE_DYNAMIC_FRAME = 100 + MOVE_RELATIVE = 101 + MOVE_LINEAR_RELATIVE = 102 # - Tools UPDATE_TOOL = 120 diff --git a/pyniryo/api/tcp_client.py b/pyniryo/api/tcp_client.py index 3a58643..6193740 100644 --- a/pyniryo/api/tcp_client.py +++ b/pyniryo/api/tcp_client.py @@ -446,7 +446,8 @@ def pose(self, *args): def move_pose(self, *args): """ - Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose. + Move robot end effector pose to a (x, y, z, roll, pitch, yaw, frame_name) pose + in a particular frame (frame_name) if defined. x, y & z are expressed in meters / roll, pitch & yaw are expressed in radians All lines of the next example realize the same operation: :: @@ -454,25 +455,36 @@ def move_pose(self, *args): robot.pose = [0.2, 0.1, 0.3, 0.0, 0.5, 0.0] robot.move_pose([0.2, 0.1, 0.3, 0.0, 0.5, 0.0]) robot.move_pose(0.2, 0.1, 0.3, 0.0, 0.5, 0.0) + robot.move_pose(0.2, 0.1, 0.3, 0.0, 0.5, 0.0) robot.move_pose(PoseObject(0.2, 0.1, 0.3, 0.0, 0.5, 0.0)) + robot.move_pose([0.2, 0.1, 0.3, 0.0, 0.5, 0.0], "frame") + robot.move_pose(PoseObject(0.2, 0.1, 0.3, 0.0, 0.5, 0.0), "frame") - :param args: either 6 args (1 for each coordinates) or a list of 6 coordinates or a ``PoseObject`` - :type args: Union[tuple[float], list[float], PoseObject] - + :param args: either 7 args (1 for each coordinates and 1 for the name of the frame) or a list of 6 coordinates or a ``PoseObject`` + and 1 for the frame name + :type args: Union[tuple[float], list[float], PoseObject, [tuple[float], str], [list[float], str], [PoseObject, str]] :rtype: None """ - pose_list = self.__args_pose_to_list(*args) + if len(args) in [2, 7]: + pose_list = list(self.__args_pose_to_list(*args[:-1])) + [args[-1]] + else: + pose_list = list(self.__args_pose_to_list(*args)) + [''] self.__send_n_receive(Command.MOVE_POSE, *pose_list) def move_linear_pose(self, *args): """ - Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose with a linear trajectory + Move robot end effector pose to a (x, y, z, roll, pitch, yaw) pose with a linear trajectory, + in a particular frame (frame_name) if defined - :param args: either 6 args (1 for each coordinates) or a list of 6 coordinates or a PoseObject - :type args: Union[tuple[float], list[float], PoseObject] + :param args: either 7 args (1 for each coordinates and 1 for the name of the frame) or a list of 6 coordinates or a ``PoseObject`` + and 1 for the frame name + :type args: Union[tuple[float], list[float], PoseObject, [tuple[float], str], [list[float], str], [PoseObject, str]] :rtype: None """ - pose_list = self.__args_pose_to_list(*args) + if len(args) in [2, 7]: + pose_list = list(self.__args_pose_to_list(*args[:-1])) + [args[-1]] + else: + pose_list = list(self.__args_pose_to_list(*args)) + [''] self.__send_n_receive(Command.MOVE_LINEAR_POSE, *pose_list) def shift_pose(self, axis, shift_value): @@ -582,7 +594,7 @@ def inverse_kinematics(self, *args): def get_pose_saved(self, pose_name): """ Get pose saved in from Ned's memory - + :param pose_name: Pose name in robot's memory :type pose_name: str :return: Pose associated to pose_name @@ -596,7 +608,7 @@ def get_pose_saved(self, pose_name): def save_pose(self, pose_name, *args): """ Save pose in robot's memory - + :type pose_name: str :param args: either 6 args (1 for each coordinates) or a list of 6 coordinates or a PoseObject :type args: Union[list[float], tuple[float], PoseObject] @@ -647,7 +659,7 @@ def pick_from_pose(self, *args): def place_from_pose(self, *args): """ Execute a placing from a position. - + A placing is described as : \n | * going over the place | * going down until height = z @@ -685,12 +697,20 @@ def get_trajectory_saved(self, trajectory_name): :type trajectory_name: str :return: Trajectory - :rtype: list[list[float]] + :rtype: list[Joints] """ self.__check_type(trajectory_name, str) return self.__send_n_receive(Command.GET_TRAJECTORY_SAVED, trajectory_name) - def execute_trajectory_saved(self, trajectory_name): + def get_saved_trajectory_list(self): + """ + Get list of trajectories' name saved in robot memory + + :rtype: list[str] + """ + return self.__send_n_receive(Command.GET_SAVED_TRAJECTORY_LIST) + + def execute_registered_trajectory(self, trajectory_name): """ Execute trajectory from Ned's memory @@ -698,7 +718,7 @@ def execute_trajectory_saved(self, trajectory_name): :rtype: None """ self.__check_type(trajectory_name, str) - self.__send_n_receive(Command.EXECUTE_TRAJECTORY_SAVED, trajectory_name) + self.__send_n_receive(Command.EXECUTE_REGISTERED_TRAJECTORY, trajectory_name) def execute_trajectory_from_poses(self, list_poses, dist_smoothing=0.0): """ @@ -753,24 +773,59 @@ def execute_trajectory_from_poses_and_joints(self, list_pose_joints, list_type=N self.__send_n_receive(Command.EXECUTE_TRAJECTORY_FROM_POSES_AND_JOINTS, list_pose_joints, list_type, dist_smoothing) - def save_trajectory(self, trajectory_name, list_poses): + def save_trajectory(self, trajectory, trajectory_name, trajectory_description): """ Save trajectory in robot memory + :param trajectory: list of Joints [j1, j2, j3, j4, j5, j6] as waypoints to create the trajectory + :type trajectory: list[list[float]] + :param trajectory_name: Name you want to give to the trajectory :type trajectory_name: str - :param list_poses: List of [x,y,z,qx,qy,qz,qw] or list of [x,y,z,roll,pitch,yaw] - :type list_poses: list[list[float]] + :param trajectory_description: Description you want to give to the trajectory + :rtype: None """ self.__check_type(trajectory_name, str) - for i, pose in enumerate(list_poses): - if len(pose) != 7 and len(pose) != 6: + self.__check_type(trajectory_description, str) + self.__check_type(trajectory, list) + for joints in trajectory: + self.__check_type(joints, list) + length = len(joints) + if length != 6: self.__raise_exception( - "7 parameters expected in a pose [x,y,z,qx,qy,qz,qw], or 6 in a pose [x,y,z,roll,pitch,yaw], " - "{} parameters given".format(len(pose))) - list_poses[i] = self.__map_list(pose, float) + "Expect 6 joint values per waypoint [j1,j2,j3,j4,j5,j6], but {} parameters given: {} ".format( + length, joints)) + + self.__send_n_receive(Command.SAVE_TRAJECTORY, trajectory, trajectory_name, trajectory_description) + + def save_last_learned_trajectory(self, name, description): + """ + Save last user executed trajectory + + :type name: str + :type description: str + :rtype: None + """ + self.__check_type(name, str) + self.__check_type(description, str) + self.__send_n_receive(Command.SAVE_LAST_LEARNED_TRAJECTORY) - self.__send_n_receive(Command.SAVE_TRAJECTORY, trajectory_name, list_poses) + def update_trajectory_infos(self, name, new_name, new_description): + """" + Update trajectory infos + + :param name: current name of the trajectory you want to update infos + :type name: str + :param new_name: new name you want to give the trajectory + :type new_name: str + :param new_description: new description you want to give the trajectory + :type new_description: str + :rtype: None + """ + self.__check_type(name, str) + self.__check_type(new_name, str) + self.__check_type(new_description, str) + self.__send_n_receive(Command.UPDATE_TRAJECTORY_INFOS) def delete_trajectory(self, trajectory_name): """ @@ -782,13 +837,14 @@ def delete_trajectory(self, trajectory_name): self.__check_type(trajectory_name, str) self.__send_n_receive(Command.DELETE_TRAJECTORY, trajectory_name) - def get_saved_trajectory_list(self): + def clean_trajectory_memory(self): """ - Get list of trajectories' name saved in robot memory + Delete trajectory from robot's memory - :rtype: list[str] + :type trajectory_name: str + :rtype: None """ - return self.__send_n_receive(Command.GET_SAVED_TRAJECTORY_LIST) + self.__send_n_receive(Command.CLEAN_TRAJECTORY_MEMORY) # -- Tools @@ -965,7 +1021,13 @@ def reset_tcp(self): def tool_reboot(self): """ - Reboot the motor of the tool equipped. Useful when an Overload error occurs. (cf HardwareStatus) + Reboot the motor of the tool equparam_list = [workspace_name] + + Example: :: + + for pose in (pose_origin, pose_2, pose_3, pose_4): + pose_list = self.__args_pose_to_list(pose) + param_list.append(pose_list)ipped. Useful when an Overload error occurs. (cf HardwareStatus) :rtype: None """ @@ -1304,7 +1366,7 @@ def get_target_pose_from_rel(self, workspace_name, height_offset, x_rel, y_rel, """ Given a pose (x_rel, y_rel, yaw_rel) relative to a workspace, this function returns the robot pose in which the current tool will be able to pick an object at this pose. - + The height_offset argument (in m) defines how high the tool will hover over the workspace. If height_offset = 0, the tool will nearly touch the workspace. @@ -1564,6 +1626,211 @@ def get_workspace_list(self): """ return self.__send_n_receive(Command.GET_WORKSPACE_LIST) + # Dynamic frames + + def get_saved_dynamic_frame_list(self): + """ + Get list of saved dynamic frames + + Example: :: + + list_frame, list_desc = robot.get_saved_dynamic_frame_list() + print(list_frame) + print(list_desc) + + :return: list of dynamic frames name, list of description of dynamic frames + :rtype: list[str], list[str] + """ + return self.__send_n_receive(Command.GET_SAVED_DYNAMIC_FRAME_LIST) + + def get_saved_dynamic_frame(self, frame_name): + """ + Get name, description and pose of a dynamic frame + + Example: :: + + frame = robot.get_saved_dynamic_frame("default_frame") + + :param frame_name: name of the frame + :type frame_name: str + :return: name, description, position and orientation of a frame + :rtype: list[str, str, list[float]] + """ + self.__check_type(frame_name, str) + return self.__send_n_receive(Command.GET_SAVED_DYNAMIC_FRAME, frame_name) + + def save_dynamic_frame_from_poses(self, frame_name, description, pose_origin, pose_x, pose_y, + belong_to_workspace=False): + """ + Create a dynamic frame with 3 poses (origin, x, y) + + Example: :: + + pose_o = [0.1, 0.1, 0.1, 0, 0, 0] + pose_x = [0.2, 0.1, 0.1, 0, 0, 0] + pose_y = [0.1, 0.2, 0.1, 0, 0, 0] + + robot.save_dynamic_frame_from_poses("name", "une description test", pose_o, pose_x, pose_y) + + :param frame_name: name of the frame + :type frame_name: str + :param description: description of the frame + :type description: str + :param pose_origin: pose of the origin of the frame + :type pose_origin: list[float] [x, y, z, roll, pitch, yaw] + :param pose_x: pose of the point x of the frame + :type pose_x: list[float] [x, y, z, roll, pitch, yaw] + :param pose_y: pose of the point y of the frame + :type pose_y: list[float] [x, y, z, roll, pitch, yaw] + :param belong_to_workspace: indicate if the frame belong to a workspace + :type belong_to_workspace: boolean + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame_name, str) + self.__check_type(description, str) + self.__check_type(belong_to_workspace, bool) + self.__check_instance(pose_origin, (list, PoseObject)) + self.__check_instance(pose_x, (list, PoseObject)) + self.__check_instance(pose_y, (list, PoseObject)) + + param_list = [frame_name, description] + for pose in (pose_origin, pose_x, pose_y): + pose_list = self.__args_pose_to_list(pose) + param_list.append(pose_list) + param_list.append(belong_to_workspace) + self.__send_n_receive(Command.SAVE_DYNAMIC_FRAME_FROM_POSES, *param_list) + + def save_dynamic_frame_from_points(self, frame_name, description, point_origin, point_x, point_y, + belong_to_workspace=False): + """ + Create a dynamic frame with 3 points (origin, x, y) + + Example: :: + + point_o = [-0.1, -0.1, 0.1] + point_x = [-0.2, -0.1, 0.1] + point_y = [-0.1, -0.2, 0.1] + + robot.save_dynamic_frame_from_points("name", "une description test", point_o, point_x, point_y) + + :param frame_name: name of the frame + :type frame_name: str + :param description: description of the frame + :type description: str + :param point_origin: origin point of the frame + :type point_origin: list[float] [x, y, z] + :param point_x: point x of the frame + :type point_x: list[float] [x, y, z] + :param point_y: point y of the frame + :type point_y: list[float] [x, y, z] + :param belong_to_workspace: indicate if the frame belong to a workspace + :type belong_to_workspace: boolean + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame_name, str) + self.__check_type(description, str) + self.__check_type(belong_to_workspace, bool) + self.__check_type(point_origin, list) + self.__check_type(point_x, list) + self.__check_type(point_y, list) + + param_list = [frame_name, description] + for point in (point_origin, point_x, point_y): + param_list.append(self.__map_list(point, float)) + param_list.append(belong_to_workspace) + self.__send_n_receive(Command.SAVE_DYNAMIC_FRAME_FROM_POINTS, *param_list) + + def edit_dynamic_frame(self, frame_name, new_frame_name, new_description): + """ + Modify a dynamic frame + + Example: :: + + robot.edit_dynamic_frame("name", "new_name", "new description") + + :param frame_name: name of the frame + :type frame_name: str + :param new_frame_name: new name of the frame + :type new_frame_name: str + :param new_description: new description of the frame + :type new_description: str + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame_name, str) + self.__check_type(new_frame_name, str) + self.__check_type(new_description, str) + + param_list = [frame_name, new_frame_name, new_description] + self.__send_n_receive(Command.EDIT_DYNAMIC_FRAME, *param_list) + + def delete_dynamic_frame(self, frame_name, belong_to_workspace=False): + """ + Delete a dynamic frame + + Example: :: + + robot.delete_saved_dynamic_frame("name") + + :param frame_name: name of the frame to remove + :type frame_name: str + :param belong_to_workspace: indicate if the frame belong to a workspace + :type belong_to_workspace: boolean + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame_name, str) + self.__check_type(belong_to_workspace, bool) + self.__send_n_receive(Command.DELETE_DYNAMIC_FRAME, *[frame_name, belong_to_workspace]) + + def move_relative(self, offset, frame="world"): + """ + Move robot end of a offset in a frame + + Example: :: + + robot.move_relative([0.05, 0.05, 0.05, 0.3, 0, 0], frame="default_frame") + + :param offset: list which contains offset of x, y, z, roll, pitch, yaw + :type offset: list[float] + :param frame: name of local frame + :type frame: str + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame, str) + self.__check_type(offset, list) + if len(offset) != 6: + self.__raise_exception("An offset must contain 6 members: [x, y, z, roll, pitch, yaw]") + + param_list = [offset, frame] + self.__send_n_receive(Command.MOVE_RELATIVE, *param_list) + + def move_linear_relative(self, offset, frame="world"): + """ + Move robot end of a offset by a linear movement in a frame + + Example: :: + + robot.move_linear_relative([0.05, 0.05, 0.05, 0.3, 0, 0], frame="default_frame") + + :param offset: list which contains offset of x, y, z, roll, pitch, yaw + :type offset: list[float] + :param frame: name of local frame + :type frame: str + :return: status, message + :rtype: (int, str) + """ + self.__check_type(frame, str) + self.__check_type(offset, list) + if len(offset) != 6: + self.__raise_exception("An offset must contain 6 members: [x, y, z, roll, pitch, yaw]") + + param_list = [offset, frame] + self.__send_n_receive(Command.MOVE_LINEAR_RELATIVE, *param_list) + # Sound def get_sounds(self): diff --git a/pyproject.toml b/pyproject.toml index f2dd8f3..c52ec6d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [metadata] name = 'pyniryo' -version = '1.1.1' +version = '1.1.2' description = '' author = 'Niryo' author_email = 'v.pitre@niryo.com' diff --git a/requirements.txt b/requirements.txt index d7d2412..e52bb5d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ enum34 -opencv-python==4.2.0.32; python_version == '2.7' -opencv-python==4.3.0.38; python_version > '2.7' +opencv-python>=4.2.0.32; python_version == '2.7' +opencv-python>=4.3.0.38; python_version > '2.7' numpy diff --git a/requirements/python2.txt b/requirements/python2.txt index eed8d2e..1849449 100644 --- a/requirements/python2.txt +++ b/requirements/python2.txt @@ -1,3 +1,3 @@ -r base.txt enum34 -opencv-python==4.2.0.32 \ No newline at end of file +opencv-python>=4.2.0.32 \ No newline at end of file diff --git a/requirements/python3.txt b/requirements/python3.txt index 1f73951..0605d73 100644 --- a/requirements/python3.txt +++ b/requirements/python3.txt @@ -1,2 +1,2 @@ -r base.txt -opencv-python==4.3.0.38 \ No newline at end of file +opencv-python>=4.3.0.38 \ No newline at end of file diff --git a/setup.py b/setup.py index acfd5be..bc6a8cc 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ import sys from setuptools import find_packages, setup -version = '1.1.1' +version = '1.1.2' with open('README.rst', 'r', encoding='utf-8') as f: readme = f.read() diff --git a/tests/test_pyniryo.py b/tests/test_pyniryo.py index bd9111a..b00c329 100644 --- a/tests/test_pyniryo.py +++ b/tests/test_pyniryo.py @@ -11,8 +11,8 @@ simulation = "-rpi" not in sys.argv tool_used = ToolID.GRIPPER_1 -robot_ip_address_rpi = "192.168.1.92" -robot_ip_address_gazebo = "192.168.1.92" # "127.0.0.1" +robot_ip_address_rpi = "10.10.10.10" +robot_ip_address_gazebo = "127.0.0.1" robot_ip_address = robot_ip_address_gazebo if simulation else robot_ip_address_rpi @@ -77,44 +77,57 @@ def setter_joints(joints): self.niryo_robot.joints = joints # Classic Move Joints & Get Joints - self.assertIsNone(self.niryo_robot.move_joints(0.1, -0.1, 0.0, 0.0, 0.0, 0.0)) - self.assertAlmostEqualVector(self.niryo_robot.joints, [0.1, -0.1, 0.0, 0.0, 0.0, 0.0]) + self.assertIsNone(self.niryo_robot.move_joints( + 0.1, -0.1, 0.0, 0.0, 0.0, 0.0)) + self.assertAlmostEqualVector(self.niryo_robot.joints, [ + 0.1, -0.1, 0.0, 0.0, 0.0, 0.0]) self.assertIsNone(setter_joints([0, 0, 0, 0, 0, 0])) self.assertAlmostEqualVector(self.niryo_robot.get_joints(), 6 * [0.0]) # Jog self.assertIsNone(self.niryo_robot.jog_joints(0.1, -0.1, 0, 0, 0, 0)) self.niryo_robot.wait(0.75) self.niryo_robot.set_jog_control(False) - self.assertAlmostEqualVector(self.niryo_robot.get_joints(), [0.1, -0.1, 0.0, 0.0, 0.0, 0.0]) + self.assertAlmostEqualVector(self.niryo_robot.get_joints(), [ + 0.1, -0.1, 0.0, 0.0, 0.0, 0.0]) # Check Exception with self.assertRaises(TcpCommandException): - self.niryo_robot.move_joints(0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) + self.niryo_robot.move_joints( + 0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) def test_pose(self): def setter_pose(pose): self.niryo_robot.pose = pose # Classic Move Pose & Get Pose - self.assertIsNone(self.niryo_robot.move_pose(0.15, 0.0, 0.25, 0.0, 0.0, 0.0)) + self.assertIsNone(self.niryo_robot.move_pose( + 0.15, 0.0, 0.25, 0.0, 0.0, 0.0)) self.assertIsNone(self.niryo_robot.move_pose([0.2, 0, 0.25, 0, 0, 0])) self.assertIsNone(setter_pose(PoseObject(0.2, 0, 0.3, 0, 0, 0))) - self.assertAlmostEqualVector(self.niryo_robot.get_pose().to_list(), [0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) - self.assertAlmostEqualVector(self.niryo_robot.pose.to_list(), [0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) + self.assertAlmostEqualVector(self.niryo_robot.get_pose().to_list(), [ + 0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) + self.assertAlmostEqualVector(self.niryo_robot.pose.to_list(), [ + 0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) # Linear Move Pose - self.assertIsNone(self.niryo_robot.move_linear_pose(0.15, 0.0, 0.25, 0.0, 0.0, 0.0)) - self.assertIsNone(self.niryo_robot.move_linear_pose([0.2, 0, 0.3, 0, 0, 0])) - self.assertAlmostEqualVector(self.niryo_robot.get_pose().to_list(), [0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) + self.assertIsNone(self.niryo_robot.move_linear_pose( + 0.15, 0.0, 0.25, 0.0, 0.0, 0.0)) + self.assertIsNone( + self.niryo_robot.move_linear_pose([0.2, 0, 0.3, 0, 0, 0])) + self.assertAlmostEqualVector(self.niryo_robot.get_pose().to_list(), [ + 0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) # Shift axis & Jog self.assertIsNone(self.niryo_robot.shift_pose(RobotAxis.Y, 0.05)) - self.assertIsNone(self.niryo_robot.jog_pose(-0.02, 0.0, 0.02, 0.1, 0, 0)) + self.assertIsNone( + self.niryo_robot.jog_pose(-0.02, 0.0, 0.02, 0.1, 0, 0)) self.niryo_robot.set_jog_control(False) # Shift axis linear - self.assertIsNone(self.niryo_robot.shift_linear_pose(RobotAxis.Y, 0.05)) + self.assertIsNone( + self.niryo_robot.shift_linear_pose(RobotAxis.Y, 0.05)) # Check Exceptions with self.assertRaises(TcpCommandException): self.niryo_robot.shift_pose(ToolID.ELECTROMAGNET_1, 0.05) with self.assertRaises(TcpCommandException): - self.niryo_robot.move_pose(0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) + self.niryo_robot.move_pose( + 0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) with self.assertRaises(TcpCommandException): self.niryo_robot.move_linear_pose(0.54, 0.964, 0.7, "a", "m", 1) with self.assertRaises(TcpCommandException): @@ -129,10 +142,13 @@ def test_kinematics(self): joints_reached = self.niryo_robot.get_joints() self.assertAlmostEqualVector(joints_target, joints_reached) # Inverse Kinematics - joints_target_to_initial_pose = self.niryo_robot.inverse_kinematics(initial_pose) - self.assertIsNone(self.niryo_robot.move_joints(joints_target_to_initial_pose)) + joints_target_to_initial_pose = self.niryo_robot.inverse_kinematics( + initial_pose) + self.assertIsNone(self.niryo_robot.move_joints( + joints_target_to_initial_pose)) pose_reached = self.niryo_robot.get_pose() - self.assertAlmostEqualVector(initial_pose.to_list(), pose_reached.to_list()) + self.assertAlmostEqualVector( + initial_pose.to_list(), pose_reached.to_list()) class TestSavedPose(BaseTestTcpApi): @@ -148,11 +164,14 @@ def test_creation_delete_pos(self): for i in range(3): new_name = 'test_{:03d}'.format(i) if i == 0: - self.assertIsNone(self.niryo_robot.save_pose(new_name, [0.2, 0.0, 0.3, 0.0, 0.0, 0.0])) + self.assertIsNone(self.niryo_robot.save_pose( + new_name, [0.2, 0.0, 0.3, 0.0, 0.0, 0.0])) elif i == 1: - self.assertIsNone(self.niryo_robot.save_pose(new_name, 0.2, 0.0, 0.3, 0.0, 0.0, 0.0)) + self.assertIsNone(self.niryo_robot.save_pose( + new_name, 0.2, 0.0, 0.3, 0.0, 0.0, 0.0)) else: - self.assertIsNone(self.niryo_robot.save_pose(new_name, PoseObject(0.2, 0.0, 0.3, 0.0, 0.0, 0.0))) + self.assertIsNone(self.niryo_robot.save_pose( + new_name, PoseObject(0.2, 0.0, 0.3, 0.0, 0.0, 0.0))) if new_name not in new_list: new_list.append(new_name) list_names_saved.append(new_name) @@ -161,7 +180,8 @@ def test_creation_delete_pos(self): # Delete created poses for name in list_names_saved: saved_pose = self.niryo_robot.get_pose_saved(name) - self.assertListEqual(saved_pose.to_list(), [0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) + self.assertListEqual(saved_pose.to_list(), [ + 0.2, 0.0, 0.3, 0.0, 0.0, 0.0]) self.assertIsNone(self.niryo_robot.delete_pose(name)) new_list.pop(new_list.index(name)) self.assertEqual(self.niryo_robot.get_saved_pose_list(), new_list) @@ -178,7 +198,8 @@ def test_execute_pose_saved(self): # Moving to the pose self.assertIsNone(self.niryo_robot.move_pose(pose_recup)) - self.assertAlmostEqualVector(pose_target, self.niryo_robot.get_pose().to_list()) + self.assertAlmostEqualVector( + pose_target, self.niryo_robot.get_pose().to_list()) # Deleting the pose self.assertIsNone(self.niryo_robot.delete_pose(pose_name)) @@ -195,55 +216,257 @@ def setUp(self): def test_pick_n_place_individually(self): # Picking - self.assertIsNone(self.niryo_robot.pick_from_pose(PoseObject(*self.pose_1))) + self.assertIsNone(self.niryo_robot.pick_from_pose( + PoseObject(*self.pose_1))) # Placing self.assertIsNone(self.niryo_robot.place_from_pose(*self.pose_2)) # Testing random values with self.assertRaises(TcpCommandException): - self.niryo_robot.pick_from_pose(0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) + self.niryo_robot.pick_from_pose( + 0.54, 0.964, 0.34, "a", "m", ConveyorID.ID_1) def test_pick_n_place_in_one(self): - self.assertIsNone(self.niryo_robot.pick_and_place(PoseObject(*self.pose_2), self.pose_1)) + self.assertIsNone(self.niryo_robot.pick_and_place( + PoseObject(*self.pose_2), self.pose_1)) class TestTrajectoryMethods(BaseTestTcpApi): + joints_list = [[-0.493, -0.32, -0.505, -0.814, -0.282, 0], + [0.834, -0.319, -0.466, 0.822, -0.275, 0], + [1.037, -0.081, 0.248, 1.259, -0.276, 0]] + robot_poses = [[0.25, 0.1, 0.25, 0., 0., 0., 1.], [0.25, -0.1, 0.25, 0., 0., 0., 1.], [0.25, -0.1, 0.3, 0., 0., 0., 1.], [0.25, 0.1, 0.3, 0., 0., 0., 1.]] + def test_last_learned_trajectory(self): + for i in range(3): + new_name = 'test_{:03d}'.format(i) + new_description = 'test_description_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.save_trajectory( + self.joints_list, new_name, new_description)) + self.assertIsNone(self.niryo_robot.clean_trajectory_memory()) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], []) + self.assertEqual(result["description_list"], []) + + self.assertIsNone(self.niryo_robot.save_trajectory( + self.joints_list, "last_executed_trajectory", "")) + self.assertIsNone(self.niryo_robot.save_last_learned_trajectory( + "unittest_name", "unittest_description")) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], ["unittest_name"]) + self.assertEqual(result["description_list"], ["unittest_description"]) + def test_creation_delete_trajectory(self): # Get saved trajectory list & copy it - base_list = self.niryo_robot.get_saved_trajectory_list() - new_list = [v for v in base_list] + + self.assertIsNone(self.niryo_robot.clean_trajectory_memory()) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], []) + self.assertEqual(result["description_list"], []) + + new_list = [] + list_description = [] # Create new trajectories list_names_saved = [] for i in range(3): new_name = 'test_{:03d}'.format(i) - self.assertIsNone(self.niryo_robot.save_trajectory(new_name, self.robot_poses)) + new_description = 'test_description_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.save_trajectory( + self.joints_list, new_name, new_description)) + if new_name not in new_list: + list_names_saved.append(new_name) + list_description.append(new_description) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], new_list) + self.assertEqual(result["description_list"], list_description) + + # Update Trajectories + old_names = list(list_names_saved) + for i in range(3): + old_name = old_names[i] + new_name = 'test_update_{:03d}'.format(i) + new_description = 'test_update_description_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.update_trajectory_infos( + old_name, new_name, new_description)) if new_name not in new_list: - new_list.append(new_name) list_names_saved.append(new_name) - self.assertEqual(self.niryo_robot.get_saved_trajectory_list(), new_list) + list_names_saved.remove(old_name) + list_description.append(new_description) + list_description.pop(0) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], new_list) + self.assertEqual(result["description_list"], list_description) # Delete created trajectories - for name in list_names_saved: + list_names = list(list_names_saved) + for name in list_names: self.assertIsNone(self.niryo_robot.delete_trajectory(name)) - new_list.pop(new_list.index(name)) - self.assertEqual(self.niryo_robot.get_saved_trajectory_list(), new_list) + list_names_saved.pop(list_names_saved.index(name)) + list_description.pop(list_description.index(name)) + result = self.niryo_robot.get_saved_trajectory_list() + self.assertEqual(result["name_list"], list_names_saved) + self.assertEqual(result["description_list"], list_description) def test_execute_trajectory(self): # Testing trajectory from poses - self.assertIsNone(self.niryo_robot.execute_trajectory_from_poses(self.robot_poses)) + self.assertIsNone( + self.niryo_robot.execute_trajectory_from_poses(self.robot_poses)) # Create & save a trajectory, then execute it & eventually delete it traj_name = "test_trajectory_save_and_execute" - self.assertIsNone(self.niryo_robot.save_trajectory(traj_name, self.robot_poses)) - self.assertIsNone(self.niryo_robot.execute_trajectory_saved(traj_name)) + traj_description = "test_description_trajectory_save_and_execute" + self.assertIsNone(self.niryo_robot.save_trajectory( + self.joints_list, traj_name, traj_description)) + self.assertIsNone( + self.niryo_robot.execute_registered_trajectory(traj_name)) self.assertIsNone(self.niryo_robot.delete_trajectory(traj_name)) +class TestDynamicFrame(BaseTestTcpApi): + robot_poses = [[[0.2, 0.2, 0.1, 0, 0, 0], + [0.4, 0.3, 0.1, 0, 0, 0], + [0.3, 0.4, 0.1, 0, 0, 0]], + [[-0.2, -0.2, 0.1, 0, 0, 0], + [-0.4, -0.3, 0.1, 0, 0, 0], + [-0.3, -0.4, 0.1, 0, 0, 0], ]] + + robot_point = [[[-0.2, 0.2, 0.1], + [0.4, 0.3, 0], + [0.3, 0.4, 0]], + [[0.2, -0.2, 0.1], + [-0.4, -0.3, 0], + [-0.3, -0.4, 0]]] + + def test_main_frame(self): + self.__test_creation_edition_frame() + self.__test_move_in_frame() + self.__test_deletion() + + def __test_creation_edition_frame(self): + base_list_name, base_list_desc = self.niryo_robot.get_saved_dynamic_frame_list() + new_list_name = [frame for frame in base_list_name] + + # Create frame by pose + list_saved = [] + for i in range(4): + if i < 2: + # Test creation by poses + new_name = 'unitTestFramePose_{:03d}'.format(i) + new_desc = 'descTestFramePose_{:03d}'.format(i) + pose_o = self.robot_poses[i][0] + pose_x = self.robot_poses[i][1] + pose_y = self.robot_poses[i][2] + self.assertIsNone( + self.niryo_robot.save_dynamic_frame_from_poses(new_name, new_desc, pose_o, pose_x, pose_y)) + + # Test edition + new_edit_name = 'unitEditTestFramePose_{:03d}'.format(i) + new_edit_desc = 'descEditTestFramePose_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.edit_dynamic_frame(new_name, new_edit_name, new_edit_desc)) + self.assertEqual(self.niryo_robot.get_saved_dynamic_frame(new_edit_name)[0], new_edit_name) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.get_saved_dynamic_frame(0) + + if new_edit_name not in new_list_name: + new_list_name.append(new_edit_name) + list_saved.append(new_edit_name) + + new_list_name.sort() + + self.assertEqual(self.niryo_robot.get_saved_dynamic_frame_list()[0], new_list_name) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.save_dynamic_frame_from_poses(0, "unittest", pose_o, pose_x, pose_y) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.save_dynamic_frame_from_points(0, "unittest", pose_o, pose_x, pose_y) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.edit_dynamic_frame("unitTestFramePose_000", 0, 0) + + else: + # Test creation by points + new_name = 'unitTestFramePose_{:03d}'.format(i) + new_desc = 'descTestFramePose_{:03d}'.format(i) + point_o = self.robot_point[2 - i][0] + point_x = self.robot_point[2 - i][1] + point_y = self.robot_point[2 - i][2] + self.assertIsNone( + self.niryo_robot.save_dynamic_frame_from_points(new_name, new_desc, point_o, point_x, point_y)) + + # Test edition + new_edit_name = 'unitEditTestFramePose_{:03d}'.format(i) + new_edit_desc = 'descEditTestFramePose_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.edit_dynamic_frame(new_name, new_edit_name, new_edit_desc)) + self.assertEqual(self.niryo_robot.get_saved_dynamic_frame(new_edit_name)[0], new_edit_name) + + if new_edit_name not in new_list_name: + new_list_name.append(new_edit_name) + list_saved.append(new_edit_name) + + new_list_name.sort() + + self.assertEqual(self.niryo_robot.get_saved_dynamic_frame_list()[0], new_list_name) + + def __test_move_in_frame(self): + # Move frame 000 + pose0 = (0, 0, 0, 0, 1.57, 0) + self.assertIsNone(self.niryo_robot.move_pose(pose0, "unitEditTestFramePose_000")) + self.assertIsNone( + self.niryo_robot.move_linear_pose((0.05, 0.05, 0.05, 0, 1.57, 0), "unitEditTestFramePose_000")) + + # Move frame 001 + pose1 = PoseObject(0, 0, 0, 0, 1.57, 0) + self.assertIsNone(self.niryo_robot.move_pose(pose1, "unitEditTestFramePose_001")) + self.assertIsNone( + self.niryo_robot.move_linear_pose((0.05, 0.05, 0.05, 0, 1.57, 0), "unitEditTestFramePose_001")) + + # Move frame 002 + pose2 = (0, 0, 0, 0, 1.57, 0) + self.assertIsNone(self.niryo_robot.move_pose(pose2, "unitEditTestFramePose_002")) + self.assertIsNone( + self.niryo_robot.move_relative([0.05, 0.05, 0.05, 0.1, 0.1, 0.1], "unitEditTestFramePose_002")) + self.assertIsNone( + self.niryo_robot.move_linear_relative([-0.05, -0.05, -0.05, 0, 0, 0], "unitEditTestFramePose_002")) + + # Move frame 003 + pose3 = PoseObject(0, 0, 0, 0, 1.57, 0) + self.assertIsNone(self.niryo_robot.move_pose(pose3, "unitEditTestFramePose_003")) + self.assertIsNone( + self.niryo_robot.move_relative([0.05, 0.05, 0.05, 0.1, 0.1, 0.1], "unitEditTestFramePose_003")) + self.assertIsNone( + self.niryo_robot.move_linear_relative([-0.05, -0.05, -0.05, 0, 0, 0], "unitEditTestFramePose_003")) + + # Test default world frame + self.assertIsNone( + self.niryo_robot.move_relative([0.1, 0.1, 0.1, 0, 0, 0])) + self.assertIsNone( + self.niryo_robot.move_linear_relative([0, 0, -0.1, 0, 0, 0])) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.move_relative([0.05, 0.05, 0.05, 0.1, 0.1, 0.1], 0) + + with self.assertRaises(TcpCommandException): + self.niryo_robot.move_linear_relative([0.05, 0.05, 0.05, 0.1, 0.1, 0.1], 0) + + def __test_deletion(self): + base_list = self.niryo_robot.get_saved_dynamic_frame_list()[0] + new_list = [frame for frame in base_list] + + for i in range(4): + name_delete = 'unitEditTestFramePose_{:03d}'.format(i) + self.assertIsNone(self.niryo_robot.delete_dynamic_frame(name_delete)) + + new_list.remove(name_delete) + + self.assertEqual(self.niryo_robot.get_saved_dynamic_frame_list()[0], new_list) + + # noinspection PyTypeChecker class TestTools(BaseTestTcpApi): @classmethod @@ -266,8 +489,10 @@ def test_select(self): self.assertIsNone(self.niryo_robot.update_tool()) self.assertEqual(tool_used, self.niryo_robot.tool) self.assertEqual(tool_used, self.niryo_robot.get_current_tool_id()) - self.assertNotEqual(self.niryo_robot.get_current_tool_id(), tool_used.value) - self.assertNotEqual(self.niryo_robot.get_current_tool_id(), ToolID.NONE) + self.assertNotEqual( + self.niryo_robot.get_current_tool_id(), tool_used.value) + self.assertNotEqual( + self.niryo_robot.get_current_tool_id(), ToolID.NONE) def test_use_tool(self): # Equip tool @@ -287,8 +512,10 @@ def test_use_tool(self): self.assertIsNone(self.niryo_robot.open_gripper()) self.assertIsNone(self.niryo_robot.open_gripper(speed=500)) self.assertIsNone(self.niryo_robot.close_gripper(speed=500)) - self.assertIsNone(self.niryo_robot.open_gripper(max_torque_percentage=100, hold_torque_percentage=50)) - self.assertIsNone(self.niryo_robot.close_gripper(max_torque_percentage=100, hold_torque_percentage=50)) + self.assertIsNone(self.niryo_robot.open_gripper( + max_torque_percentage=100, hold_torque_percentage=50)) + self.assertIsNone(self.niryo_robot.close_gripper( + max_torque_percentage=100, hold_torque_percentage=50)) def test_electromagnet(self): # Equip tool @@ -300,7 +527,8 @@ def test_electromagnet(self): self.assertIsNone(self.niryo_robot.release_with_tool()) # Grasp/Release with ID - self.assertIsNone(self.niryo_robot.activate_electromagnet(PinID.GPIO_1B)) + self.assertIsNone( + self.niryo_robot.activate_electromagnet(PinID.GPIO_1B)) self.assertIsNone(self.niryo_robot.deactivate_electromagnet("1B")) @@ -322,61 +550,92 @@ def tearDown(self): def test_digital_ios(self): self.assertIsInstance(self.niryo_robot.get_digital_io_state(), list) - self.assertIsInstance(self.niryo_robot.get_digital_io_state()[0], DigitalPinObject) - self.assertIsInstance(self.niryo_robot.get_digital_io_state()[0].pin_id, PinID) - self.assertIsInstance(self.niryo_robot.get_digital_io_state()[0].name, str) - self.assertIsInstance(self.niryo_robot.get_digital_io_state()[0].mode, PinMode) - self.assertIsInstance(self.niryo_robot.get_digital_io_state()[0].state, PinState) + self.assertIsInstance(self.niryo_robot.get_digital_io_state()[ + 0], DigitalPinObject) + self.assertIsInstance( + self.niryo_robot.get_digital_io_state()[0].pin_id, PinID) + self.assertIsInstance( + self.niryo_robot.get_digital_io_state()[0].name, str) + self.assertIsInstance( + self.niryo_robot.get_digital_io_state()[0].mode, PinMode) + self.assertIsInstance( + self.niryo_robot.get_digital_io_state()[0].state, PinState) for index, pin_object in enumerate(self.niryo_robot.get_digital_io_state()): if pin_object.name.startswith('DI'): continue if not (pin_object.name.startswith('SW') or pin_object.name.startswith('DO')): - self.assertIsNone(self.niryo_robot.set_pin_mode(pin_object.name, PinMode.OUTPUT)) + self.assertIsNone(self.niryo_robot.set_pin_mode( + pin_object.name, PinMode.OUTPUT)) self.niryo_robot.wait(1) - self.assertEqual(self.niryo_robot.get_digital_io_state()[index].mode, PinMode.OUTPUT) - - self.assertIsNone(self.niryo_robot.digital_write(pin_object.pin_id, PinState.HIGH)) - self.assertEqual(self.niryo_robot.digital_read(pin_object.pin_id), PinState.HIGH) - self.assertEqual(self.niryo_robot.get_digital_io_state()[index].state, PinState.HIGH) - self.assertIsNone(self.niryo_robot.digital_write(pin_object.name, PinState.LOW)) - self.assertEqual(self.niryo_robot.digital_read(pin_object.name), PinState.LOW) - self.assertEqual(self.niryo_robot.get_digital_io_state()[index].state, PinState.LOW) + self.assertEqual(self.niryo_robot.get_digital_io_state()[ + index].mode, PinMode.OUTPUT) + + self.assertIsNone(self.niryo_robot.digital_write( + pin_object.pin_id, PinState.HIGH)) + self.assertEqual(self.niryo_robot.digital_read( + pin_object.pin_id), PinState.HIGH) + self.assertEqual(self.niryo_robot.get_digital_io_state()[ + index].state, PinState.HIGH) + self.assertIsNone(self.niryo_robot.digital_write( + pin_object.name, PinState.LOW)) + self.assertEqual(self.niryo_robot.digital_read( + pin_object.name), PinState.LOW) + self.assertEqual(self.niryo_robot.get_digital_io_state()[ + index].state, PinState.LOW) if not (pin_object.name.startswith('SW') or pin_object.name.startswith('DO')): - self.assertIsNone(self.niryo_robot.set_pin_mode(pin_object.name, PinMode.INPUT)) - self.assertEqual(self.niryo_robot.get_digital_io_state()[index].mode, PinMode.INPUT) + self.assertIsNone(self.niryo_robot.set_pin_mode( + pin_object.name, PinMode.INPUT)) + self.assertEqual(self.niryo_robot.get_digital_io_state()[ + index].mode, PinMode.INPUT) # with self.assertRaises(NiryoRobotException): # self.niryo_robot.digital_write(pin, PinState.LOW) def test_analog_ios(self): self.assertIsInstance(self.niryo_robot.get_analog_io_state(), list) - self.assertIsInstance(self.niryo_robot.get_analog_io_state()[0], AnalogPinObject) - self.assertIsInstance(self.niryo_robot.get_analog_io_state()[0].pin_id, PinID) - self.assertIsInstance(self.niryo_robot.get_analog_io_state()[0].name, str) - self.assertIsInstance(self.niryo_robot.get_analog_io_state()[0].mode, PinMode) - self.assertIsInstance(self.niryo_robot.get_analog_io_state()[0].value, (float, int)) + self.assertIsInstance(self.niryo_robot.get_analog_io_state()[ + 0], AnalogPinObject) + self.assertIsInstance( + self.niryo_robot.get_analog_io_state()[0].pin_id, PinID) + self.assertIsInstance( + self.niryo_robot.get_analog_io_state()[0].name, str) + self.assertIsInstance( + self.niryo_robot.get_analog_io_state()[0].mode, PinMode) + self.assertIsInstance(self.niryo_robot.get_analog_io_state()[ + 0].value, (float, int)) for index, pin_object in enumerate(self.niryo_robot.get_analog_io_state()): if pin_object.name.startswith('AI'): - self.assertEqual(self.niryo_robot.get_analog_io_state()[index].mode, PinMode.INPUT) + self.assertEqual(self.niryo_robot.get_analog_io_state()[ + index].mode, PinMode.INPUT) else: - self.assertEqual(self.niryo_robot.get_analog_io_state()[index].mode, PinMode.OUTPUT) - - self.assertIsNone(self.niryo_robot.analog_write(pin_object.pin_id, 5.0)) - self.assertEqual(self.niryo_robot.analog_read(pin_object.pin_id), 5.0) - self.assertEqual(self.niryo_robot.get_analog_io_state()[index].value, 5.0) - - self.assertIsNone(self.niryo_robot.analog_write(pin_object.pin_id, 2.5)) - self.assertEqual(self.niryo_robot.analog_read(pin_object.pin_id), 2.5) - self.assertEqual(self.niryo_robot.get_analog_io_state()[index].value, 2.5) - - self.assertIsNone(self.niryo_robot.analog_write(pin_object.pin_id, 0)) - self.assertEqual(self.niryo_robot.analog_read(pin_object.pin_id), 0) - self.assertEqual(self.niryo_robot.get_analog_io_state()[index].value, 0) + self.assertEqual(self.niryo_robot.get_analog_io_state()[ + index].mode, PinMode.OUTPUT) + + self.assertIsNone( + self.niryo_robot.analog_write(pin_object.pin_id, 5.0)) + self.assertEqual(self.niryo_robot.analog_read( + pin_object.pin_id), 5.0) + self.assertEqual(self.niryo_robot.get_analog_io_state()[ + index].value, 5.0) + + self.assertIsNone( + self.niryo_robot.analog_write(pin_object.pin_id, 2.5)) + self.assertEqual(self.niryo_robot.analog_read( + pin_object.pin_id), 2.5) + self.assertEqual(self.niryo_robot.get_analog_io_state()[ + index].value, 2.5) + + self.assertIsNone( + self.niryo_robot.analog_write(pin_object.pin_id, 0)) + self.assertEqual( + self.niryo_robot.analog_read(pin_object.pin_id), 0) + self.assertEqual( + self.niryo_robot.get_analog_io_state()[index].value, 0) def test_button(self): self.assertIsInstance(self.niryo_robot.get_custom_button_state(), str) @@ -393,13 +652,15 @@ class TestVision(BaseTestTcpApi): def setUp(self): super(TestVision, self).setUp() - self.assertIsNone(self.niryo_robot.move_joints(0.0, 0.0, 0.0, 0.0, -1.57, 0.0)) + self.assertIsNone(self.niryo_robot.move_joints( + 0.0, 0.0, 0.0, 0.0, -1.57, 0.0)) self.assertIsNone(self.niryo_robot.update_tool()) self.assertIsNone(self.niryo_robot.save_workspace_from_points( self.workspace_name, self.point_1, self.point_2, self.point_3, self.point_4)) def tearDown(self): - self.assertIsNone(self.niryo_robot.delete_workspace(self.workspace_name)) + self.assertIsNone( + self.niryo_robot.delete_workspace(self.workspace_name)) super(TestVision, self).tearDown() def test_vision_detect(self): @@ -414,14 +675,16 @@ def test_vision_detect(self): self.assertIsNotNone(self.niryo_robot.get_target_pose_from_cam( self.workspace_name, 0.1, ObjectShape.ANY, ObjectColor.ANY)) - self.assertIsNotNone(self.niryo_robot.detect_object(self.workspace_name, ObjectShape.ANY, ObjectColor.RED)) + self.assertIsNotNone(self.niryo_robot.detect_object( + self.workspace_name, ObjectShape.ANY, ObjectColor.RED)) def test_vision_move(self): # Test to move to the object self.assertIsNotNone(self.niryo_robot.move_to_object(self.workspace_name, 0.1, ObjectShape.ANY, ObjectColor.GREEN)) # Going back to observation pose - self.assertIsNone(self.niryo_robot.move_joints(0.0, 0.0, 0.0, 0.0, -1.57, 0.0)) + self.assertIsNone(self.niryo_robot.move_joints( + 0.0, 0.0, 0.0, 0.0, -1.57, 0.0)) # Vision Pick self.assertIsNotNone(self.niryo_robot.vision_pick(self.workspace_name, 0.1, ObjectShape.ANY, ObjectColor.BLUE)) @@ -451,10 +714,12 @@ def test_creation_delete_workspace(self): self.assertIsNone(self.niryo_robot.save_workspace_from_robot_poses(new_name, *self.robot_poses)) else: - self.assertIsNone(self.niryo_robot.save_workspace_from_points(new_name, *self.points)) + self.assertIsNone( + self.niryo_robot.save_workspace_from_points(new_name, *self.points)) # Checking ratio - self.assertAlmostEquals(self.niryo_robot.get_workspace_ratio(new_name), 1.0, places=2) + self.assertAlmostEquals( + self.niryo_robot.get_workspace_ratio(new_name), 1.0, places=2) if new_name not in new_list: new_list.append(new_name) @@ -521,27 +786,37 @@ def test_ledring(self): def check_delay(function, **kwargs): start_time = time.time() self.assertIsNotNone(function(**kwargs)) - self.assertGreaterEqual(time.time(), start_time + kwargs['period'] * kwargs['iterations']) + self.assertGreaterEqual( + time.time(), start_time + kwargs['period'] * kwargs['iterations']) self.assertIsNotNone(self.niryo_robot.set_led_color(1, [0, 255, 255])) self.assertIsNotNone(self.niryo_robot.led_ring_solid([255, 0, 255])) self.assertIsNotNone( self.niryo_robot.led_ring_custom(led_colors=[[i / 30. * 255, 0, 255 - i / 30.] for i in range(30)])) - check_delay(self.niryo_robot.led_ring_flashing, color=[255, 255, 0], period=0.5, iterations=5, wait=True) + check_delay(self.niryo_robot.led_ring_flashing, color=[ + 255, 255, 0], period=0.5, iterations=5, wait=True) check_delay(self.niryo_robot.led_ring_alternate, color_list=[[0, 255, 255], [255, 0, 255]], period=0.5, iterations=4, wait=True) - check_delay(self.niryo_robot.led_ring_chase, color=[255, 255, 0], period=1, iterations=2, wait=True) - check_delay(self.niryo_robot.led_ring_go_up, color=[0, 255, 255], period=0.5, iterations=4, wait=True) - check_delay(self.niryo_robot.led_ring_go_up_down, color=[255, 0, 255], period=0.5, iterations=4, wait=True) - check_delay(self.niryo_robot.led_ring_breath, color=[255, 255, 0], period=2, iterations=2, wait=True) - check_delay(self.niryo_robot.led_ring_snake, color=[0, 255, 255], period=0.5, iterations=4, wait=True) - - check_delay(self.niryo_robot.led_ring_rainbow, period=3, iterations=2, wait=True) - check_delay(self.niryo_robot.led_ring_rainbow_cycle, period=3, iterations=2, wait=True) - check_delay(self.niryo_robot.led_ring_rainbow_chase, period=5, iterations=1, wait=True) + check_delay(self.niryo_robot.led_ring_chase, color=[ + 255, 255, 0], period=1, iterations=2, wait=True) + check_delay(self.niryo_robot.led_ring_go_up, color=[ + 0, 255, 255], period=0.5, iterations=4, wait=True) + check_delay(self.niryo_robot.led_ring_go_up_down, color=[ + 255, 0, 255], period=0.5, iterations=4, wait=True) + check_delay(self.niryo_robot.led_ring_breath, color=[ + 255, 255, 0], period=2, iterations=2, wait=True) + check_delay(self.niryo_robot.led_ring_snake, color=[ + 0, 255, 255], period=0.5, iterations=4, wait=True) + + check_delay(self.niryo_robot.led_ring_rainbow, + period=3, iterations=2, wait=True) + check_delay(self.niryo_robot.led_ring_rainbow_cycle, + period=3, iterations=2, wait=True) + check_delay(self.niryo_robot.led_ring_rainbow_chase, + period=5, iterations=1, wait=True) self.assertIsNotNone(self.niryo_robot.led_ring_turn_off())