Skip to main content

Installation and Configuration

System Requirements

ComponentRecommendedSupport Range
Operating SystemUbuntu 22.04Ubuntu 20.04 - 24.04
Architecture (PC)x86_64x86_64
Architecture (Robot)aarch64aarch64
Python3.8+3.8 - 3.14
Storage Space16GB3GB+

Mode 1: Robot-Side Deployment

Use Case: Production environment deployment, applications requiring high real-time performance

Features: No network latency, minimal communication overhead

1. Connect to Robot Network

1.1 After powering on, connect to WiFi in the network selection interface

WIFI

WIFI connect

1.2 Check the robot's IP address in the Network interface

WIFI connect

2. Deploy SDK to Robot

2.1 Execute the deployment script on PC

cd GalbotSDK
./deploy_to_robot.sh

2.2 Enter connection information as prompted

  • Username: galbot
  • Orin IP address: e.g., 192.168.120.180
  • Password: gb@2023

Deployment Process

Deployment Result

Dynamic library automatically installed to: /data/galbot/lib

2.3 Verify installation

ssh galbot@<Robot IP>
ls /data/galbot/lib | grep galbot_sdk
Expected Output

Displays libgalbot_sdk.so and libgalbot_sdk.so.1.7.0

ifconfig output

3. Install SDK on PC

Navigate to the SDK directory and execute the installation script

cd GalbotSDK
sudo ./install.sh

4. Compile Programs

4.1 Cross-compile on PC (aarch64)

cd examples/cpp/
mkdir -p build
cd build
cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/linux-aarch64-gcc940.cmake
make

4.2 Transfer the executable file to the robot's Orin

scp your_app galbot@<Robot IP>:/userdata

5. Run Programs

5.1 C++ Programs

ssh galbot@<Robot IP>
cd /userdata
./your_app

5.2 Python Programs

export PYTHONPATH=/data/galbot/lib:$PYTHONPATH
python your_app.py
Persist Environment Variables
echo 'export PYTHONPATH=/data/galbot/lib:$PYTHONPATH' >> ~/.bashrc
source ~/.bashrc

Mode 2: PC-Side Deployment

Use Case: Development and debugging, rapid iteration

Features: Convenient development, supports LAN remote control

1. Physical Connection

Connect PC and robot using an Ethernet cable

Connection Diagram

2. Network Configuration

2.1 Configure PC Network Interface IP

  • IP Address: 192.168.1.99 (or other address in the same subnet)
  • Subnet Mask: 255.255.255.0
2.1.1 Ubuntu

Settings path: Settings → Network → Wired Settings → IPv4 → Manual

IP Configuration

2.1.2 WSL2

When using WSL2, create a .wslconfig file in the current Windows user profile directory and add networkingMode=Mirrored, for example:

WSL config file path

WSL config file content

Configure the IP address in Windows:

IP Configuration

Verify configuration:

ifconfig
Expected Output

Displays inet 192.168.1.99

ifconfig output

2.2 Configure PC IP Configuration File

File path: /data/config/embosa_ip_config.json

Configuration example (assuming PC: 192.168.1.99, XCU: 192.168.1.66, Orin: 192.168.1.88):

{
"embosa_ip": {
"local_interface": [
"192.168.1.99"
],
"peer_lists": [
"192.168.1.66",
"192.168.1.88"
]
}
}

2.3 Configure Orin IP Configuration File

Prerequisites

You must first connect to Orin via WiFi, refer to Mode 1 Step 1

2.3.1 Login to Orin

ssh galbot@<Orin Wireless IP>
# Password: gb@2023

2.3.2 Edit configuration file

vi /data/config/embosa_ip_config.json

2.3.3 Configuration content

Important

192.168.100.88 and 192.168.100.66 are internal direct connection IPs between Orin and XCU, must be retained

{
"embosa_ip": {
"local_interface": [
"192.168.100.88",
"192.168.1.88"
],
"peer_lists": [
"192.168.100.66",
"192.168.1.99"
]
}
}

2.4 Configure XCU IP Configuration File

2.4.1 Login to XCU

ssh root@<XCU Wireless IP>
# Password: 12345678

2.4.2 Edit configuration file

vi /data/config/embosa_ip_config.json

2.4.3 Configuration content

{
"embosa_ip": {
"local_interface": [
"192.168.100.66",
"192.168.1.66"
],
"peer_lists": [
"192.168.100.88",
"192.168.1.99"
]
}
}

2.5 Verify Network Connection

