Skip to content

Repository files navigation

XMARTEV Material Detection Task 1

XMARTEV 物料检测 task1 的 ROS2 仿真环境。参赛者启动 server 后,通过 ROS2 话题订阅 RGB-D、里程计、关节状态和任务信息,并发布控制指令驱动 MMK2 机器人完成柜内抓取和桌面放置。

任务内容:

Take the brownbox from the cabinet, and put it on the table.

快速运行

宿主机需要 Docker、NVIDIA Driver、NVIDIA Container Toolkit、NVIDIA GPU 和可用显示环境。

docker pull crpi-1pzq998p9m7w0auy.cn-hangzhou.personal.cr.aliyuncs.com/challengecup/material_detection:task1_cu118_full

允许容器显示图形窗口,并创建运行缓存:

xhost +local:root
docker volume create xmartev_torch_extensions

启动 server,默认开启可视化窗口、3DGS、相机图像和深度图,默认关闭 LiDAR 和裁判评分:

docker run --rm -it \
  --gpus all \
  --network host \
  --ipc host \
  --name xmartev_task1_server \
  -e DISPLAY=${DISPLAY} \
  -e QT_X11_NO_MITSHM=1 \
  -e ROS_DOMAIN_ID=99 \
  -e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp \
  -e MUJOCO_GL=glfw \
  -e XMARTEV_HEADLESS=0 \
  -e XMARTEV_ENABLE_RENDER=1 \
  -e XMARTEV_USE_GS=1 \
  -e XMARTEV_USE_LIDAR=0 \
  -e XMARTEV_ENABLE_SCORE=0 \
  -e TORCH_EXTENSIONS_DIR=/tmp/torch_extensions \
  -e TORCH_CUDA_ARCH_LIST="8.6" \
  -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
  -v xmartev_torch_extensions:/tmp/torch_extensions \
  crpi-1pzq998p9m7w0auy.cn-hangzhou.personal.cr.aliyuncs.com/challengecup/material_detection:task1_cu118_full \
  bash -lc "xmartev-server --round_id 1 --fix 1"

另开终端运行 baseline client:

docker run --rm -it \
  --gpus all \
  --network host \
  --ipc host \
  --name xmartev_task1_baseline \
  -e ROS_DOMAIN_ID=99 \
  -e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp \
  -e YOLO_CONFIG_DIR=/tmp/ultralytics \
  crpi-1pzq998p9m7w0auy.cn-hangzhou.personal.cr.aliyuncs.com/challengecup/material_detection:task1_cu118_full \
  bash -lc "cd /workspace/material_detection_client && python3 baseline_round1_seed99.py"

baseline 会执行固定流程:

start zone -> cabinet -> detect brownbox -> pick brownbox -> table -> place

参赛者可以保留同一个 server,替换为自己的 ROS2 client。

停止容器:

docker stop xmartev_task1_server
docker stop xmartev_task1_baseline

主要脚本

examples/xmartev_material_detection/task_1_server.py   # 启动 MuJoCo/ROS2 仿真 server
material_detection_client/baseline_round1_seed99.py    # baseline 抓取 client
material_detection_client/yolo_detect.py               # baseline YOLO 检测节点

server 常用环境变量:

ROS_DOMAIN_ID=99              server 和 client 必须一致
RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
MUJOCO_GL=glfw                开启桌面可视化窗口
XMARTEV_HEADLESS=0            开启可视化界面
XMARTEV_ENABLE_RENDER=1       保持相机图像和深度图发布
XMARTEV_USE_GS=1              启用 3D Gaussian Splatting 渲染
XMARTEV_USE_LIDAR=0           默认关闭 LiDAR;server 加 --enable-lidar 可开启
XMARTEV_ENABLE_SCORE=0        默认关闭裁判评分;server 加 --enable-score 可开启
TORCH_EXTENSIONS_DIR=/tmp/torch_extensions

xmartev_torch_extensions 用于保存 gsplat CUDA 扩展编译缓存。第一次运行会编译,后续同一台机器会复用这个 volume。

检查命令

检查镜像内 server、client、baseline、ROS2 消息和资源:

docker run --rm -it \
  --gpus all \
  --network host \
  --ipc host \
  crpi-1pzq998p9m7w0auy.cn-hangzhou.personal.cr.aliyuncs.com/challengecup/material_detection:task1_cu118_full \
  bash -lc "xmartev-check-install"

无窗口短测:

docker run --rm -it \
  --gpus all \
  --network host \
  --ipc host \
  -e MUJOCO_GL=egl \
  -e XMARTEV_HEADLESS=1 \
  -e XMARTEV_ENABLE_RENDER=1 \
  -e XMARTEV_USE_GS=1 \
  -e XMARTEV_USE_LIDAR=0 \
  -e XMARTEV_ENABLE_SCORE=0 \
  -e TORCH_EXTENSIONS_DIR=/tmp/torch_extensions \
  -e TORCH_CUDA_ARCH_LIST="8.6" \
  -v xmartev_torch_extensions:/tmp/torch_extensions \
  crpi-1pzq998p9m7w0auy.cn-hangzhou.personal.cr.aliyuncs.com/challengecup/material_detection:task1_cu118_full \
  bash -lc "xmartev-server --round_id 1 --fix 1 --max-time 5"

