Motus.OMPL.NET 0.10.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Motus.OMPL.NET --version 0.10.0
                    
NuGet\Install-Package Motus.OMPL.NET -Version 0.10.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Motus.OMPL.NET" Version="0.10.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Motus.OMPL.NET" Version="0.10.0" />
                    
Directory.Packages.props
<PackageReference Include="Motus.OMPL.NET" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Motus.OMPL.NET --version 0.10.0
                    
#r "nuget: Motus.OMPL.NET, 0.10.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Motus.OMPL.NET@0.10.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Motus.OMPL.NET&version=0.10.0
                    
Install as a Cake Addin
#tool nuget:?package=Motus.OMPL.NET&version=0.10.0
                    
Install as a Cake Tool

Motus.NET

.NET 8 motion-planning library for serial robots: plan, validate, export. No UI, no vendor runtime, no live robot I/O.

Use it from Motus.Grasshopper or any .NET host. Bundled presets (UR family) and URDF / xacro loaders; analytic IK for Universal Robots, numerical IK for generic chains.

Licensed under MIT.

Packages

dotnet add package Motus.Core
dotnet add package Motus.Geometry
dotnet add package Motus.OMPL.NET
dotnet add package Motus.Presets
Package Role
Motus.Core Models, IPlanner, validation, PlanningContext, JSON/CSV export
Motus.Geometry FK/IK, mesh/sphere collision, LIN / industrial motion programs
Motus.OMPL.NET Sampling planners (managed RRT-Connect by default; native OMPL when built)
Motus.Presets JSON presets + UrdfRobotLoader / xacro
Motus.Native Optional P/Invoke to motus_native (OMPL + FCL)

Rhino / desktop: managed planning and C# mesh collision are the default — no Linux .so required. See docs/rhino-host.md.

Quick start

var robot = PresetLoader.LoadRobotModelByName("UR10e");
var start = HomePoseResolver.HomeOrZeros(robot);
var goal = new JointState(/* radians */);

var scene = new CollisionScene(new[] {
    CollisionObject.Sphere("obstacle", Frame.Identity, 0.1)
});
var checker = CollisionCheckerFactory.Create(robot);
var opts = new PlanningOptions {
    CollisionScene = scene,
    CollisionChecker = checker
};

var result = SamplingPlanner.Create(checker, new SamplingPlannerOptions {
    PlannerId = SamplingPlannerId.RrtConnect,
    MaxIterations = 4000
}).Plan(new PlanningRequest(robot, start, goal, opts));

if (result.Success)
    File.WriteAllText("plan.json", TrajectoryExport.ToJson(result.Trajectory!));

URDF:

var robot = UrdfRobotLoader.Load("robot.urdf", new UrdfLoadOptions {
    BaseLink = "base_link",
    TipLink = "tool0"
});
var fk = KinematicsResolver.CreateFkSolver(robot.Preset, robot.Chain);

Planners

Planner When to use
JointLinearPlanner Free-space joint interpolation
CartesianLinearPathPlanner True TCP-linear (LIN) after IK
SamplingPlanner Obstacles — RRT-Connect / RRT* / … via registry
IndustrialMotionPlanner Mixed PTP / LIN / CIRC programs

Prefer SamplingPlanner + CollisionCheckerFactory.Create (or GetOrCreate for session reuse) over the obsolete RrtConnectPlanner wrapper.

// Motion program
var planner = new IndustrialMotionPlanner(robot.Preset);
var result = planner.Plan(new MotionProgramRequest(robot, start, new MotionSegment[] {
    new PtpSegment(ptpGoal, blendRadiusMeters: 0.004),
    new LinSegment(linGoal, stepMeters: 0.005),
    new CircSegment(via, circGoal, arcSamples: 12)
}));

Context: attach, groups, SRDF

var ctx = PlanningContext.Create(robot, scene)
    .Attach("workpiece", workpieceBox, tcpLocalFrame)
    .ForGroup(SrdfLoader.LoadGroups("robot.srdf")[0]);

var checker = CollisionCheckerFactory.Create(robot, attached: ctx.Attached);
var result = SamplingPlanner.Create(checker).Plan(
    new PlanningRequest(robot, start, goal, ctx.ToPlanningOptions()));

Non-group joints stay locked at the start configuration. MotusCapabilities.Describe() reports managed vs native OMPL/FCL.

Units & export

Internal units: radians, seconds, meters (Motus.Core.Units for °↔rad).

TrajectoryExport.ToJson emits the PlanBundle contract for Grasshopper and control adapters:

  • contractVersion / exportVersion — schema compatibility
  • units, frameConvention — semantics
  • diagnostics — machine-readable planner messages
  • provenance — optional plannerId, seed, settings hash

Additive optional fields are safe; removing/renaming fields requires a major contractVersion bump.

Build & test

Requires .NET 9+ SDK to open the .slnx; libraries target net8.0.

dotnet build Motus.NET.slnx
dotnet test Motus.NET.slnx

Optional native library:

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

Benchmarks: benchmarks/Motus.Benchmarks (BenchmarkDotNet).

Releases

Tag vX.Y.Zrelease workflow builds, tests, packs, publishes to nuget.org, and creates a GitHub Release.

One-time nuget.org trusted publisher: GitHub owner lasaths, repo Motus.NET, workflow release.yml.

Changelog: CHANGELOG.md.

Safety

Motus does not command physical robots. Presets and URDF imports are planning defaults — verify limits and calibration before hardware use. See docs/safety.md.

This library and bundled presets were developed with AI assistance; values are approximate and must be checked against manufacturer data.

Attribution

  • Managed RRT-Connect implements Kuffner & LaValle (ICRA 2000). Native path uses OMPL (BSD-3-Clause) when built.
  • Robot presets are approximate public-datasheet values for planning/visualization only.
Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.1 98 7/10/2026
Loading failed

See CHANGELOG.md.