Required Action

You must restart the robot after modifying the configuration

Test connection after restart:

ping 192.168.1.66  # Test XCU
ping 192.168.1.88 # Test Orin
Expected Result

Normal ping response returned

ping result

3. Install SDK on PC

Navigate to the SDK directory and execute the installation script

cd GalbotSDK
sudo ./install.sh

4. Compile Programs

Compile on PC (x86_64)

cd examples/cpp/
mkdir -p build
cd build
cmake ../ -DCMAKE_TOOLCHAIN_FILE=../cmake/linux-x86_64-gcc940.cmake
make

5. Run Programs

5.1 Configure environment variables

Path Description

/opt/galbot/ is the default installation path, can be modified according to your installation path

source /opt/galbot/galbot_sdk/linux-x86_64-gcc940/setup.sh
Persist Environment Variables
echo 'source /opt/galbot/galbot_sdk/linux-x86_64-gcc940/setup.sh' >> ~/.bashrc
source ~/.bashrc

5.2 Run C++ Programs

cd /userdata  # or the directory where your program is located
./your_app

5.3 Run Python Programs

python your_app.py
Python Dependency Installation

Some Python examples depend on additional libraries. Before running the Python examples, please execute the following script to ensure all required dependencies are installed:

cd GalbotSDK
./install_python_deps.sh

Terminology

After completing the configuration, you can start exploring the robot's examples and APIs. Before using the SDK, if you are not familiar with robotics terminology, refer to the following sections.

1. Robot Hardware

Physical components and hardware concepts of the robot.

TermDescription
XCUX Computing Unit. The base computing unit of the robot ("cerebellum"), responsible for low-level motor control, motion control, and other real-time tasks
HPU / OrinHigh-Performance Unit / NVIDIA Jetson Orin. The high-performance computing unit ("brain"), responsible for image processing, AI inference, motion planning, and other compute-intensive tasks
BaseThe robot's chassis, containing mobile wheels and power system
TorsoThe main body of the robot, connecting the head, arms, and base
HeadThe robot's head
ArmThe robot's arm, composed of multiple links and joints, e.g., left_arm, right_arm
LegThe robot's leg structure, used for supporting vertical body movement and waist rotation
JointThe movable part connecting two links, driven by a motor
LinkThe rigid component connecting two joints
Joint GroupA collection of related joints, e.g., left_arm contains all joints of the left arm, used for coordinated control
End-EffectorThe tool at the end of the robotic arm, such as a Gripper or Suction Cup
DOFDegrees of Freedom. Describes the number of independently movable directions of a joint. For example, an arm has 7-DOF
TCPTool Center Point. The working point of the end-effector tool, such as the center of a gripper, used for precise control of the operating position
SensorDevices for perceiving the environment, including cameras, LiDAR, IMU, force sensors, etc.
RGB CameraColor camera that captures visible light images
Depth CameraCamera that outputs depth maps (distance per pixel), used for 3D perception
LiDARLight Detection and Ranging. Generates point cloud maps of the surrounding environment through laser ranging
IMUInertial Measurement Unit. Contains accelerometers and gyroscopes, measuring the robot's acceleration, angular velocity, and orientation
Point CloudA collection of numerous points in 3D space, each with (x, y, z) coordinates, generated by LiDAR or depth cameras

2. Robotics Fundamentals

Core theoretical concepts describing robot motion and spatial relationships.

TermDescription
FrameReference Frame. A coordinate system used to describe position and orientation. Think of it as a "ruler" fixed at a specific location in space
World FrameThe globally fixed coordinate system, typically based on the map origin or initial position
Base FrameA coordinate system fixed to the robot's base, moving as the robot moves
End-Effector FrameA coordinate system fixed to the end of the robotic arm, moving with the arm
Joint SpaceThe space defined by the angles of each joint. This is the robot's "native" control method
Cartesian SpaceThe 3D space described using (x, y, z) coordinates. A more intuitive way for humans to understand
PosePosition + Orientation. A complete description of "where" something is + "which way" it faces
PositionThe coordinates (x, y, z) of an object in 3D space, typically in meters (m)
OrientationThe rotational state of an object, describing which direction it faces
QuaternionRepresents rotation using 4 numbers (qx, qy, qz, qw). Avoids gimbal lock issues, suitable for computer processing
Euler AnglesRepresents rotation using three angles (roll, pitch, yaw). More intuitive for human understanding
FKForward Kinematics. Given joint angles, calculate the end-effector pose ("where is the hand?") — has a unique solution
IKInverse Kinematics. Given a target pose, calculate the required joint angles ("how should joints rotate to reach there?") — may have multiple solutions or no solution
TrajectoryThe complete motion path of the robot from start to end, including position, velocity, and acceleration at each moment
WaypointA key node in a trajectory. The robot passes through these points in sequence, similar to "via points" in navigation
InterpolationCalculating smooth transitions between waypoints to generate continuous motion trajectories
SLAMSimultaneous Localization and Mapping. The robot builds a map while moving and simultaneously determines its position within the map
Self-CollisionCollision between different parts of the robot, e.g., the left hand hitting the right hand
Environment CollisionCollision between the robot and surrounding obstacles