ROS2 话题

下表列出本场景 server 提供给参赛者使用的主要 ROS2 接口话题。/rosout/parameter_events 等 ROS2 自动话题不属于比赛控制/观测接口。

Server 发布

Topic Type 说明
/clock rosgraph_msgs/msg/Clock 仿真时间。
/slamware_ros_sdk_server_node/odom nav_msgs/msg/Odometry 机器人底盘位姿和速度。
/tf tf2_msgs/msg/TFMessage 动态 TF,主要为 odom -> base_link
/joint_states sensor_msgs/msg/JointState 升降、头部、双臂和夹爪关节状态。
/head_camera/color/image_raw sensor_msgs/msg/Image 头部 RGB 图像,rgb8,默认 640x480。
/head_camera/color/camera_info sensor_msgs/msg/CameraInfo 头部 RGB 相机内参。
/head_camera/aligned_depth_to_color/image_raw sensor_msgs/msg/Image 头部深度图,对齐 RGB,mono16,单位毫米。
/head_camera/aligned_depth_to_color/camera_info sensor_msgs/msg/CameraInfo 头部深度相机内参。
/left_camera/color/image_raw sensor_msgs/msg/Image 左腕 RGB 图像,rgb8,默认 640x480。
/left_camera/color/camera_info sensor_msgs/msg/CameraInfo 左腕相机内参。
/right_camera/color/image_raw sensor_msgs/msg/Image 右腕 RGB 图像,rgb8,默认 640x480。
/right_camera/color/camera_info sensor_msgs/msg/CameraInfo 右腕相机内参。
/xmartev_material_detection/taskinfo std_msgs/msg/String 当前任务文本。
/xmartev_material_detection/gameinfo std_msgs/msg/String 裁判状态和得分信息;默认关闭,server 加 --enable-score 后发布。
/slamware_ros_sdk_server_node/scan sensor_msgs/msg/LaserScan 激光雷达扫描;默认关闭,server 加 --enable-lidar 后发布。

Server 订阅

Topic Type 控制格式
/cmd_vel geometry_msgs/msg/Twist 使用 linear.x 控制前进速度,angular.z 控制角速度。
/spine_forward_position_controller/commands std_msgs/msg/Float64MultiArray [slide_joint]
/head_forward_position_controller/commands std_msgs/msg/Float64MultiArray [head_yaw_joint, head_pitch_joint]
/left_arm_forward_position_controller/commands std_msgs/msg/Float64MultiArray [joint1, joint2, joint3, joint4, joint5, joint6, gripper]
/right_arm_forward_position_controller/commands std_msgs/msg/Float64MultiArray [joint1, joint2, joint3, joint4, joint5, joint6, gripper]

baseline 额外发布:

Topic Type 说明
/yolo/detections vision_msgs/msg/Detection2DArray YOLO 检测结果,供 baseline 抓取流程使用。
/yolo/result_image sensor_msgs/msg/Image YOLO 可视化结果图像。

/joint_states 关节顺序:

slide_joint
head_yaw_joint
head_pitch_joint
left_arm_joint1
left_arm_joint2
left_arm_joint3
left_arm_joint4
left_arm_joint5
left_arm_joint6
left_arm_eef_gripper_joint
right_arm_joint1
right_arm_joint2
right_arm_joint3
right_arm_joint4
right_arm_joint5
right_arm_joint6
right_arm_eef_gripper_joint

ROS2 调用示例

以下命令需要在与 server 相同 ROS_DOMAIN_ID 的容器内运行。

ros2 topic list
ros2 topic echo /xmartev_material_detection/taskinfo
ros2 topic hz /head_camera/color/image_raw

底盘前进:

ros2 topic pub -r 10 /cmd_vel geometry_msgs/msg/Twist \
  "{linear: {x: 0.10, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

底盘停止:

ros2 topic pub --once /cmd_vel geometry_msgs/msg/Twist \
  "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"

升降和头部:

ros2 topic pub --once /spine_forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.10]}"

ros2 topic pub --once /head_forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.0, -0.6]}"

右臂张开/闭合夹爪:

ros2 topic pub --once /right_arm_forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray \
  "{data: [0.0, -0.166, 0.032, 0.0, -1.571, -2.223, 1.0]}"

ros2 topic pub --once /right_arm_forward_position_controller/commands \
  std_msgs/msg/Float64MultiArray \
  "{data: [0.0, -0.166, 0.032, 0.0, -1.571, -2.223, 0.2]}"

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages