Reachy’s software is composed of three main parts:
a HAL (Hardware Abstraction Layer) handling the communication with some of Reachy’s sensors i.e. the Dynamixel motors in the arms, fans, force sensors and Orbita actuator,
ROS packages: this is the core of the software. We are using ROS (Robotics Operating System), more precisely the ROS2 Foxy distribution, to interact with the HAL, to compute the kinematics for Reachy’s arms and Orbita, to get the camera feed and to manage the autofocus on Reachy’s motorised zooms.
A ROS package is also used, along with gRPC, to create a server interacting with the different ROS nodes and services made for Reachy and allowing remote control on the robot without being physically connected to it.
gRPC client: the strength of using the gRPC framework is that we can have a remote control to the robot and create clients in any programming language (Python, C++, C#, …). So knowing how to use ROS is not needed to work with Reachy.
The packages developed for Reachy 2021 are divided into two categories: the ROS packages and non-ROS packages.
(installed in ~/reachy_ws folder of Reachy’s computer)
- reachy_description: publishes the robot’s URDF, needed by the kinematics package and by the different ROS simulation tools (rviz, gazebo, …)
- reachy_kinematics: computes the forward / inverse kinematics of Reachy’s arms and the inverse kinematics of Orbita
- reachy_controllers: communicates with the HAL, the cameras and the zooms
- reachy_sdk_server: creates two gRPC servers, camera_server to get the camera’s images and control the motorised zooms and reachy_sdk_server for the joints, load sensors, fans et Orbita
- reachy_msgs:: custom ROS messages for the different ROS services and topics
- reachy_focus: communicates with zoom_kurokesu to perform autofocus
(installed in ~/dev folder of Reachy’s computer)
- reachy_sdk_api: services and messages for the gRPC servers
- reachy_sdk: SDK Python to control Reachy to develop applications
- zoom_kurokesu: Python library to control Reachy’s motorized zooms
- reachy_pyluos_hal: HAL as described in the first section
As explained, the gRPC clients permits to communicate with the gRPC server without being physically connected on the robot. The gRPC clients can be installed on another machine and have few requisites, there is no need for the machine to have ROS installed on it.
gRPC clients can be in different programming languages. Currently, two different clients have been developed:
- reachy_sdk: as described above, SDK Python to control Reachy. This is the library that we use when we want to develop an app on Reachy or test a new robot
- reachy_unity: SDK C#. The teleoperation application has been developed using it.
💡 To learn more on the packages content and usage, please refer to README.md files of each directory.
The diagram below sums up what has been described in this page.