PyNiryo API Documentation
=====================================

This file presents the different :ref:`source/api_doc/api:Command Functions`,
:ref:`source/api_doc/api:Enums` & :ref:`source/api_doc/api:Python Object classes` available with the API.

* :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`
* :ref:`source/api_doc/api:Enums` are used to pass specific arguments to functions. For instance
  :class:`~.api.enums_communication.PinState`,
  :class:`~.api.enums_communication.ConveyorDirection`, ...
* :ref:`source/api_doc/api:Python Object classes`, as |pose_object|, ease some operations

Command functions
------------------------------------

This section references all existing functions to control your robot, which includes:

- Moving the robot
- Using Vision
- Controlling Conveyor Belts
- Playing with Hardware

All functions to control the robot are accessible via an instance of
the class :class:`~.api.enums_communication.NiryoRobot` ::

    robot = NiryoRobot(<robot_ip_address>)

See examples on :ref:`source/examples/examples_basics:Examples: Basics`

List of functions subsections:

.. contents::
   :local:
   :depth: 1

.. py:currentmodule:: api.tcp_client

TCP Connection
^^^^^^^^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.connect
.. automethod:: api.tcp_client.NiryoRobot.close_connection

Main purpose functions
^^^^^^^^^^^^^^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.calibrate
.. automethod:: api.tcp_client.NiryoRobot.calibrate_auto
.. automethod:: api.tcp_client.NiryoRobot.need_calibration
.. automethod:: api.tcp_client.NiryoRobot.get_learning_mode
.. automethod:: api.tcp_client.NiryoRobot.set_learning_mode
.. automethod:: api.tcp_client.NiryoRobot.set_arm_max_velocity
.. automethod:: api.tcp_client.NiryoRobot.set_jog_control
.. automethod:: api.tcp_client.NiryoRobot.wait

Joints & Pose
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.get_joints
.. automethod:: api.tcp_client.NiryoRobot.get_pose
.. automethod:: api.tcp_client.NiryoRobot.get_pose_quat
.. automethod:: api.tcp_client.NiryoRobot.move_joints
.. automethod:: api.tcp_client.NiryoRobot.move_pose
.. automethod:: api.tcp_client.NiryoRobot.move_linear_pose
.. automethod:: api.tcp_client.NiryoRobot.shift_pose
.. automethod:: api.tcp_client.NiryoRobot.shift_linear_pose
.. automethod:: api.tcp_client.NiryoRobot.jog_joints
.. automethod:: api.tcp_client.NiryoRobot.jog_pose
.. automethod:: api.tcp_client.NiryoRobot.move_to_home_pose
.. automethod:: api.tcp_client.NiryoRobot.go_to_sleep
.. automethod:: api.tcp_client.NiryoRobot.forward_kinematics
.. automethod:: api.tcp_client.NiryoRobot.inverse_kinematics

Saved Poses
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.get_pose_saved
.. automethod:: api.tcp_client.NiryoRobot.save_pose
.. automethod:: api.tcp_client.NiryoRobot.delete_pose
.. automethod:: api.tcp_client.NiryoRobot.get_saved_pose_list

Pick & Place
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.pick_from_pose
.. automethod:: api.tcp_client.NiryoRobot.place_from_pose
.. automethod:: api.tcp_client.NiryoRobot.pick_and_place

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.save_trajectory
.. automethod:: api.tcp_client.NiryoRobot.save_last_learned_trajectory
.. automethod:: api.tcp_client.NiryoRobot.delete_trajectory
.. 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
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.get_current_tool_id
.. automethod:: api.tcp_client.NiryoRobot.update_tool
.. automethod:: api.tcp_client.NiryoRobot.grasp_with_tool
.. automethod:: api.tcp_client.NiryoRobot.release_with_tool
.. automethod:: api.tcp_client.NiryoRobot.open_gripper
.. automethod:: api.tcp_client.NiryoRobot.close_gripper
.. automethod:: api.tcp_client.NiryoRobot.pull_air_vacuum_pump
.. automethod:: api.tcp_client.NiryoRobot.push_air_vacuum_pump
.. automethod:: api.tcp_client.NiryoRobot.setup_electromagnet
.. automethod:: api.tcp_client.NiryoRobot.activate_electromagnet
.. automethod:: api.tcp_client.NiryoRobot.deactivate_electromagnet
.. automethod:: api.tcp_client.NiryoRobot.enable_tcp
.. automethod:: api.tcp_client.NiryoRobot.set_tcp
.. automethod:: api.tcp_client.NiryoRobot.reset_tcp
.. automethod:: api.tcp_client.NiryoRobot.tool_reboot

Hardware
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.set_pin_mode
.. automethod:: api.tcp_client.NiryoRobot.digital_write
.. automethod:: api.tcp_client.NiryoRobot.digital_read
.. automethod:: api.tcp_client.NiryoRobot.get_hardware_status
.. automethod:: api.tcp_client.NiryoRobot.get_digital_io_state
.. automethod:: api.tcp_client.NiryoRobot.get_analog_io_state
.. automethod:: api.tcp_client.NiryoRobot.analog_write
.. automethod:: api.tcp_client.NiryoRobot.analog_read
.. automethod:: api.tcp_client.NiryoRobot.get_custom_button_state


Conveyor
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.set_conveyor
.. automethod:: api.tcp_client.NiryoRobot.unset_conveyor
.. automethod:: api.tcp_client.NiryoRobot.run_conveyor
.. automethod:: api.tcp_client.NiryoRobot.stop_conveyor
.. automethod:: api.tcp_client.NiryoRobot.control_conveyor
.. automethod:: api.tcp_client.NiryoRobot.get_connected_conveyors_id

Vision
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.get_img_compressed
.. automethod:: api.tcp_client.NiryoRobot.set_brightness
.. automethod:: api.tcp_client.NiryoRobot.set_contrast
.. automethod:: api.tcp_client.NiryoRobot.set_saturation
.. automethod:: api.tcp_client.NiryoRobot.get_image_parameters
.. automethod:: api.tcp_client.NiryoRobot.get_target_pose_from_rel
.. automethod:: api.tcp_client.NiryoRobot.get_target_pose_from_cam
.. automethod:: api.tcp_client.NiryoRobot.vision_pick
.. automethod:: api.tcp_client.NiryoRobot.move_to_object
.. automethod:: api.tcp_client.NiryoRobot.detect_object
.. automethod:: api.tcp_client.NiryoRobot.get_camera_intrinsics
.. automethod:: api.tcp_client.NiryoRobot.save_workspace_from_robot_poses
.. automethod:: api.tcp_client.NiryoRobot.save_workspace_from_points
.. automethod:: api.tcp_client.NiryoRobot.delete_workspace
.. automethod:: api.tcp_client.NiryoRobot.get_workspace_ratio
.. automethod:: api.tcp_client.NiryoRobot.get_workspace_list

Led Ring
^^^^^^^^^^^^^
.. automethod:: api.tcp_client.NiryoRobot.set_led_color
.. automethod:: api.tcp_client.NiryoRobot.led_ring_solid
.. automethod:: api.tcp_client.NiryoRobot.led_ring_turn_off
.. automethod:: api.tcp_client.NiryoRobot.led_ring_flashing
.. automethod:: api.tcp_client.NiryoRobot.led_ring_alternate
.. automethod:: api.tcp_client.NiryoRobot.led_ring_chase
.. automethod:: api.tcp_client.NiryoRobot.led_ring_wipe
.. automethod:: api.tcp_client.NiryoRobot.led_ring_rainbow
.. automethod:: api.tcp_client.NiryoRobot.led_ring_rainbow_cycle
.. automethod:: api.tcp_client.NiryoRobot.led_ring_rainbow_chase
.. automethod:: api.tcp_client.NiryoRobot.led_ring_go_up
.. automethod:: api.tcp_client.NiryoRobot.led_ring_go_up_down
.. automethod:: api.tcp_client.NiryoRobot.led_ring_breath
.. automethod:: api.tcp_client.NiryoRobot.led_ring_snake
.. automethod:: api.tcp_client.NiryoRobot.led_ring_custom

Sound
^^^^^^^^^^^^^

.. automethod:: api.tcp_client.NiryoRobot.get_sounds
.. automethod:: api.tcp_client.NiryoRobot.play_sound
.. automethod:: api.tcp_client.NiryoRobot.set_volume
.. automethod:: api.tcp_client.NiryoRobot.stop_sound
.. automethod:: api.tcp_client.NiryoRobot.get_sound_duration
.. automethod:: api.tcp_client.NiryoRobot.say


Enums
------------------------------------

Enums are used to pass specific parameters to functions.

For instance, :meth:`~.api.tcp_client.NiryoRobot.shift_pose`
will need a parameter from
:class:`~.api.objects.RobotAxis` enum ::

    robot.shift_pose(RobotAxis.Y, 0.15)

List of enums:

* :class:`~.api.enums_communication.CalibrateMode`
* :class:`~.api.enums_communication.RobotAxis`
* :class:`~.api.enums_communication.ToolID`
* :class:`~.api.enums_communication.PinMode`
* :class:`~.api.enums_communication.PinState`
* :class:`~.api.enums_communication.PinID`
* :class:`~.api.enums_communication.ConveyorID`
* :class:`~.api.enums_communication.ConveyorDirection`
* :class:`~.api.enums_communication.ObjectColor`
* :class:`~.api.enums_communication.ObjectShape`

.. automodule:: api.enums_communication
    :members:
    :undoc-members:
    :exclude-members: Command
    :member-order: bysource
    :noindex:

.. undoc-members -> allow to see members of enums
.. show-inheritance -> display enum.Enum

Python object classes
------------------------------------

Special objects

.. automodule:: api.objects
    :members:
    :no-undoc-members:
    :member-order: bysource

.. |pose_object| replace:: :class:`~.api.objects.PoseObject`