跳转至

R1 Pro 自主导航系统教程

1. 产品介绍

该系统包含了建图、定位、导航和控制模块。 机器人可在环境下构建点云地图,并依此实现全局定位和目标点的自主移动和避障。

自主导航系统为付费启用功能,目前处于测试阶段,如需深入了解及购买试用,请联系product@galaxea.ai或致电4008780980。

2. 硬件介绍

2.1 性能参数

定位 描述
定位方式 激光SLAM
定位频率 100 Hz
定位精度 <0.05 m
运动控制 描述
控制方式 自主导航(路径跟踪)
最大行驶速度 0.6 m/s
避障方式 绕障
避障频率 10-20 Hz
网络 描述
有线网络 支持
WiFi 支持

2.2 传感器配置

Galaxea R1Pro 配备了多种传感器,其中包括9个高清摄像头和2个激光雷达,使其能够全方位感知周围环境。

R1_FOV

传感器 描述
相机 头部:1 x 双目深度相机
腕部:2 x 单目深度相机
底盘:5 x 单目相机
激光雷达 1 x 360°
(可选配两个激光雷达)

2.2.1 相机

规格 头部 腕部 底盘
类型 双目深度相机 单目深度相机 单目相机
数量 1 2 5
输出分辨率 1920 x 1080 @30FPS 1280 x 720 @30FPS
(RGB 1920 x 1080)
1920 x 1080 @30FPS
视场角 110°H x 70°V x 120°D 87°H x 58°V x 95°D 118°H x 62°V
深度范围 0.3 m ~ 20 m 0.2 m ~ 3 m \
工作温度 -10 °C ~ +45°C 0 ~ +85℃ -40 ~ +85℃
尺寸 175L x 30W x 32H mm 90L x 25W x 25H mm 30L x 30W x 23H mm
重量 164 g 75 g <50 g

2.2.2 激光雷达

底盘配备360°激光雷达*,精度高且抗干扰能力强。

雷达 说明
数量 1 ~ 2
视场角 360°H x 59°V
激光波长 905 nm
检测范围 40 m @10% 反射率
70 m @80% 反射率
近距离盲区 0.1 m
数据端口 100 BASE-TX 以太网
IMU 内置IMU
工作温度范围 -20 ~ +55℃
尺寸 65L x 65W x 60H mm
重量 265 g

* 标配1个激光雷达,可根据用户需求选择激光雷达配置数量。

3. 软件介绍

请确保您的环境满足以下软件依赖要求。

  1. 硬件依赖:R1 Pro 计算单元
  2. 操作系统依赖:Ubuntu 22.04 LTS
  3. 中间件依赖:ROS Humble

R1 Pro机器人软件版本必须安装V2.1.1及以上的SDK。

4. 定位导航操作流程

地图构建是机器人自主导航的基础步骤。通过遥控机器人录制地图数据(mcap文件),并在本地电脑上进行处理和构建地图,最后将地图上传至机器人端指定目录,完成地图的部署。根据以下教程内容所示,设置目标位姿,修改目标文件,运行后实现定点导航。

4.1 构建地图

4.1.1 启动 R1 Pro

通过SSH登录至 R1 Pro ECU。

ssh nvidia@robot_ip
# Enter the password  (default: nvidia)

运行以下指令,启动R1的相关节点。

cd ~/galaxea/install/startup_config/share/startup_config/script/
./robot_startup.sh boot ../sessions.d/ATCNavigation/R1PROVRTeleopNAV.d/

4.1.2 录制数据包

运行以下指令,开始录制bag文件。

# 检查 topic 是否齐全, 是否有正常帧率输出
ros2 topic hz /hdas/imu_chassis 
ros2 topic hz /hdas/lidar_chassis_left # 10hz
ros2 topic hz /hdas/feedback_chassis
cd ~
ros2 bag record /hdas/imu_chassis /hdas/lidar_chassis_left /hdas/feedback_chassis -s mcap

通过遥控器控制机器人在所需建图空间内移动,确保覆盖所有需要导航的区域。

遥控器操控机器人底盘方式请点击此处查阅。

当完成地图数据录制后,按下Ctrl + C结束录制。

注意

  • 请将机器人移动到准备建图的区域,目前仅支持室内,区域最大规模不超过100平方米,楼层高度不超过5米的场景。
  • 在录制开始时,机器人需保持静止状态,并持续5秒以上,以保证数据质量。
  • 在录制数据时,应确保环境中没有动态目标(如移动的人员或物体),避免跟随在机器人附近移动,以避免干扰地图构建。
  • 建图完成后在后续使用中,请确保环境内没有场景变更(如新增桌子,隔断等),否则需要重新进行建图。
  • 机器人移动应完整覆盖建导航区域2次,即控制机器人在同一路线行驶2次,如下图,从 1 ~ 8 完成两圈行驶。 R1_navi_route

