Skip to content

Fix robot initial positions: use polar coordinate generation on outer circle#1

Merged
Logic-TARS merged 5 commits intomainfrom
copilot/fix-initial-position-generation
Feb 11, 2026
Merged

Fix robot initial positions: use polar coordinate generation on outer circle#1
Logic-TARS merged 5 commits intomainfrom
copilot/fix-initial-position-generation

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Feb 11, 2026

Robot dogs spawned at fixed position [0.0, 0.6, 0.5] (0.6m from center), violating the requirement for random distribution on outer circle at 3.0m radius. This prevented proper testing of the outer→inner→center navigation path.

Changes

Configuration (cfg.py)

Added arena geometry parameters to VBotSection001EnvCfg:

arena_outer_radius: float = 3.0  # Outer circle radius
arena_inner_radius: float = 1.5  # Inner circle radius  
boundary_radius: float = 3.5     # Physical boundary
arena_center: list = field(default_factory=lambda: [0.0, 0.0])

Position Generation (vbot_section001_np.py)

Replaced fixed position with polar coordinate random generation in reset():

Before:

robot_init_pos = np.tile(cfg.init_state.pos, (num_envs, 1))

After:

# Polar coordinate random generation on outer circle
robot_init_xy = np.zeros((num_envs, 2), dtype=np.float32)
for i in range(num_envs):
    theta = np.random.uniform(0, 2 * np.pi)
    radius = cfg.arena_outer_radius + np.random.uniform(-0.1, 0.1)
    robot_init_xy[i, 0] = radius * np.cos(theta)
    robot_init_xy[i, 1] = radius * np.sin(theta)

robot_init_xy += np.array(cfg.arena_center, dtype=np.float32)
robot_init_pos = np.column_stack([robot_init_xy, np.full(num_envs, 0.5, dtype=np.float32)])

Testing

Added test_initial_position_generation.py with 8 unit tests validating:

  • Distance from center: 2.9-3.1m
  • Position uniqueness across resets
  • Angular distribution coverage
  • Fixed height at 0.5m

Result

Dogs now spawn randomly distributed on outer circle (2.9-3.1m from center) with different angles on each reset, enabling proper navigation path testing per ACCEPTANCE_CHECKLIST.md requirements.

Original prompt

问题描述

当前 VBot 导航竞技场任务中,机器狗的初始位置生成不符合题目要求:

现状 ❌

  • 所有机器狗都从固定位置 pos = [0.0, 0.6, 0.5] 出生
  • 这违反了"初始位置随机生成"的要求
  • 机器狗几乎就在圆心附近,无法真正测试外圈→内圈→圆心的导航路径

要求 ✅

根据 ACCEPTANCE_CHECKLIST.md 和题目规范:

  • 10只机器狗应在外圈(半径 3.0m)上随机分布
  • 每次重置产生不同的随机位置
  • 使用极坐标随机生成
    • 角度 θ: [0, 2π] 均匀随机
    • 半径 r: 3.0 ± 0.1m(外圈范围)
    • 高度 z: 0.5m(固定)

影响范围

  • 文件: motrix_envs/src/motrix_envs/navigation/vbot/vbot_section001_np.py
  • 方法: reset() 中的初始位置生成逻辑(当前 L766-787)
  • 相关配置: motrix_envs/src/motrix_envs/navigation/vbot/cfg.py

修复内容

修改 reset() 方法中的位置初始化代码,将其从固定位置改为在外圈随机分布:

# 原代码(固定位置):
robot_init_pos = np.tile(cfg.init_state.pos, (num_envs, 1))

# 新代码(极坐标随机生成在外圈):
robot_init_xy = np.zeros((num_envs, 2), dtype=np.float32)
for i in range(num_envs):
    theta = np.random.uniform(0, 2 * np.pi)
    radius = cfg.arena_outer_radius + np.random.uniform(-0.1, 0.1)
    robot_init_xy[i, 0] = radius * np.cos(theta)
    robot_init_xy[i, 1] = radius * np.sin(theta)

# 添加圆心偏移(如果存在)
robot_init_xy += cfg.arena_center

# 构造完整的XYZ位置
robot_init_pos = np.column_stack([robot_init_xy, np.full(num_envs, 0.5, dtype=np.float32)])

验证标准

  • 初始位置在外圈(距圆心 ~3.0m)
  • 每次重置位置随机不同
  • 10只狗位置分散(角度不同)
  • 符合 test_arena_navigation.py 预期输出

This pull request was created from Copilot chat.


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 4 commits February 11, 2026 10:15
…r circle

Co-authored-by: Logic-TARS <99871356+Logic-TARS@users.noreply.github.com>
Co-authored-by: Logic-TARS <99871356+Logic-TARS@users.noreply.github.com>
Co-authored-by: Logic-TARS <99871356+Logic-TARS@users.noreply.github.com>
Co-authored-by: Logic-TARS <99871356+Logic-TARS@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix initial position generation for VBot navigation Fix robot initial positions: use polar coordinate generation on outer circle Feb 11, 2026
Copilot AI requested a review from Logic-TARS February 11, 2026 10:24
@Logic-TARS Logic-TARS marked this pull request as ready for review February 11, 2026 10:31
@Logic-TARS Logic-TARS merged commit c41d6d7 into main Feb 11, 2026
@Logic-TARS Logic-TARS deleted the copilot/fix-initial-position-generation branch February 11, 2026 12:01
Logic-TARS added a commit that referenced this pull request Mar 4, 2026
P0: 出生位置从Y=5.83移至Y=7.83(2026平台中心), 随机范围收窄确保Y∈[6.83,8.83]
P1: 新增竞赛里程碑(波浪+10,路线选择+5,吊桥+10/河床+5,终点下楼+5)
P1: 基于X坐标区分吊桥(X<-1)和河床(X>0)路线
P1: 拜年红包分值修正: #1(桥面)=0(含在吊桥路线), #2(桥底)=+5
P1: scene_section012.xml添加7个视觉标记球(2拜年红+5贺礼金)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants