dimensionalOS / dimensionalOS/dimos
Refresh local planner
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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