4.1.3 获取建图运行环境(Docker)

  1. 下载并安装Docker镜像

    请发送邮件至support@galaxea.ai获取文件。 R1_navi_4.1.3_qrcode_cn

    推荐查看Docker安装教程进行安装。

  2. 加载Docker文件 执行以下命令在本地电脑上加载Docker文件

    sudo docker load -i galaxea_main_mapping_image_ros2.tar.gz
    

    docker默认挂载在根目录,请预留20G以上存储空间。如需更改挂载路径,请参考:

    ```bash
    # 1. 在 /etc/docker/ 目录下创建一个新的 daemon.json 文件:
    sudo vim /etc/docker/daemon.json
    # 2. 在打开的文件中,添加以下内容,将 Docker 存储目录改为希望挂载的路径
    {
    "data-root": "/path/to/target_dir"
    }
    # 3. 保存并退出。按下'shift'+ ':',输入'w'+'q',然后按下回车键。
    # 4. 修改配置后,重启 Docker 服务使配置生效:
    sudo systemctl restart docker
    ```
    
  3. 下载默认标定文件。如已购买,我们将会以官方邮件的形式发送给您。

4.1.4 在环境中建图

  1. 在本地电脑终端中,运行以下命令将录制的bag文件从R1 Pro端拉取到本地。

    scp nvidia@{robot_ip}:~/{xxx.bag} .
    # [robot_ip]为R1的IP地址;
    # [xxx.bag]为录制的bag文件名。
    

  2. 准备好bag文件和标定参数文件。

    mkdir -p ~/mapping_data
    cp /path/to/xxx.bag ~/mapping_data
    cp /path/to/robot_calibration.json ~/mapping_data
    

  3. 启动Docker并开始建图。

    sudo docker run --rm  -v ~/mapping_data:/mapping_data galaxea-mapping:v2.0.2 bash -c "./root/run_mapping_app.sh /mapping_data"
    

  4. 查看建图结果。

    cd ~/mapping_data/map
    # map.obj 文件即为地图结果.  可以使用meshlab打开查看点云. 
    # sudo apt-get install meshlab
    meshlab map.obj
    

4.1.5 导入地图和标定文件

执行以下命将地图和标定文件导入至R1 Pro

