Skip to main content

Gento (Skye/Luna) ROS 2 Interfaces

This chapter is for customers who need to read Gento state, collect teleoperation data, or connect their own algorithms through Custom mode.

ItemDescription
ProductsGento Skye and Gento Luna
Reference softwareGento Apex 1.0.6.81g
Reference environmentUbuntu 22.04 and ROS 2 Humble

Available interfaces depend on the delivered release, end-effector configuration, and running modules. Always verify the target system with ros2 topic list -t, ros2 service list -t, and ros2 interface show.

1. Load the ROS 2 environment​

Use the unified environment file when available:

source /etc/apex/apex_ros_env.sh
ros2 topic list -t | sort
ros2 service list -t | sort

If the unified environment file is unavailable:

source /opt/ros/humble/setup.bash
source /opt/kernelmind/apex/install/setup.bash
ros2 topic list -t | sort

Save an interface inventory:

mkdir -p ~/gento_ros_check
ros2 topic list -t | sort | tee ~/gento_ros_check/topic_list.txt
ros2 node list | sort | tee ~/gento_ros_check/node_list.txt
ros2 service list -t | sort | tee ~/gento_ros_check/service_list.txt

If a topic is missing, first verify that the required Robot, Teleop, Camera, or Tool module is running and that ROS_DOMAIN_ID matches.

2. Skye and Luna joint differences​

ItemSkyeLuna
robot_typeGento_SkyeGento_Luna
Left arm7 joints7 joints
Right arm7 joints7 joints
BODYLIFT 1 + BODY 2BODY 6
HEAD2 joints2 joints

Identify the model first:

ros2 topic echo /info/robot_info --once

The BODY topic names are shared, but their arrays differ:

  • Skye: positions[0] is LIFT and positions[1:3] are the two BODY joints. Remaining values are unused for this model.
  • Luna: positions[0:6] are the six BODY joints.
  • JointcmdHead.positions has a fixed length of 3, while both current models use the first two values.

Customer software must identify the model from /info/robot_info. Do not reuse a BODY array between Skye and Luna.

3. Robot state topics​

After Robot starts:

TopicTypeDescription
/joint_statessensor_msgs/msg/JointStateStandard whole-robot joint names, positions, velocities, and efforts
/info/joint_feedbackmarvin_msgs/msg/JointfeedbackReal-time Gento whole-robot joint feedback
/info/robot_statestd_msgs/msg/Int16MultiArrayCurrent ARM, HEAD, BODY, and LIFT states
/info/robot_cmd_statestd_msgs/msg/Int16MultiArrayTarget state of each component
/info/robot_infomarvin_msgs/msg/RobotInfoRobot model and controller version
/info/imu0sensor_msgs/msg/ImuIMU 0 data
/info/imu1sensor_msgs/msg/ImuIMU 1 data
ros2 topic echo /info/robot_info --once
ros2 topic echo /info/robot_state --once
ros2 topic echo /info/joint_feedback --once
ros2 topic echo /joint_states --once

In Jointfeedback, the 14 arm entries are ordered as left seven followed by right seven. Interpret BODY values according to the model rules above.

4. Headset and teleoperation topics​

After Teleop starts:

TopicTypeDescription
/control/target_poseLgeometry_msgs/msg/PoseStampedLeft-arm target mapped from the left controller
/control/target_poseRgeometry_msgs/msg/PoseStampedRight-arm target mapped from the right controller
/control/enableLstd_msgs/msg/BoolLeft-arm teleoperation enable
/control/enableRstd_msgs/msg/BoolRight-arm teleoperation enable
/control/vr_joy_Lsensor_msgs/msg/JoyLeft-controller buttons and joystick
/control/vr_joy_Rsensor_msgs/msg/JoyRight-controller buttons and joystick
/control/vr_bodymarvin_msgs/msg/VrBodyTorso, head, elbow, leg, and other full-body tracking data
/info/vr_connectedstd_msgs/msg/BoolHeadset connection state
/info/eef_leftgeometry_msgs/msg/PoseStampedCurrent left end-effector pose
/info/eef_rightgeometry_msgs/msg/PoseStampedCurrent right end-effector pose
/info/collision_statusAstd_msgs/msg/BoolLeft collision state
/info/collision_statusBstd_msgs/msg/BoolRight collision state

VrBody contains left/right elbow, torso, head, pelvis, left/right foot, and left/right knee poses with matching available flags. A pose must not be treated as valid when its flag is false.

ros2 topic echo /info/vr_connected --once
ros2 topic echo /control/target_poseL --once
ros2 topic echo /control/target_poseR --once
ros2 topic echo /control/vr_body --once
ros2 topic echo /info/eef_left --once
ros2 topic echo /info/eef_right --once

Current Skye releases may not use the TCP connection state as the teleoperation gate. Do not diagnose Skye from /info/vr_connected alone; also verify target-pose and enable updates.

5. Custom whole-body command interfaces​

Customer algorithms publish to the user topics:

TopicTypeDescription
/control/user/joint_cmd_Amarvin_msgs/msg/JointcmdArmSeven left-arm joint targets in radians
/control/user/joint_cmd_Bmarvin_msgs/msg/JointcmdArmSeven right-arm joint targets in radians
/control/user/joint_cmd_bodymarvin_msgs/msg/JointcmdBodySkye LIFT+BODY or Luna BODY targets
/control/user/joint_cmd_headmarvin_msgs/msg/JointcmdHeadHEAD targets; current models use the first two values

Message layouts:

