Paper · 2024-11-22 · cs.RO
Aim My Robot: Precision Local Navigation to Any Object
Aim My Robot (AMR) drives a robot to a centimetre-precise pose relative to any object, given a reference image with an object mask and a relative side, distance and angle. A transformer fuses frozen MAE RGB-D tokens, LiDAR bins and goal tokens, and predicts waypoints autoregressively. Trained on 500k simulated trajectories. Reports a 3 cm and 1 degree median error on unseen objects.
Sim-to-real transferImitation learningRobot simulation for learningMasked image modelingnavigationsim-to-realtransformermobile-manipulation
AI-compiled by claude-haiku-5-5 on 2026-10-25, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Most robot navigation stops when the robot is about a metre from its goal. That is fine for finding a room, but not for parking a forklift in front of a pallet, docking a robot, or standing square to a fridge so it can be opened.
Aim My Robot (AMR) is a system for that last stretch. You show it a picture of the target object with the object outlined. You also say which side of the object to face, how far away to stand, and at what angle. The robot then moves there using its camera and a 2D laser scanner, without a map and without a 3D model of the object. The camera head also tilts to keep the object in view.
The model was trained on a large set of simulated trajectories in photorealistic indoor scenes. The trajectories were planned by an algorithm, not recorded from a human driving the robot §III-A. The authors report that it works on a real robot and on objects it never saw in training.
TL;DR
- AMR is a vision-based local navigation model. It reaches a goal pose relative to an object, not just a point within a metre §I §II.
- The goal is a reference image with object mask, an approach side, a distance and an angle §II.
- It fuses RGB-D, LiDAR and goal tokens in a transformer, and predicts base waypoints and camera tilt §III-B.
- Trained on 500k simulated trajectories in Isaac Sim, with DAgger §IV.
- Author-reported: 3 cm and 1 degree median error on unseen objects in simulation, and little loss on a real robot §I.
Problem
Navigation systems usually count a goal as reached within about 1 m §I. The authors need a robot to stop at a precise relative pose to an object, for docking, inspection or manipulation §I §II, such as a forklift lining up with a pallet §V-D.
They assume the robot is already within about 10 m of the object, around room size, and that some other system supplies the goal §II. The robot has no object CAD model and no 2D or 3D map. Classical pose estimation needs the object model and a visible object §I §VI.
The goal is G = \{I_R, M, \mathbf{C}\}: reference image, object mask and relative pose \mathbf{C} = \{S, d, \theta\} §II, unnumbered equation. The side S is one of front, back, left or right. Front is the most visible side of the object in I_R §II.
Method
AMR is trained with behaviour cloning on data from a simulator, then refined with DAgger §IV. The data pipeline and the model are described in §III.
Data generation §III-A. The authors import Habitat Synthetic Scenes (HSSD) into Isaac Sim, which renders photorealistic images with ray tracing. Each training sample draws:
- a robot footprint radius, a cylinder placed at random in the traversable area of a room §III-A;
- a reference image, rendered either from the robot's start view or from a random view, with a target object mask taken from the simulator §III-A;
- a goal side, distance and angle, after which the robot is placed at the goal and checked for collisions §III-A.
A path is planned with AIT* in a Reeds-Shepp state space with turning radius 0, which fits a differential-drive base. The cost prefers a camera that looks toward the goal and penalises backward motion §III-A. Along each path the camera is rendered every 0.2 m or every 5 degrees §III-A. The tilt is set so that the lowest vertex of the object mesh sits a quarter of the way up from the bottom of the image §III-A.
Model §III-B. The model has three stages, shown in fig. 5.
- Sensor encoding §III-B1. The current RGB image goes through a frozen MAE-Base encoder, giving a grid of patch tokens. Depth is not concatenated. It is turned into a 3D position for each depth patch, which is encoded with sinusoidal embeddings and added to the matching RGB token. Past frames are handled the same way; their extrinsics are the camera-to-base transform from odometry §III-B1. LiDAR points are grouped into 32 directional bins, and an MLP turns each bin into one token.
- Goal-aware, robot-aware fusion §III-B2. The reference image goes through the same frozen MAE. The mask goes through a small convolutional network. A vision context encoder \mathcal{F} handles the image tokens, and a mask decoder \mathcal{G} reads its output to predict masks, which helps it track the target. Goal values (d, \theta, S) and the footprint radius R each get their own MLP. A multi-modal context encoder \mathcal{H} then takes all the tokens.
- Motion generation §III-B3. The output of \mathcal{H} is cross-attended by two decoders. One predicts the base trajectory, an autoregressive transformer that outputs waypoints in egocentric polar coordinates. The other predicts camera tilt. The base is replanned every 8 steps, and the tilt is updated at every step §IV.
Each waypoint is a triple: direction, distance and heading. These are sampled one after another, each as a classification over bins plus a residual correction predicted by a small MLP §III-B3. The base is replanned with a receding horizon §III-B3.
# AMR inference, one control step [§III-B] [§IV]
# Input: goal (reference image, mask, side, distance, angle, footprint),
# current RGB-D frame and LiDAR scan
# Output: base waypoints (replanned every 8 steps), camera tilt (every step)
def control_step(goal, frame, lidar):
# Tokenize the reference image with the frozen MAE [§III-B2]
goal_image_tokens = frozen_mae(goal.image) # same shape as RGB
# Encode the mask with a small convolutional network [§III-B2]
mask_tokens = mask_encoder(goal.mask) # shape not stated
# Tokenize the current RGB with the frozen MAE [§III-B1]
rgb_tokens = frozen_mae(frame.rgb) # (196, 512)
# Add the depth position embedding to each RGB patch [§III-B1]
rgb_tokens = rgb_tokens + depth_position_embedding(frame.depth,
frame.extrinsics)
# One token per directional LiDAR bin, 32 in total [§III-B1]
lidar_tokens = lidar_bin_mlp(bin_lidar_points(lidar, bins=32))
# Separate MLPs for the goal values and the footprint [§III-B2]
goal_token = goal_mlp(goal.side, goal.distance, goal.angle)
footprint_token = footprint_mlp(goal.footprint)
# Vision context encoder F, then multi-modal context encoder H [§III-B2]
vision_context = vision_encoder(goal_image_tokens, mask_tokens,
rgb_tokens)
context = multimodal_encoder(vision_context, lidar_tokens,
goal_token, footprint_token)
# Predict the camera tilt, a regression output [§III-B3]
tilt = tilt_decoder(context)
# Decode waypoints one at a time, T = 12 in total [§III-B3] [§IV]
waypoints = autoregressive_decode(context, num_waypoints=12)
return waypoints, tiltThe training loss, from §IV, is a plain sum of three terms:
# Training loss [§IV]
# Input: predicted and target masks (all history frames), waypoints, tilt
def training_loss(predicted, target):
# Pixel-wise L2 on the object mask over all history frames [§IV]
mask_loss = l2(predicted.masks, target.masks)
# Classification and regression per waypoint, as in BeT [§IV]
base_loss = waypoint_classification(predicted.waypoints, target.waypoints)
base_loss = base_loss + waypoint_regression(predicted.waypoints,
target.waypoints)
# L2 on the camera tilt angle [§IV]
tilt_loss = l2(predicted.tilt, target.tilt)
return mask_loss + base_loss + tilt_lossHere waypoint_classification and waypoint_regression are the names of the
two parts of the base loss. The paper gives no loss formulas for them, so this
is a reading of "classification loss and regression loss for each waypoint" in
§IV.
Hyperparameters
| Name | Value | Where | Notes |
|---|---|---|---|
| Camera height | 1.5 m | §II | tilt-enabled forward RGB-D camera |
| Goal side S | front, back, left, right | §II §III-A | |
| Goal distance d (task) | 0.0 to 1.0 m | §II | |
| Goal distance d (training sample) | 0.1 to 0.5 m | §III-A | differs from the task range, see Pitfalls |
| Goal angle \theta | 0, ±15, ±30 degrees | §II §III-A | |
| Footprint radius R | 0.1 to 0.5 m, sampled | §III-A | cylindrical robot body |
| Render gap along path | 0.2 m or 5 degrees | §III-A | |
| Camera tilt target | lowest object vertex at 1/4 from bottom | §III-A | |
| AIT* state space | Reeds-Shepp, turning radius 0 | §III-A | differential-drive base |
| RGB input size | 224 × 224 × 3 | §III-B1 | |
| MAE feature map | 14 × 14 × 512 | §III-B1 | frozen MAE-Base |
| Depth resize | 14 × 14 | §III-B1 | how depth is pooled per patch: not stated |
| LiDAR resampling | 256 points | §III-B1 | resampling method: not stated |
| LiDAR bins | 32 bins, 8 points each, 32 tokens | §III-B1 | |
| Direction bins \psi | 30 | §III-B3 | over [0, 2π] |
| Distance bins r | 32 | §III-B3 | over [0, 0.2 m] |
| Heading bins \phi | 12 | §III-B3 | over [0, 2π] |
| Waypoints per trajectory T | 12 | §IV | |
| Waypoint interval dt | 0.2 s | §IV | |
| Base replanning | every 8 steps | §IV | |
| Camera tilt update | every step | §IV | |
| Inference rate | 12 Hz on RTX 3090 | §IV | Conclusion says 10 Hz §VII |
| Training steps | 150k | §IV | |
| Batch size | 128 | §IV | |
| Training hardware | 8 × A100 | §IV | |
| Trajectories | 500k (7.5 M frames) | §IV | |
| Scenes | 54 HSSD environments; 49 train, 5 eval | §IV | |
| Target objects | 3,119 train; 275 test (160 unseen) | §IV | Table I counts differ, see Pitfalls |
| Evaluation tasks | 2,000 in unseen environments | §IV | |
| History frames | 0 in simulation; 4 on the real robot | §IV | |
| Completion radius | 1.0 m | §V | run counts as complete if within this |
| Ground-truth map resolution | 2 cm | §V | real-world evaluation |
| Loss | L_\text{mask} + L_\text{base} + L_\text{tilt}, unweighted | §IV | unnumbered equation |
| Base controller | Pure Pursuit (omnidirectional); MPC (forklift) | §IV | controller parameters not stated |
| Forklift fine-tune data | about 500 demonstrations | §V-D | simulated forklift |
| Optimizer, learning rate, schedule | not stated | — | |
| Transformer depth, width, heads | not stated | — | |
| Parameter count | not stated | — | |
| Mask decoder architecture | not stated | — | |
| Sinusoidal embedding frequencies | not stated | — |
Results
Author-reported. Setup: HSSD simulation with 2,000 navigation tasks in five unseen scenes §IV; a real kitchen and a simulated forklift §V-C §V-D. The baseline is FoundationPose pose estimation with a CAD model, a ground-truth occupancy map and the same planner §V-A. The baseline therefore uses information AMR does not use: a CAD model, a visible object at the start, and a perfect map §V-A.
| Setting | Metric | Baseline | This paper | Source |
|---|---|---|---|---|
| Simulation, unseen objects | median error | not stated numerically | 3 cm and 1 degree | §I |
| Simulation, object visible at start | completion rate | 89.0% | 95.9% | fig. 6 |
| Simulation, object out of view | completion rate | not applicable | 90.4% | fig. 6 |
| Simulation, ablation | collision rate (full model) | not applicable | 3.8 | tab. II |
| Real kitchen, history 4 | completed runs and errors | not applicable | 3/3 for 5 of 6 objects | tab. III |
Full data from the paper:
Table I tab. I. Median angular error (MAE, degrees) and median distance error (MDE, m) for seen and unseen instances in the test scenes.
| Category | Seen MAE (°) | Seen MDE (m) | Unseen MAE (°) | Unseen MDE (m) |
|---|---|---|---|---|
| Chair | 1.45 | 0.05 | 1.08 | 0.04 |
| Drawers | 0.77 | 0.02 | 0.55 | 0.03 |
| Couch | 0.82 | 0.02 | 0.57 | 0.04 |
| Picture | 0.84 | 0.03 | 0.64 | 0.04 |
| Shelves | 0.65 | 0.07 | 0.68 | 0.02 |
| Tables | 7.14 | 0.04 | 1.20 | 0.04 |
| Unlabeled | 0.78 | 0.03 | 0.74 | 0.04 |
Seen column: 136 unique objects. Unseen column: 166 unique objects tab. I.
Table II tab. II. Collision rate of ablated models. Units are not stated.
| Full | No mask dec. | ACT decoder | No DAgger | No depth | No footprint | No LiDAR |
|---|---|---|---|---|---|---|
| 3.8 | 7.1 | 5.8 | 5.5 | 17.7 | 26.2 | 25.6 |
Table III tab. III. Real kitchen. Each cell is completed runs out of 3, the distance error in cm, and the orientation error in degrees. The paper does not say whether the errors average only over completed runs.
| Hist | Fridge | Sink | Stove |
|---|---|---|---|
| 0 | 1 / 2.4 cm / 2.3° | 3 / 14.8 cm / 0.1° | 3 / 2.0 cm / 0.8° |
| 4 | 3 / 3.1 cm / 0.4° | 3 / 7.9 cm / 0.2° | 3 / 2.4 cm / 0.8° |
| Hist | Cabinet | Spam | Cup |
|---|---|---|---|
| 0 | 2 / 3.1 cm / 1.7° | 1 / 1.8 cm / 0.6° | 3 / 9.6 cm / 0.8° |
| 4 | 3 / 2.1 cm / 0.6° | 2 / 2.0 cm / 0.1° | 3 / 8.7 cm / 0.9° |
Other figures: fig. 6 error distributions by object distance, with the completion rates above; fig. 7 qualitative runs and failure cases; fig. 8 ablation error distributions over all runs, complete and incomplete; fig. 9 and fig. 10 real-world runs; fig. 11 a fridge drawer closed by the robot body and a forklift loading a pallet.
Paper vs code
No official code.
I searched in this order. The arXiv abstract page and the paper's project page
(sites.google.com/view/aimmyrobot, linked from the abstract) contain no code link.
GitHub search found no repository for "aimmyrobot", "aim-my-robot" or "aim my
robot", and none in the NVlabs organisation. The GitHub account of author Xuning
Yang (xuningy) has no repository that matches the method. The only
aimmyrobot account is an unrelated profile-config repo.
Pitfalls
- Goal distance range conflicts. The task defines d in [0.0, 1.0] m §II. Training samples d in [0.1, 0.5] m §III-A. The real kitchen and forklift experiments use d = 1 m and 2 m §V-C §V-D. Both are outside the training range. The paper does not explain how well the model generalises to them.
- Object counts conflict. §IV gives 160 unseen objects among 275 test objects. tab. I gives 136 seen and 166 unseen unique objects.
- Inference rate conflicts. §IV says 12 Hz on an RTX 3090. The conclusion says 10 Hz §VII.
- Loss weights. The three loss terms are summed with weight 1 each §IV. The optimiser, learning rate and schedule are not stated, so training cannot be reproduced from the paper alone.
- Unstated architecture. Layer counts, widths, heads and the mask decoder are not stated. The sinusoidal embedding frequencies are not stated either. Depth is resized to 14 × 14, but how depth values are pooled per patch is not stated. Neither is how LiDAR points are resampled to 256.
- Bin-to-value mapping. The waypoint value is a classifier output plus a residual §III-B3. The paper does not say what value each bin represents, so the bin centres are a guess.
- Success is a 1 m test; precision is measured on completed runs only. Errors in tab. I and the centimetre headline come from runs that finished within 1.0 m §V. Completion rate is reported separately §V fig. 6.
- Real-world ground truth limits precision. Real errors are measured against an occupancy map at 2 cm resolution §V, and some real-world figures are hand-measured tab. III. The 2 cm resolution is the same order as the errors reported, so the centimetre claims need care.
- Baseline is not like-for-like. The baseline is given a CAD model, a visible object and a perfect map §V-A. AMR gets none of these, so the gap does not isolate the method.
- History differs by setting. History frames are 0 in simulation and 4 on the real robot §IV. The paper reports no noticeable benefit from history in simulation §IV, but says history is critical on the real robot §V-C.
- Forklift is simulated only. The forklift result uses a simulated forklift with about 500 fine-tuning demonstrations §V-D. The real-world forklift is not tested.
- Replanning versus horizon. Trajectories have 12 waypoints but replanning happens every 8 steps §IV. The receding-horizon description says "up to T" §III-B3. How the replan interval interacts with the horizon is not described.
- Ablation units. The units of tab. II are not stated.
- Section and table numbering. Section numbers here follow IEEEtran's convention in the source: roman numerals for sections, capital letters for subsections and arabic numbers with ")" for subsubsections. The compiled PDF shows these labels. Figure and table numbers follow order of appearance in the source.
- Equations are unnumbered. The loss and goal definition are display equations without numbers. They are cited as §IV and §II.
- Cost. Training needs Isaac Sim, HSSD scenes and 150k steps on 8 A100 GPUs §IV.
Lineage
- Builds on: Masked Autoencoders, MAE-Base, frozen as the image encoder §III-B1; a small convolutional mask encoder similar to SAM §III-B2; Behavior Transformer for the per-waypoint classification and regression loss §IV; DAgger for data augmentation after behaviour cloning §IV; AIT* for path planning in data generation §III-A.
- Compared against: a pose-estimation baseline with FoundationPose, a CAD model and an occupancy-map planner §V-A. Ablation against an ACT-style decoder §V-B and a model with no mask decoder tab. II.
- Superseded by: none known from this wiki.
Source and license
Adapted from “Aim My Robot: Precision Local Navigation to Any Object” by Xiangyun Meng, Xuning Yang, Sanghun Jung, Fabio Ramos, Srid Sadhan Jujjavarapu, Sanjoy Paul, Dieter Fox (arXiv:2411.14770), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors.