dimensionalOS / dimensionalOS/dimos

Refresh local planner

Open
#2,369 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
4.5k
Forks
808
Avg merge
3d 5h
Merged PRs (30d)
233

Description

Our current local planner lives in https://github.com/dimensionalOS/dimos/blob/main/dimos/navigation/nav_stack/modules/local_planner/local_planner.py

We'd like to rewrite it in rust (see our other rust modules). At minimum we need it to fill out this API:

class LocalPlannerConfig(NativeModuleConfig):
    vehicle_length: float = 0.5  # m
    vehicle_width: float = 0.5  # m
    vehicle_height: float = 0.5  # m
    max_speed: float = 0.75  # m/s
    obstacle_height: float = 0.5  # m
    # AND some sort of option to pick between holonomic/non-holonomic/omidirectional drives

class LocalPlanner(NativeModule):
    # assume points are in world frame
    terrain_map: In[PointCloud2]
    # aka current lidar - points also in world frame
    registered_scan: In[PointCloud2]
    odometry: In[Odometry]
    way_point: In[PointStamped]
    goal_pose: In[PoseStamped]
    
    # output
    path: Out[NavPath]
    goal_reached: Out[Bool]

The rewrite can either be a direct translation of the existing C++ local planner, or (even better) a local planner from scratch.

It doesn't need to be complicated, but it does need to work robustly. Especially in terms of thrashing and taking momentum into account.

How we will test it
  • We'll run it on a humanoid robot and a dog, give global path that goes through obstacles/walls and see if it efficiently avoids hitting those walls while still getting closer to the goal.
  • We'll setup scenarios where the obstacle moves back and fourth to see if the local planner has thrashing (hysteria)
  • We'll test it in the unity sim first. Note the unity sim only runs on linux x86 (we are replacing it with a better sim soon, just haven't gotten to it yet)
Note:

You're welcome to change things outside of the local planner if needed (ex: the simple planner), but try to keep it minimal


Synced from DIM-980 by summer

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with dimos/navigation/nav_stack/modules/local_planner/local_planner.py and compare the existing Rust modules to understand the native module API. Implement the listed LocalPlannerConfig inputs and outputs, then run the Unity simulation on Linux x86 against obstacle, moving-obstacle, humanoid, and dog scenarios. Done means robust avoidance, progress toward the goal, and no thrashing.

Written by the indexing model from the issue text.

Assessment

Tech stack
python, rust
Domain
robotics
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.