跳转至

R1 Lite Teleop 同构遥操作教程

欢迎使用 R1 Lite Teleop(简称 R1 Lite-T) —— 专为 R1 Lite 打造的同构遥操作平台。
在本教程中,我们将提供详细的说明,一步步陪同您完成开箱,自检和连接等步骤。我们将提供清晰的说明,帮助您快速熟悉新设备并确保一切准备就绪。请跟随步骤操作,确保顺利开启您的机器!

1. 开箱

1.1 开箱前准备

物品 数量 备注
笔记本 1台 配置与启动设备

1.2 物品清单检查

收到产品时请根据以下货品交付清单检查包装盒内的物品是否齐全。

物品 数量
R1 Lite Teleop 1 / 套
电源适配器及接线 1 / 根
Type-C手柄充电线 1 / 根
JoyCon手柄 1 / 对
G夹固定器 2 / 个
HDMI转MINI HDMI线 1 / 根
网线 1 / 根

2 连接R1 Lite Teleop

2.1 固定 R1 Lite Teleop

使用G夹将R1 Lite Teleop(L)和 R1 Lite Teleop(R)固定至桌面,建议左右设备间距在30cm以内,如下图所示。 R1_Lite_Teleop_ros2_fixed

2.2 正确摆放设备

注意:
每次启动R1 Lite Teleop之前,请务必将其姿态调整为初始姿态,否则可能存在使用风险。

1.安装并固定蓝牙手柄
2.请参考下图,正确摆放R1 Lite Teleop的所有连杆位置,妥善放置在定位槽中。 R1_Lite_Teleop_ros2_placement

2.3 连接并启动设备

  1. 连接 R1 Lite Teleop: 将 R1 Lite Teleop(L) 3芯航插连接至 R1 Lite Teleop(R) 左臂端口。
  2. 连接 R1 Lite:用网线连接 R1 Lite Teleop(R) 的网口与 R1 Lite 的网口,确保通信正常。
  3. 连接电源适配器:将电源适配器连接至 R1 Lite Teleop(R) 的DC插口。
  4. 开启R1 Lite:将R1 Lite上电并开启。

R1_Lite_Teleop_ros2_connection

3. 遥操作流程

请按照以下步骤操作,配置并开始遥操任务。

3.1 多机通信设置

3.1.1 配置网络

请您使用有线方式配置网络,有利于提升多机通信的稳定性。

有线连接
- 将 R1 Lite NUC 与 R1 Lite Teleop 连接起来(2.3中说明),R1 Lite Teleop 网络配置为【与其他计算机共享】;
注意:R1 Lite NUC 的有线IP通常为10.42.0.xxx; R1 Lite Teleop 的有线IP通常为10.42.0.1

3.1.2 修改文件

注意:R1 Lite NUC 与 R1 Lite Teleop 的环境是出厂配置完成的,您可根据步骤进行确认,正确则无需修改。

1.连接R1 Lite NUC 查看环境配置 :

#查看是否输出存放配置文件的路径:/opt/galaxea/find_server/super_client_configuration_file.xml
echo $FASTRTPS_DEFAULT_PROFILES_FILE

#查看本机有线IP
ip a

#查看输出的地址是否是当前有线IP 如:<address>10.42.0.xx</address>
cat /opt/galaxea/find_server/super_client_configuration_file.xml | grep address

#如果不是R1 Lite NUC 的有线IP,请修改为当前有线IP
vim /opt/galaxea/find_server/super_client_configuration_file.xml

#将文件中<address>10.42.0.xx</address>修改为本机器有线IP
R1_Lite_Teleop_ros2_Find_Server_XML

2.确认R1 Lite Teleop 的环境配置:
通过R1 Lite 登陆到R1 Lite Teleop,如果是使用板卡R1 Lite Teleop的用户名cat,密码为temppwd

ssh {username}@{R1_Lite_Teleop_IP} #R1 Lite Teleop有线IP通常为10.42.0.1
#查看是否输出存放配置文件的路径:/home/cat/galaxea/find_server/super_client_configuration_file.xml
echo $FASTRTPS_DEFAULT_PROFILES_FILE

#查看输出的地址是否是 R1 Lite NUC 的有线IP
cat ~/galaxea/find_server/super_client_configuration_file.xml | grep address

#如果不是R1 Lite NUC 的有线IP,请修改为 R1 Lite NUC IP
vim ~/galaxea/find_server/super_client_configuration_file.xml

#将<address>10.42.0.xx</address>修改为R1 Lite NUC有线IP

以上文件修改之后需重启确保生效

3.示例: R1 Lite 和 R1 Lite Teleop 通过网线连接,R1 Lite 的有线IP为10.42.0.44R1_Lite_Teleop_ros2_Find_Server_Config R1_Lite_Teleop_ros2_Find_Server_LiteT_Config

3.2 开启遥操

3.2.1 启动 R1 Lite

使用以下命令启动 R1 Lite 所有节点:

#进入存放脚本的目录之后执行脚本
cd ~{your_download_path}/install/startup_config/share/startup_config/script/
./robot_startup.sh boot ../sessions.d/ATCStandard/R1LITEBody.d/

3.2.2 启动 R1 Lite Teleop

注意:请您确认 R1 Lite Teleop 的连杆已摆放至零点位置。

  1. 连接蓝牙手柄。
    a. 短按蓝牙手柄开机键,成功开启后,您可观测到蓝色流水灯。
    b. 连接成功后,手柄内侧蓝色流水灯效果消失,转为蓝灯常亮。
    R1_Lite_Teleop_ros2_handle_of_hand

  2. 节点启动。
    a.请确认 R1 Lite 与 R1 Lite Teleop 已通过网线连接。
    b.当R1 Lite Teleop 上电开启之后,状态指示灯为黄色长亮。
    c.当检测到R1 Lite 执行启动节点之后,R1 Lite Teleop会自动拉起自身服务。
    d.当指示灯为绿色长亮后说明 R1 LITE Teleop 与 R1 LITE 开始建立连接,等待3-5s可进行对 R1 Lite 的全身遥操作。

如果没有自启动服务可以执行一键启动命令启动服务

#进入存放脚本的目录之后执行脚本
cd ${R1Lite-T_SDK_path}/install/startup_config/share/startup_config/script/
./robot_startup.sh boot ../sessions.d/ATCHostStandard/R1LITET.d/
创建自启动服务(可选)
mkdir ~/galaxea/monitor_ws

vim ~/galaxea/monitor_ws/start_monitor.sh
#!/bin/bash
# -----------------------------
# 基础配置
# -----------------------------
export FASTRTPS_DEFAULT_PROFILES_FILE=/home/cat/galaxea/find_server/super_client_configuration_file.xml #确认存放路径正确     
FIXED_IFACE="eth0"               
MAX_RETRY=360                    
RETRY_INTERVAL=2                 
DDS_DEP_SERVICES="avahi-daemon" 
EXTRA_DELAY=6                    


check_lubancat_iface() {
    # 检查网卡是否处于UP状态 + IP是否为10.42.0.1
    if ip link show "$FIXED_IFACE" | grep -q "state UP" && \
       ip addr show "$FIXED_IFACE" | grep -q "inet 10.42.0.1/"; then
        echo "$FIXED_IFACE(IP: 10.42.0.1,状态:正常)"
        return 0
    else
        echo "[重试] Lubancat有线网卡未就绪(检查:1.网卡是否插好 2.共享网络是否开启)"
        return 1
    fi
}


check_dds_services() {
    for service in $DDS_DEP_SERVICES; do
        if ! systemctl is-active --quiet "$service"; then
            echo "[重试] DDS依赖服务$service未启动(执行:sudo systemctl start $service 修复)"
            return 1
        fi
    done
    echo "avahi-daemon服务(状态:正常)"
    return 0
}