JointcmdArm:  std_msgs/Header header + float64[7] positions
JointcmdBody: std_msgs/Header header + float64[6] positions
JointcmdHead: std_msgs/Header header + float64[3] positions

Verify the installed definitions:

ros2 interface show marvin_msgs/msg/JointcmdArm
ros2 interface show marvin_msgs/msg/JointcmdBody
ros2 interface show marvin_msgs/msg/JointcmdHead

5.1 Enable sequence​

  1. Clear the robot workspace and keep the emergency stop within reach.
  2. Start Robot in Apex Teleop and set the robot Ready.
  3. Select Impedance Mode and execute Home.
  4. Set Input Mode to Custom, or call:
ros2 service call /control/set_input \
marvin_msgs/srv/Int "{data: 3}"
  1. Continuously publish complete left-arm, right-arm, BODY, and HEAD targets for the identified model.
  2. Switch back to None before stopping:
ros2 service call /control/set_input \
marvin_msgs/srv/Int "{data: 0}"

The system performs a smooth transition when the source changes. Output may remain inactive until initial feedback is available and all required targets have valid timestamps.

5.2 Safety constraints​

  • Start with small, slow, continuous targets and avoid steps.
  • Use current timestamps; stale commands may be rejected.
  • Respect position, velocity, and mechanical limits.
  • Do not publish directly to final /control/joint_cmd_A/B/body/head topics.
  • Do not call internal native mux selectors; customers should use /control/set_input.
  • If the customer process exits unexpectedly, immediately switch to None or trigger a safe stop.

6. Customer-facing services​

ServiceTypeDescription
/control/set_readystd_srvs/srv/TriggerAllows real-time robot commands
/control/set_modemarvin_msgs/srv/IntChanges whole-robot control mode
/control/go_homestd_srvs/srv/TriggerMoves to the model-specific Home pose
/control/clear_faultstd_srvs/srv/TriggerClears controller faults
/control/set_inputmarvin_msgs/srv/IntSelects None, Teleop, Planner, Custom, or Replay
ros2 service call /control/clear_fault std_srvs/srv/Trigger "{}"
ros2 service call /control/set_ready std_srvs/srv/Trigger "{}"
ros2 service call /control/set_mode marvin_msgs/srv/Int "{data: 3}"
ros2 service call /control/go_home std_srvs/srv/Trigger "{}"

set_mode manages ARM, HEAD, BODY, and LIFT according to the Skye or Luna configuration. Prefer Apex Teleop for Ready, mode, and Home operations during normal use.

7. End effectors​

End-effector topics appear only when the matching hardware and driver are configured.

DM / ZY gripper​

TopicTypeDescription
/control/gripperValueLstd_msgs/msg/Float32Left gripper target
/control/gripperValueRstd_msgs/msg/Float32Right gripper target
/info/gripper_feedback_Lstd_msgs/msg/Float32MultiArrayLeft gripper feedback
/info/gripper_feedback_Rstd_msgs/msg/Float32MultiArrayRight gripper feedback

Wuji dexterous hand​

TopicTypeDescription
/hand_left/joint_commandssensor_msgs/msg/JointStateLeft-hand joint target
/hand_right/joint_commandssensor_msgs/msg/JointStateRight-hand joint target
/hand_left/joint_statesVerify on targetLeft-hand joint feedback
/hand_right/joint_statesVerify on targetRight-hand joint feedback
ros2 topic list -t | grep -E "gripper|hand"

8. Camera topic​

Gento video is normally carried over H264/WebRTC. Individual cameras do not need to publish raw ROS image topics.

TopicTypeDescription
/quad_tile/compressedsensor_msgs/msg/CompressedImageOptional multi-camera tiled JPEG image

This topic depends on the camera module version and compressed-image publication setting. WebRTC may still work when it is absent.

ros2 topic list -t | grep -Ei "camera|image|compressed|quad|usb_cam"
CategoryRecommended topics
Whole-robot joint feedback/joint_states, /info/joint_feedback
Robot state/info/robot_state, /info/robot_cmd_state, /info/robot_info
End-effector pose/info/eef_left, /info/eef_right
Headset targets and enable/control/target_poseL/R, /control/enableL/R, /control/vr_body
Customer command input/control/user/joint_cmd_A/B/body/head
Gripper or dexterous handSelect according to the installed end effector
Video/quad_tile/compressed only when enabled on the target

Before recording, use ros2 topic info -v, ros2 topic echo --once, and ros2 topic hz to verify that each topic exists and carries valid data.

10. Minimum diagnostic set​

source /etc/apex/apex_ros_env.sh
echo "ROS_DOMAIN_ID=${ROS_DOMAIN_ID}"
ros2 topic echo /info/robot_info --once
ros2 topic echo /info/robot_state --once
ros2 topic echo /info/joint_feedback --once
ros2 topic echo /info/vr_connected --once
ros2 topic info /control/target_poseL -v
ros2 topic info /control/user/joint_cmd_A -v
ros2 topic echo /control/input_mode --once
SymptomCheck first
No /info/robot_infoRobot is not running, or the ROS environment/domain differs
RobotInfo exists but no joint feedbackRobot-controller communication
No headset target updatesTeleop, headset connection, network, and enable state
Custom topics have publishers but no motionReady, Impedance Mode, Home, Input Mode, timestamps, and complete targets
Arms work but BODY does notModel identification, BODY ordering, and component state
Gripper target exists but no motionTool, driver, power, and hardware connection
No compressed image topicVerify whether ROS compressed publication is enabled; WebRTC may still work

Trace state feedback, customer input, active Input Mode, and robot motion in sequence. The existence of one topic alone does not prove that the entire chain is healthy.