ssh nvidia@{rorbot_ip} "mkdir -p ~/galaxea/calib ~/galaxea/maps"
scp -r ~/mapping_data/map/* nvidia@{robot_ip}:~/galaxea/maps/
scp -r ~/mapping_data/robot_calibration.json nvidia@{robot_ip}:~/galaxea/calib/

4.2 启动定位功能

启动定位功能时,确保机器人在已知地图中。

  1. 启动软件

    在R1 Pro端执行以下命令,启动相关节点。

    cd ~/galaxea/install/startup_config/share/startup_config/script/
    ./robot_startup.sh boot ../sessions.d/ATCNavigation/R1PROVRTeleopNAV.d/
    

  2. 获取定位

    将遥控器拨到底盘控制模式,操作机器人已知地图环境中2m范围内低速绕圈10~30秒进行定位初始化,并观察如下命令的输出。

    在R1Pro中,运行以下命令检查定位状态:

    source ~/galaxea/install/setup.bash
    ros2 run tf2_ros tf2_echo map body
    

    若正常返回以下类似数据,则定位成功:

    - Translation: [3.280, -0.743, 0.008]
    - Rotation: in Quaternion [0.000, -0.004, -0.147, 0.989] # xx y z w
    

4.3 设置目标位姿

  1. 遥控机器人到目标点
    启动定位成功后,将机器人遥控到客户想设定的目标点处,确保R1中心远离障碍物至少45cm。

  2. 记录位姿信息
    每遥控至一个目标点,记录该位置的位姿信息:

    - Translation: [3.280, -0.743, 0.008]
    - Rotation: in Quaternion [0.000, -0.004, -0.147, 0.989] # x y z w
    

  3. 更新导航目标点下发脚本
    重复上述过程,记录所有目标点的位姿信息后,将所有目标点位姿信息更新到导航目标点下发脚本中。

    脚本示例如下,修改pose中position和orientation为目标点信息。

    ros2 topic pub /system_manager/task/navigation_enage system_manager_msg/msg/TaskRequest "{
        header: {
            stamp: {sec: 0, nanosec: 0},
            frame_id: 'map'
        },
        task_type: 1,
        navigation_task: {
            target_pose: {
            header: {
                stamp: {sec: 0, nanosec: 0},
                frame_id: 'map'
            },
            pose: {
                position: {x: 0.0, y: 0.0, z: 0.0},
                orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}
            }
            },
            start_point_id: 0,
            target_point_id: 0,
            mid_point_id: [],
            target_point_type: 0,
            reserved: ''
        },
        manipulation_task: {
            manip_type: 0,
            manip_object: 0,
            manip_action: 0,
            boundary_box: {left: 0.0, top: 0.0, right: 0.0, bottom: 0.0},
            position: {x: 0.0, y: 0.0, z: 0.0},
            reserved: ''
        },
        poseadjust_task: {
            torso_pose: {
            position: [],
            velocity: [],
            effort: []
            }
        },
        reserved: 'grid'
    }"
    

5. 软件接口

5.1 系统框图

R1_navigation_system_diagram_CN

5.2 驱动接口

R1提供了多种驱动接口,用于与硬件设备进行通信和控制。以下是主要的驱动接口及其说明:

5.2.1 底盘驱动接口

/motion_control/chassis_speed:用于控制机器人底盘的运动,包括速度控制、方向控制等。请前往R1Pro软件介绍查看底盘驱动接口章节获取更多详细信息。

5.2.2 激光雷达接口

/hdas/lidar_chassis_left:激光雷达用于环境感知和距离测量,为机器人提供实时的环境信息。请前往R1Pro软件介绍查看激光雷达接口章节获取更多详细信息。

5.2.3 IMU接口

/hdas/imu_chassis:IMU用于测量机器人的加速度、角速度等信息,为导航和姿态控制提供数据支持。请前往R1Pro软件介绍查看IMU接口章节获取更多详细信息。

5.3 运控接口

R1Pro机器人提供了多种运动控制接口,用于实现对机器人运动的精确控制。以下是主要的运控接口及其说明:

5.3.1 底盘控制接口

/motion_target/target_speed_chassis:用于控制机器人底盘的运动,包括速度控制、方向控制等。请前往R1Pro软件手册的“底盘控制接口”章节获取更多详细信息。

5.4 定位接口

定位(Localization)接口是 R1 Pro 机器人实现自主导航和环境感知的核心组件。通过这些接口,机器人能够接收来自多种传感器的数据,如IMU(惯性测量单元)和激光雷达,从而实现精确的多传感器融合定位。这些接口确保机器人能够在复杂环境中准确地感知自身位置和姿态,为后续的路径规划和导航提供可靠的数据支持。本章节详细介绍了定位接口的各个话题,包括输入和输出数据的类型及其用途。

话题名称 I/O 描述 消息类型
/hdas/imu_chassis Input IMU数据,用于多传感器融合定位 sensor_msgs::Imu
/hdas/lidar_chassis_left Input 多线激光雷达点云,用于定位 sensor_msgs/PointCloud2
/localization/localization_results Output SLAM定位状态 localization_msg/LocLocalization

5.5 导航话题接口

导航(Navigation)接口是 R1 Pro 机器人实现自主路径规划和运动控制的关键部分。这些接口允许机器人根据输入的传感器数据(如激光雷达点云和SLAM定位状态)进行全局和局部路径规划,并输出控制指令以驱动机器人底盘运动。导航接口不仅支持避障功能,还能够实时更新机器人的运动轨迹和任务状态,确保机器人能够高效、安全地完成导航任务。本章节详细介绍了导航接口的各个话题,包括输入和输出数据的类型及其用途。

话题名称 I/O 描述 消息类型
/hdas/lidar_chassis_left Input 多线激光雷达点云,用于避障 sensor_msgs/PointCloud2
/localization/localization_results Input SLAM定位状态 localization_msg/LocLocalization
/system_manager/task/request Input 导航任务接口 system_manager_msg/TaskRequest
/nav/local_path Output 局部路径规划器规划的局部路径 sensor_msgs/PointCloud2
/nav/global_path Output 全局路径规划器规划的全局路径 sensor_msgs/PointCloud2
/nav/robot_global_traj Output 机器人行驶的全局轨迹 nav_msgs/Path
/nav/global_map Output 导航全局代价地图,用于规划全局路径 nav_msgs/OccupancyGrid
/nav/local_map Output 导航局部代价地图,用于规划局部路径 nav_msgs/OccupancyGrid
/nav/global_goal Output 导航接收的目标点,用于可视化 geometry_msgs/PoseStamped
/motion_target/target_speed_chassis Output 导航输出控制速度 geometry_msgs/Twist
/system_manager/task/response Output 导航任务完成情况 system_manager_msg/TaskResponse