3. Control and Interface

Common parameters and concepts used in the SDK.

TermDescription
SDKSoftware Development Kit. A software development toolkit containing libraries, tools, and documentation
APIApplication Programming Interface. Defines the rules for interaction between programs
SSHSecure Shell. A remote login protocol for connecting from a PC to the robot
Cross CompilationCompiling programs on a PC (x86) that can run on the robot (ARM)
SingletonA design pattern ensuring only one robot instance exists globally, obtained via get_instance()
Blockingis_blocking=True. The function call waits for the operation to complete before returning. For example: navigate_to_goal(..., is_blocking=True) waits for navigation to finish, during which no other operations can be performed
Non-blockingis_blocking=False. The function call returns immediately without waiting. For example: navigate_to_goal(..., is_blocking=False) returns immediately, and you can query status via functions like is_localized()
base_posebase_pose: [x, y, yaw]. The robot base pose, containing (x, y) position (meters) and yaw yaw angle (radians)
frame_idTarget coordinate frame ID. Possible values: "base_link" (robot base), "odom" (odometry), "map" (map)
reference_frame_idReference coordinate frame ID, specifying which coordinate system a pose belongs to
goal_posegoal_pose: [x, y, z, qx, qy, qz, qw]. Target pose, containing position (x, y, z) (meters) and quaternion (qx, qy, qz, qw) for orientation
start_poseStarting pose, same format as goal_pose
init_poseInitial pose estimate, used for relocalization
reference_frameRelative coordinate frame name, e.g., "base_link", "world", or a kinematic chain name
target_frameTarget coordinate frame, used for coordinate transformations
base_linkThe robot base coordinate frame. All arms, head, and other components reference this frame
odomOdometry coordinate frame. Relative pose estimate based on wheel encoders
mapMap coordinate frame. The globally consistent coordinate frame established by SLAM
joint_groupsA list of joint group names, e.g., ["left_arm", "right_arm", "chassis"]
joint_namesA list of specific joint names. Takes priority over joint_groups, e.g., ["left_arm_j1", "left_arm_j2"]
joint_positionsAn array of joint positions (radians), in the same order as returned by get_joint_names()
waypointsA list of trajectory waypoints, each containing a target position and arrival time
time_from_start_sTime from the trajectory start to this waypoint (seconds), used to control motion pacing
timeout_sTimeout duration (seconds). The maximum time to wait for an operation to complete in blocking mode
timestamp_nsNanosecond-level timestamp, used for data synchronization
safe_marginCollision detection safety distance (meters). For example, 0.1 means maintaining 10cm from obstacles
enable_collision_checkWhether to enable collision detection. True means enabled
obstacle_idUnique identifier for an obstacle, used when adding/removing obstacles
ignore_collision_link_namesA list of link names to ignore during collision detection
posePose data, an array of length 7: [x, y, z, qx, qy, qz, qw]
reference_base_poseThe robot base pose in the map coordinate frame
linear_velocitylinear_velocity: [vx, vy, vz]. Linear velocity array (m/s). vx is forward velocity, vy is lateral velocity, vz is vertical velocity
angular_velocityangular_velocity: [wx, wy, wz]. Angular velocity array (rad/s). wz is yaw angular velocity
status_stringStatus description string, e.g., "SUCCESS", "FAIL", "TIMEOUT", "MOVING"
is_localizedis_localized(). A navigation status check function. Returns True if the robot is localized in the map
get_frame_names()get_frame_names(). Returns a list of all available coordinate frame names
quaternion[qx, qy, qz, qw]. Represents rotation as a quaternion. A unit quaternion satisfies sqrt(qx²+qy²+qz²+qw²) = 1
euler[roll, pitch, yaw]. Represents rotation as Euler angles, in radians, in roll-pitch-yaw order