Motus.OMPL.NET 0.5.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.5.0
                    
NuGet\Install-Package Motus.OMPL.NET -Version 0.5.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.5.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.5.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.5.0
                    
#r "nuget: Motus.OMPL.NET, 0.5.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.5.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.5.0
                    
Install as a Cake Addin
#tool nuget:?package=Motus.OMPL.NET&version=0.5.0
                    
Install as a Cake Tool

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):

  1. nuget.orgAccountTrusted PublishingAdd
  2. Provider: GitHub, owner lasaths, repository Motus.NET, workflow filename release.yml (exact match)
  3. 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 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.0 99 7/9/2026
Loading failed

See CHANGELOG.md.