https://github.com/baggepinnen/dynamicmovementprimitives.jl

Learning Dynamic Movement Primitives in Julia

https://github.com/baggepinnen/dynamicmovementprimitives.jl

Science Score: 13.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.5%) to scientific vocabulary

Keywords

control-systems dmp dynamic-movement-primitive locomotion motion-control movement-primitives robotics

Keywords from Contributors

thread hybrid-differential-equations ode pde jacobians sde neural-sde automatic-differentiation neural-ode differentialequations
Last synced: 6 months ago · JSON representation

Repository

Learning Dynamic Movement Primitives in Julia

Basic Info
  • Host: GitHub
  • Owner: baggepinnen
  • License: other
  • Language: Julia
  • Default Branch: master
  • Homepage:
  • Size: 216 KB
Statistics
  • Stars: 14
  • Watchers: 2
  • Forks: 11
  • Open Issues: 2
  • Releases: 5
Topics
control-systems dmp dynamic-movement-primitive locomotion motion-control movement-primitives robotics
Created almost 10 years ago · Last pushed over 1 year ago
Metadata Files
Readme License

README.md

DynamicMovementPrimitives

Build Status Coverage

Provides implementations of Ijspeert et al. 2013 and of Martin Karlsson, Fredrik Bagge Carlson, et al. 2017

Installation

julia using Pkg; Pkg.add("DynamicMovementPrimitives") using DynamicMovementPrimitives

Usage

Standard DMP

```julia using DynamicMovementPrimitives Nbasis = 15 αz = 25. αx = 1. opts = DMPopts(Nbasis,αx,αz)

y = [zeros(10);LinRange(0,2,1000); 2ones(500)] T = length(y) t = LinRange(0,10,T) h = t[2]-t[1] # Sample interval y = [y 0.5y] ẏ = centraldiff(y) ./h # Differentiate position to get velocity ÿ = centraldiff(ẏ) ./h dmp = fit(y,ẏ,ÿ,t,opts)

tout,yout,ẏout,xout = solve(dmp,t) # Generate trajectory, see ?solve for options plot(dmp) # Requires Plots.jl, plots the trajectory from solve with default options plot(dmp,true) ```

DMP with two degrees of freedom (Karlsson, Bagge Carlson et al. 2017)

This package also contains an implementation of bibtex @inproceedings{karlsson2017dmp, title = {Two-Degree-of-Freedom Control for Trajectory Tracking and Perturbation Recovery during Execution of Dynamical Movement Primitives}, author = {Karlsson, Martin and Bagge Carlson, Fredrik and Robertsson, Anders and Johansson, Rolf}, booktitle = {20th IFAC World Congress}, year = {2017}, }

We start by upgrading the DMP object to incorporate also the controller parameters for the 2DOF controller ```julia dmp2opts = DMP2dofopts(kp = 25,kv = 10,kc = 10_000,αe = 5) dmp2 = DMP2dof(dmp, dmp2opts) # Upgrade dmp to 2DOF version

t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t) plot(dmp2) # Requires Plots.jl, plots the trajectory from solve with default options plot(dmp2,true) ```

We test the performance of the 2DOF controller by implementing a solver callback. Between t=2.5 and t=4, we stop the evolution of the physical system by setting ẏa = 0 through u[3] = uprev[3]. julia import OrdinaryDiffEq condition(u,t,integrator) = 2.5 <= t < 4 affect!(integrator) = (integrator.u[3] = integrator.uprev[3]) cb = OrdinaryDiffEq.DiscreteCallback(condition,affect!)

We can call the solve method with our custom callback and plot the result. It should be clear from the figures that this time, the coupled signal yc slows down when there is a nonzero error. julia t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t, solver=OrdinaryDiffEq.Euler(), callback=cb) plot(t,ẏc, lab="\$ẏ_c\$", c=:red, l=(:dash, 3), layout=(2,2), subplot=1) plot!(t,yc, lab="\$y_c\$", c=:red, l=(:dash, 3), subplot=2) plot!(t,ẏa, lab="\$ẏ_a\$", c=:blue, subplot=1) plot!(t,ya, lab="\$y_a\$", c=:blue, subplot=2) plot!(t,e, lab="\$e\$", c=:green, subplot=3) plot!(t,400 .<= 1:T .< 600, lab="Disturbance", c=:green, subplot=4, fillrange=0) t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t) plot!(t,ẏc, lab="\$ẏ_u\$", c=:black, l=(:dashdot, 3), subplot=1) plot!(t,yc, lab="\$y_u\$", c=:black, l=(:dashdot, 3), subplot=2) In the figure below, the black line represents the evolution with no disturbance, in the paper referred to as the unperturbed evolution. The blue evolution is the actual system evolution whereas the red curve displays the coupled system evolution. DMP2dof plot

Owner

  • Name: Fredrik Bagge Carlson
  • Login: baggepinnen
  • Kind: user
  • Location: Lund, Sweden

Control systems, system identification, signal processing and machine learning

GitHub Events

Total
  • Watch event: 1
Last Year
  • Watch event: 1

Committers

Last synced: about 2 years ago

All Time
  • Total Commits: 59
  • Total Committers: 7
  • Avg Commits per committer: 8.429
  • Development Distribution Score (DDS): 0.254
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Fredrik Bagge Carlsson c****b@u****g 44
Fredrik Bagge Carlson b****n@g****m 10
Christopher Rackauckas a****s@c****m 1
Jan Weidner j****6@g****m 1
Julia TagBot 5****t 1
Elliot Saba s****t@g****m 1
Tony Kelman t****y@k****t 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 8 months ago

All Time
  • Total issues: 4
  • Total pull requests: 13
  • Average time to close issues: over 1 year
  • Average time to close pull requests: 2 months
  • Total issue authors: 3
  • Total pull request authors: 6
  • Average comments per issue: 2.0
  • Average comments per pull request: 0.31
  • Merged pull requests: 13
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • baggepinnen (2)
  • ChrisRackauckas (1)
  • JuliaTagBot (1)
Pull Request Authors
  • baggepinnen (8)
  • ChrisRackauckas (1)
  • jw3126 (1)
  • tkelman (1)
  • staticfloat (1)
  • JuliaTagBot (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 3
juliahub.com: DynamicMovementPrimitives

Learning Dynamic Movement Primitives in Julia

  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent repos count: 9.9%
Forks count: 12.5%
Average: 22.8%
Stargazers count: 29.9%
Dependent packages count: 38.9%
Last synced: 6 months ago

Dependencies

.github/workflows/CI.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/CompatHelper.yml actions
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite