ROS2 SDK Server

Hello everyone :slight_smile:

I am currently working on Reachy with the ROS2 driver. Here is what i get when running the ros2 service list command:

/camera_focus/describe_parameters
/camera_focus/get_parameter_types
/camera_focus/get_parameters
/camera_focus/list_parameters
/camera_focus/set_parameters
/camera_focus/set_parameters_atomically
/camera_publisher/describe_parameters
/camera_publisher/get_parameter_types
/camera_publisher/get_parameters
/camera_publisher/list_parameters
/camera_publisher/set_parameters
/camera_publisher/set_parameters_atomically
/camera_server/describe_parameters
/camera_server/get_parameter_types
/camera_server/get_parameters
/camera_server/list_parameters
/camera_server/set_parameters
/camera_server/set_parameters_atomically
/camera_zoom_controller_service/describe_parameters
/camera_zoom_controller_service/get_parameter_types
/camera_zoom_controller_service/get_parameters
/camera_zoom_controller_service/list_parameters
/camera_zoom_controller_service/set_parameters
/camera_zoom_controller_service/set_parameters_atomically
/get_camera_zoom_focus
/get_camera_zoom_level
/get_camera_zoom_speed
/get_joint_full_state
/joint_state_controller/describe_parameters
/joint_state_controller/get_parameter_types
/joint_state_controller/get_parameters
/joint_state_controller/list_parameters
/joint_state_controller/set_parameters
/joint_state_controller/set_parameters_atomically
/orbita/kinematics/inverse
/orbita/kinematics/look_vector_to_quaternion
/orbita_kinematics_service/describe_parameters
/orbita_kinematics_service/get_parameter_types
/orbita_kinematics_service/get_parameters
/orbita_kinematics_service/list_parameters
/orbita_kinematics_service/set_parameters
/orbita_kinematics_service/set_parameters_atomically
/robot_state_publisher/describe_parameters
/robot_state_publisher/get_parameter_types
/robot_state_publisher/get_parameters
/robot_state_publisher/list_parameters
/robot_state_publisher/set_parameters
/robot_state_publisher/set_parameters_atomically
/set_camera_zoom_focus
/set_camera_zoom_level
/set_camera_zoom_speed
/set_fan_state
/set_focus_state
/set_joint_compliancy
/set_joint_pid

Some services mentioned in https://github.com/pollen-robotics/reachy_sdk_server are not present in the above list. For example, I don’t see the service called StreamFullBodyCartesianCommands (which could be really useful for my application).
I am thus wondering if it is normal or not ? The reachy_sdk_server folder is located in my reachy_ws/src folder and I pulled recently the github repo to be sure to be up to date.
If I am not mistaken, all the services, nodes and topics are initialized when turning on the computer. Or should we call a specific command to make available the so called GRPC services handled ?

The Reachy I am working with is originally a 2019 version, but the software was updated by pollen robotics recently while the hardware still mainly corresponds to a 2019 version. Could this be the reason explaining why some of these services are not available ?

Thank you in advance,
Romain.

Hi Romain,

That’s normal, StreamFullBodyCartesianCommands is a grpc service that we use for the Python and C# SDK and not a ROS service. The list of service showed in the readme of reachy_sdk_server is a list of grpc services.

What would you want to do with your application? Maybe we can help you!

Hi Simon and thank you for your answer, I understand better now !

So if we want to have a ROS high level service similar to the StreamFullBodyCartesianCommands grpc service that, sets the joints to the requested positions given targets in cartesian coordinate system, we need to implement it by ourselves by calling one by one the appropriate and provided Reachy ROS2 driver services, topics etc ?

Moving the head given a x, y, z cartesian coordinate would then requires for example to call the service look_vector_to_quaternion, then use the outputed quaternion to call the head inverse kinematics service to get the corresponding neck disk positions, then call the set_joint_compliancy service to set each disk non compliant and finally publish to the topic joint_goals the neck disk positions obtained with the head inverse kinematic service. Am I right ?

Regards,
Romain.

Or maybe an even simpler way would be to create a service running reachy sdk python code directly. Would it be possible to connect to reachy inside a service callback using the ReachySDK class ?

Regards,
Romain.

Hi Romain,

To answer your questions one by one.

Yes.

Yes exactly. That is actually what the look_at method from ReachySDK is doing.

I don’t know if it’s possible but I wouldn’t recommend doing that. ReachySDK is on top of all the ROS stuff so using it at the same level as ROS would probably cause issues.

Maybe the thread System Architecture Overview could give you a better understanding of how Reachy’s software is organised !

1 Like

Got it, thank you for your help :slight_smile:

Romain.