check_lite_connected() {
    # 步骤1:从ARP缓存提取Lite的有效IP(仅10.42.0.x网段,排除无效记录)
    lite_ip=$(arp -a | grep "$FIXED_IFACE" | grep -v "incomplete" | grep -oP "\b10.42.0.\d+\b" | head -n 1)
    if [ -z "$lite_ip" ]; then
        echo "[重试] 未找到Lite设备(检查:1.Lite是否上电 2.Lite有线是否插好 3.Lite是否在10.42.0.x网段)"
        return 1
    fi

    # 步骤2:验证Lite IP连通性(基础网络层,ping通说明物理链路正常)
    if ! ping -c 1 -W 1 "$lite_ip" >/dev/null 2>&1; then
        echo "[重试] Lite设备(IP: $lite_ip)已找到,但ping不通(检查:1.Lite防火墙是否关闭 2.Lite有线网卡是否UP)"
        return 1
    fi

    # 步骤3:基于IP反向验证Lite avahi服务(兼容超时,不依赖域名)
    if avahi-resolve -a "$lite_ip" >/dev/null 2>&1; then
        echo "Lite设备(IP: $lite_ip,DDS状态:avahi服务正常)"
        return 0
    else
        echo "Lite设备(IP: $lite_ip,DDS状态:avahi反向解析超时,默认就绪)"
        return 0  # 即使超时也放行(基于Lite日志已注册avahi的前提)
    fi
}

# -----------------------------
# 主循环:等待所有条件就绪(未满足则重试)
# -----------------------------
RETRY=0
echo "=== 开始初始化:等待Lubancat与Lite就绪(最大等待6分钟) ==="
while [ $RETRY -lt $MAX_RETRY ]; do

    if if_info=$(check_lubancat_iface) && dds_info=$(check_dds_services) && lite_info=$(check_lite_connected); then
        echo -e "\n=== [所有条件满足] ==="
        echo "1. Lubancat有线网卡:$if_info"
        echo "2. DDS依赖服务:$dds_info"
        echo "3. Lite设备状态:$lite_info"
        echo -e "=== 等待${EXTRA_DELAY}秒后启动节点 ==="
        sleep $EXTRA_DELAY  
        break
    fi
    # 输出重试进度(每10次重试提示一次剩余时间)
    if [ $(( (RETRY + 1) % 10 )) -eq 0 ]; then
        remaining_time=$(( (MAX_RETRY - RETRY) * RETRY_INTERVAL / 60 ))
        echo "[进度] 已重试$((RETRY + 1))次,剩余约${remaining_time}分钟(最大${MAX_RETRY}次)"
    fi
    sleep $RETRY_INTERVAL
    RETRY=$((RETRY + 1))
done

# -----------------------------
# 启动节点或超时退出
# -----------------------------
if [ $RETRY -eq $MAX_RETRY ]; then
    echo -e "\n=== [错误] 超时未满足启动条件(排查方向) ==="
    echo "1. Lubancat:eth0网卡是否UP + 10.42.0.1 IP是否配置 + avahi-daemon是否启动"
    echo "2. Lite:是否上电 + 有线是否插好 + IP是否为10.42.0.x + 防火墙是否关闭"
    exit 1
else
    echo -e "\n=== 开始启动 torso_monitor_node ==="

    export FASTRTPS_INTERFACE="$FIXED_IFACE"

    source /opt/ros/humble/setup.bash
    source /home/cat/galaxea/install/setup.bash # 请根据实际情况修改路径
    # 启动节点(exec确保进程接管,便于systemd管理)
    exec ros2 run HDAS torso_monitor_node
fi
赋予可执行权限:
chmod +x ~/galaxea/monitor_ws/start_monitor.sh
创建systemd服务:
sudo vim /etc/systemd/system/node_monitor.service

[Unit]
Description=Torso Monitor ROS2 Node
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=cat
ExecStart=/home/cat/galaxea/monitor_ws/start_monitor.sh

# 节点挂掉自动重启
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
#重新加载服务:
sudo systemctl daemon-reload
#启动服务:
sudo systemctl start node_monitor.service
#配置开机启动:
sudo systemctl enable node_monitor.service

3.2.3 R1 LITE Teleop 灯效说明

状态 LED颜色
初始状态与断联(超过3s未收到R1 Lite消息) 黄灯
R1 Lite 与 R1 Lite Teleop建立连接 绿灯
数据采集开始后 蓝灯

led

3.2.4 手柄按键说明

R1_Lite_Teleop_ros2_bluetooth_controllers_configuration_cn

