Motus.OMPL.NET
0.5.0
See the version list below for details.
dotnet add package Motus.OMPL.NET --version 0.5.0
NuGet\Install-Package Motus.OMPL.NET -Version 0.5.0
<PackageReference Include="Motus.OMPL.NET" Version="0.5.0" />
<PackageVersion Include="Motus.OMPL.NET" Version="0.5.0" />
<PackageReference Include="Motus.OMPL.NET" />
paket add Motus.OMPL.NET --version 0.5.0
#r "nuget: Motus.OMPL.NET, 0.5.0"
#:package Motus.OMPL.NET@0.5.0
#addin nuget:?package=Motus.OMPL.NET&version=0.5.0
#tool nuget:?package=Motus.OMPL.NET&version=0.5.0
Motus.NET
Standalone .NET 8 robotics motion-planning library for the Motus toolkit. Planning, validation, and export only — no UI, no vendor runtime, and no connection to physical robots.
Motus.OMPL.NET is the OMPL adapter layer: it targets unified native motus_native (OMPL + optional FCL) via Motus.Native (see docs/ompl-port-plan.md). Until the native library is built, managed RRT-Connect and C# mesh collision (including attach) are used.
Arbitrary serial manipulators can be loaded from URDF (UrdfRobotLoader) or bundled JSON presets. FK/IK use DH profiles on bundled presets (analytic IK for Universal Robots) and numerical IK on generic URDF chains.
Licensed under MIT.
Rhino 8 / Grasshopper
Windows and macOS hosts use managed planning and collision by default — no Linux .so, no LD_LIBRARY_PATH. See docs/rhino-host.md.
Install
dotnet add package Motus.Core
dotnet add package Motus.Geometry
dotnet add package Motus.OMPL.NET
dotnet add package Motus.Native
dotnet add package Motus.OMPL.Native
dotnet add package Motus.Presets
| Package | Purpose |
|---|---|
Motus.Core |
Data model, IPlanner, validation, PlanningContext, JSON/CSV export |
Motus.Geometry |
FK/IK, collision, Cartesian planners, attach-aware checking |
Motus.OMPL.NET |
RRT-Connect / RRT* (native OMPL when built, managed fallback) |
Motus.Native |
P/Invoke to motus_native (OMPL + FCL C ABI) |
Motus.Presets |
JSON presets + UrdfRobotLoader |
Load a robot
// Bundled preset
var preset = PresetLoader.LoadByModelName("UR5e");
// URDF (revolute serial chain)
var robot = UrdfRobotLoader.Load("path/to/robot.urdf", new UrdfLoadOptions {
BaseLink = "base_link",
TipLink = "tool0"
});
var fk = KinematicsResolver.CreateFkSolver(robot.Preset, robot.Chain);
Planners
| Planner | Use when | Package |
|---|---|---|
JointLinearPlanner |
Known start/goal joint configs, no obstacles | Motus.Core |
CartesianLinearPlanner |
Cartesian TCP goal; joint-linear path after IK | Motus.Geometry |
CartesianLinearPathPlanner |
True TCP-linear (LIN) motion | Motus.Geometry |
RrtConnectPlanner |
Obstacles in PlanningOptions.CollisionScene |
Motus.OMPL.NET |
IndustrialMotionPlanner |
Mixed PTP/LIN/CIRC motion programs |
Motus.Geometry |
Motion Programs (0.5.0)
var planner = new IndustrialMotionPlanner(robot.Preset);
var request = new MotionProgramRequest(
robot,
start,
new MotionSegment[]
{
new PtpSegment(ptpGoal, blendRadiusMeters: 0.004),
new LinSegment(linGoal, stepMeters: 0.005, blendRadiusMeters: 0.003),
new CircSegment(circVia, circGoal, arcSamples: 12)
});
var result = planner.Plan(request);
- Segment model:
PtpSegment,LinSegment,CircSegment - Current blend behavior: deterministic fallback to exact-stop when a requested blend is not feasible/supported
- Export includes motion metadata (
motionType,segmentIndex,blendRadiusMeters) for replay/debugging
Attach (pick-style)
var ctx = PlanningContext.Create(robot, scene)
.Attach("workpiece", workpieceBox, tcpLocalFrame);
var checker = CollisionCheckerFactory.Create(robot, attached: ctx.Attached);
var result = new RrtConnectPlanner(checker).Plan(
new PlanningRequest(robot, start, goal, ctx.ToPlanningOptions()));
MotusCapabilities.Describe() reports native OMPL/FCL availability for hosts.
Planning group (SRDF-style)
// From SRDF (official MoveIt config, pairs with unmodified URDF)
var groups = SrdfLoader.LoadGroups("robot.srdf");
var ctx = PlanningContext.Create(robot, scene).ForGroup(groups[0]);
var result = new RrtConnectPlanner(checker).Plan(
new PlanningRequest(robot, start, goal, ctx.ToPlanningOptions()));
// Or manual joint list (partial-DOF lock)
var group = new PlanningGroup("arm", "base_link", "tool0",
["shoulder_pan", "shoulder_lift", "elbow", "wrist_1", "wrist_2"]);
var ctx2 = PlanningContext.Create(robot, scene).ForGroup(group);
Non-group joints stay locked at the start configuration during planning.
Native OMPL + FCL: optional on Linux when motus_native is built with OMPL/FCL. Win/Mac NuGet ships stubs — managed RRT and C# mesh collision run by default (see docs/rhino-host.md).
Units
Internal units are radians, seconds, and meters. Use Motus.Core.Units for degree/radian conversion.
0.5.0 Migration Notes
See CHANGELOG.md (Unreleased) for upgrade details.
Build & test
dotnet build Motus.NET.slnx
dotnet test Motus.NET.slnx
Native motus_native (optional):
cmake -S native -B native/build -DMOTUS_USE_OMPL=ON -DMOTUS_USE_FCL=ON
cmake --build native/build
# Linux: export LD_LIBRARY_PATH=native/build
Requires the .NET 9 SDK or newer to read the .slnx solution; the libraries target net8.0.
Releases
Push a version tag (v0.5.0) to run .github/workflows/release.yml: build, test, pack, publish to nuget.org via trusted publishing, and create a GitHub Release with .nupkg assets.
Configure the nuget.org trusted publisher policy (one-time):
- nuget.org → Account → Trusted Publishing → Add
- Provider: GitHub, owner
lasaths, repositoryMotus.NET, workflow filenamerelease.yml(exact match) - Re-run the failed Release workflow on the tag after the policy is saved (or push the next tag)
Safety
Motus does not send commands to physical robots. Robot presets and URDF imports are planning/visualization defaults — verify all limits and calibration before any hardware use. See docs/safety.md.
AI-assistance disclaimer
This library and its bundled robot presets were developed with AI assistance. All values are approximate and must be independently verified against official manufacturer datasheets and the real controller before any physical use.
Attribution
- Managed RRT-Connect fallback implements the RRT-Connect algorithm (Kuffner & LaValle, ICRA 2000). Native planning uses OMPL (BSD-3-Clause) when built.
- Robot presets are approximate values from public datasheets, for planning/visualization only.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Motus.Core (>= 0.5.0)
- Motus.Geometry (>= 0.5.0)
- Motus.Native (>= 0.5.0)
- Motus.OMPL.Native (>= 0.5.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.13.1 | 0 | 7/27/2026 |
| 0.13.0 | 0 | 7/27/2026 |
| 0.12.0 | 8 | 7/27/2026 |
| 0.11.0 | 35 | 7/26/2026 |
| 0.10.0 | 40 | 7/26/2026 |
| 0.9.1 | 42 | 7/24/2026 |
| 0.8.0 | 41 | 7/22/2026 |
| 0.7.2 | 104 | 7/19/2026 |
| 0.7.1 | 100 | 7/19/2026 |
| 0.7.0 | 82 | 7/19/2026 |
| 0.6.9 | 100 | 7/18/2026 |
| 0.6.8 | 149 | 7/18/2026 |
| 0.6.7 | 100 | 7/18/2026 |
| 0.6.6 | 117 | 7/13/2026 |
| 0.6.4 | 85 | 7/12/2026 |
| 0.6.3 | 95 | 7/12/2026 |
| 0.6.2 | 88 | 7/12/2026 |
| 0.6.1 | 101 | 7/11/2026 |
| 0.6.0 | 97 | 7/10/2026 |
| 0.5.0 | 99 | 7/9/2026 |
See CHANGELOG.md.