https://github.com/baggepinnen/dynamicmovementprimitives.jl
Learning Dynamic Movement Primitives in Julia
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
Keywords from Contributors
Repository
Learning Dynamic Movement Primitives in Julia
Basic Info
Statistics
- Stars: 14
- Watchers: 2
- Forks: 11
- Open Issues: 2
- Releases: 5
Topics
Metadata Files
README.md
DynamicMovementPrimitives
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.

Owner
- Name: Fredrik Bagge Carlson
- Login: baggepinnen
- Kind: user
- Location: Lund, Sweden
- Website: baggepinnen.github.io
- Twitter: baggepinnen
- Repositories: 59
- Profile: https://github.com/baggepinnen
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
Top Committers
| Name | 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
- Documentation: https://docs.juliahub.com/General/DynamicMovementPrimitives/stable/
- License: MIT
-
Latest release: 0.4.1
published over 1 year ago
Rankings
Dependencies
- 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
- JuliaRegistries/TagBot v1 composite