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 and Orbita
- reachy_msgs:: custom ROS messages for the different ROS services and topics
- reachy_focus: communicates with zoom_kurokesu to perform autofocus
[MOBILE BASE] - The following packages are only needed if you have a Reachy with mobile base
💡 Zuuu is the internal name of the mobile base. It’s a french onomatopoeia that evokes swift mouvements :)
(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
[MOBILE BASE] - The following package is only needed if you have a Reachy with mobile base
- mobile_base_sdk: SDK Python to control Reachy’s mobile base without necessarily having a Reachy robot connected. Controling the mobile base using reachy_sdk actually uses the mobile_base_sdk but hides it.
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,
- mobile_base_sdk: SDK Python to control Reachy’s mobile base without having Reachy’s main code running. It is convenient to have it aside from reachy_sdk because sometimes you just want to work on the mobile base alone and with this, you don’t have to worry about whether or not Reachy’s motors are on or if Reachy’s main service is running.
💡 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.