摇杆/按键 左手柄 右手柄
摇杆X 正方向 底盘向前移动(Vx 为正) 躯干向上移动(Vz 为正)
摇杆X 负方向 底盘向后移动(Vx 为负) 躯干向下移动(Vz 为负)
摇杆Y 正方向 底盘向左平移(Vy 为正) 底盘逆时针自旋(Vw 为正)
摇杆Y 负方向 底盘向右平移(Vy 为负) 底盘顺时针自旋(Vw 为负)
按键 ↑ 躯干Pitch角正转 -
按键 ↓ 躯干Pitch角反转 -
按键 A - 躯干向前移动(Vx为正)
按键 B - 躯干向后移动(Vx为负)
按键 X - 开启录制:按一次开始录制数据
删除数据:间隔5秒后再按一次删除数据
按键 Y - 停止录制数据
按键 ZL 左夹爪闭合 -
按键 L 左夹爪张开 -
按键 ZR 右夹爪闭合 -
按键 R 右夹爪张开 -

4. 数据落盘说明

请按照以下步骤操作,了解并配置数据采集。

4.1 数据格式介绍

数据采集的文件格式为 ros2 bag ,文件后缀为 *.mcap

4.2 数据获取

默认存储路径为:/home/r1lite/GalaxeaDataset/{date}/ date 为当天的日期,格式参考如下:20250923

4.3 配置文件介绍

4.3.1 配置文件的默认存储路径

默认数据录制使用的配置文件位于:

/opt/galaxea/data_collection/data_task_config.json

4.3.2 配置文件说明

配置文件用于描述此次采集任务的信息,您可以根据需求自行修改。

{
   "project_info": {
        "project_name": "test"},
   "task_info": {
        "task_name": "test_data_collection",
        "task_owner": "galaxea" }
    "operation_info": {
        "teleoperation_type": "teleop",
        "location": "suzhou",
        "operator_name": "galaxea"}
}

4.4 数据落盘文件介绍

数据以 mcap + json 格式保存,文件一一对应。例如:

 # 例如以下两个文件代表了一个数据包
 S2R12000P18245_20240213173320125_RAW.mcap
 S2R12000P18245_20240213173320125_RAW.json
 # 格式为 robot_serial_number+timestamp+RAW
 # robot_serial_number:机器人序列号,位于 /opt/galaxea/body/RSN
 # timestamp:数据采集的时间戳精确到毫秒。
 # RAW:代表数据采集原始落盘数据
保存位置示例: R1_Lite_data_collection

5. 自定义设置说明

5.1 手柄键位调整

蓝牙手柄原始消息,会转为rostopic发布,源码路径为~/galaxea/install/joycon_evdev_publisher/lib/python3.10/site-packages/joycon_evdev_publisher/joy_evdev_exe_node.py
您可以调整元素顺序,改变手柄键位,如下图所示。 R1_Lite_Teleop_ros2_remap_bluetooth_controller_buttons_cn

5.2 夹爪控制模式切换

按照以下方式修改 launch 文件,您可以切换夹爪控制模式,修改完后重启程序即可使用。

5.2.1 开关控制模式

  1. 输入以下命令,打开对应的 launch 文件。
    cd ~/galaxea/install/mobiman/share/mobiman/launch/simpleExample/
    vim tabletop_gello_tele_a1x_launch.py
    
  2. 修改 gripper_modemode1 ,此模式下,夹爪控制逻辑为开关控制模式R1_Lite_Teleop_gripper_mode1_cn

5.2.2 增量控制模式

  1. 输入以下命令,打开对应的 launch 文件。
    cd ~/galaxea/install/mobiman/share/mobiman/launch/simpleExample/
    vim tabletop_gello_tele_a1x_launch.py
    
  2. 修改 gripper_modemode2 ,此模式下,夹爪控制逻辑为增量控制模式R1_Lite_Teleop_ros2_gripper_mode1_cn

5.3 底盘线速度设定

使用同构遥操作时,底盘默认线速度(Vx、Vy方向)为 0.2m/s ,底盘默认角速度(Vw)为 0.6rad/s ,其中底盘线速度可以通过以下方式设定。
注意:为避免速度过快而发生碰撞,请按照需求谨慎修改底盘线速度。

5.3.1 在launch启动文件中设定

  1. 输入以下命令,打开对应的launch文件。
    cd ~/galaxea/install/mobiman/share/mobiman/launch/simpleExample/
    vim tabletop_gello_tele_a1x_launch.py
    
  2. 修改 default_chassis_value ,这个参数为程序启动后底盘默认线速度。 R1_Lite_Teleop_ros2_chassis_value_cn