Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests failing due to PeriodicController issue #113

Open
tkoolen opened this issue Sep 19, 2019 · 15 comments · May be fixed by #126
Open

Tests failing due to PeriodicController issue #113

tkoolen opened this issue Sep 19, 2019 · 15 comments · May be fixed by #126

Comments

@tkoolen
Copy link
Collaborator

tkoolen commented Sep 19, 2019

First failure: https://travis-ci.org/JuliaRobotics/RigidBodySim.jl/jobs/583088525#L541-L548

Possibly related to SciML/DiffEqCallbacks.jl@46cd2b2, though there have been builds with version 2.8.0 of DiffEqCallbacks that passed.

@ChrisRackauckas
Copy link

Probably related. The big change was:

SciML/OrdinaryDiffEq.jl#841

Anything that didn't rely on internal details should be fine, but anything that did grab internal details needs to know now that tstops and saveat now always use a BinaryMinHeap, instead of changing the sort direction depending on tdir (since that's not type-stable). So we multiply by -1 to change the sort direction. The tooling around it all knows about it, and the callback library that was digging into the details of the time stepping handles it now due to that commit you linked. If you're directly grabbing the tstops or saveat somewhere you need to do a similar multiplication by tdir.

@ChrisRackauckas
Copy link

FWIW, the best thing would be for it not to be separate types for min vs max heaps, but 🤷‍♂ for now this works.

@ChrisRackauckas
Copy link

I don't immediately see why you'd get an issue since the implementation detail should only be changing what happens when integrating in reverse time.

@ChrisRackauckas
Copy link

I'm not entirely sure what MeshCat.jl is, but it's giving me install issues:

(v1.1) pkg> dev RigidBodySim
[ Info: Path `C:\Users\accou\.julia\dev\RigidBodySim` exists and looks like the correct package, using existing path
 Resolving package versions...
ERROR: Unsatisfiable requirements detected for package WebIO [0f1e0344]:
 WebIO [0f1e0344] log:
 ├─possible versions are: [0.1.0-0.1.10, 0.1.12, 0.2.0-0.2.8, 0.3.0-0.3.4, 0.4.0-0.4.2, 0.6.0-0.6.2, 0.7.0, 0.8.0-0.8.1, 0.8.3-0.8.9, 0.8.11] or uninstalled
 ├─restricted to versions 0.2.6-* by RigidBodySim [e61f16d8], leaving only versions [0.2.6-0.2.8, 0.3.0-0.3.4, 0.4.0-0.4.2, 0.6.0-0.6.2, 0.7.0, 0.8.0-0.8.1, 0.8.3-0.8.9, 0.8.11]
 │ └─RigidBodySim [e61f16d8] log:
 │   ├─possible versions are: 1.3.0 or uninstalled
 │   └─RigidBodySim [e61f16d8] is fixed to version 1.3.0
 ├─restricted by compatibility requirements with Atom [c52e3926] to versions: [0.8.1, 0.8.3-0.8.9, 0.8.11]
 │ └─Atom [c52e3926] log:
 │   ├─possible versions are: [0.1.0-0.1.1, 0.2.0-0.2.1, 0.3.0, 0.4.0-0.4.6, 0.5.0-0.5.10, 0.6.0-0.6.17, 0.7.0-0.7.15, 
0.8.0-0.8.8, 0.9.0-0.9.1, 0.10.0-0.10.1] or uninstalled
 │   └─restricted to versions 0.10.1 by an explicit requirement, leaving only versions 0.10.1
 └─restricted by compatibility requirements with MeshCat [283c5d60] to versions: [0.1.8-0.1.10, 0.1.12, 0.2.0-0.2.8, 0.3.0-0.3.4, 0.4.0-0.4.2, 0.7.0] — no versions left
   └─MeshCat [283c5d60] log:
     ├─possible versions are: [0.0.1-0.0.3, 0.1.0-0.1.2, 0.2.0-0.2.3, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0] or uninstalled     ├─restricted to versions * by RigidBodySim [e61f16d8], leaving only versions [0.0.1-0.0.3, 0.1.0-0.1.2, 0.2.0-0.2.3, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0]
     │ └─RigidBodySim [e61f16d8] log: see above
     └─restricted by compatibility requirements with MeshCatMechanisms [6ad125db] to versions: [0.2.1-0.2.3, 0.3.0, 0.4.0, 0.5.0, 0.6.0, 0.7.0]
       └─MeshCatMechanisms [6ad125db] log:
         ├─possible versions are: [0.0.1-0.0.6, 0.1.0-0.1.1, 0.2.0-0.2.1, 0.3.0, 0.4.0, 0.5.0] or uninstalled
         └─restricted to versions 0.1.1-* by RigidBodySim [e61f16d8], leaving only versions [0.1.1, 0.2.0-0.2.1, 0.3.0, 0.4.0, 0.5.0]
           └─RigidBodySim [e61f16d8] log: see above

@tkoolen
Copy link
Collaborator Author

tkoolen commented Sep 22, 2019

Thanks, Chris, that'll make it easy to fix on this end. FWIW, removing the Manifest.toml in my deved RigidBodySim and instantiateing works fine; probably a compatibility issue with Atom via WebIO. MeshCat is the web-based 3D viewer we use.

@sn3akyLynx
Copy link

I'm having the same issue as Chris, unable to install the package. Does this issue require a new commit or can I still use the current version somehow?

@tkoolen
Copy link
Collaborator Author

tkoolen commented Oct 2, 2019

@sn3akyLynx, are you also using Juno?

@sn3akyLynx
Copy link

@sn3akyLynx, are you also using Juno?

Yes, Atom with Juno. It has worked earlier.

@tkoolen
Copy link
Collaborator Author

tkoolen commented Oct 5, 2019

I personally think that Juno's design decision of installing its packages next to the user's packages is very unfortunate, as it can lead to these kinds of situations (I've complained about this before, see JunoLab/Juno.jl#265). However, I'll see what I can do on Sunday.

@tkoolen
Copy link
Collaborator Author

tkoolen commented Oct 6, 2019

@ChrisRackauckas, it turns out that the PeriodicController issue is due to the fact that callbacks passed into the ODEProblem constructor and those passed into solve are no longer merged into a CallbackSet (SciML/OrdinaryDiffEq.jl#919). What was the motivation for this change?

tkoolen added a commit that referenced this issue Oct 7, 2019
Pass GUI callback into `ODEProblem` ctor instead of into `solve`
function, since the callback passed into the `ODEProblem` ctor is now
simply replaced with the one passed into `solve`, instead of being
merged into a `CallbackSet` (SciML/OrdinaryDiffEq.jl#919).
tkoolen added a commit that referenced this issue Oct 7, 2019
@ChrisRackauckas
Copy link

It solved a bunch of requests with the ensemble system to allow for keyword arguments to be propagated if passed into the problem types. Since the callback handling wasn't actually documented, I searched out for any uses and didn't find any, so we made it line up with the other keyword arguments in the DiffEqBase 6.0 change. We should probably have all of the keyword arguments stored in the problems act similarly, but if we need a keyword argument to restore this behavior we can add it (and document it this time)

@tkoolen
Copy link
Collaborator Author

tkoolen commented Oct 7, 2019

Thanks. Although it conceptually makes sense to me to handle all keyword arguments the same, I think that having the problem's keyword arguments be silently overwritten by the solve keyword arguments (in general) has great potential to create some pretty subtle bugs. Disregarding consistency between keyword arguments for a second, I can't think of a case where overwriting the callback would be the desired behavior.

I'd personally treat all arguments the same, but with the consistent strategy of 'merge where it makes sense, error otherwise, never overwrite'. If that conflicts with the ensemble system requirements, I'd add an additional overwrite keyword argument to solve that defaults to false.

A new kwarg like additional_callback could also work, but it means that existing RigidBodySim users' code would (continue to) be broken, and would also mean that if the user retroactively wants to add a callback to the problem when they already have a solve callback, they have to remember to make changes in two places.

@ferrolho
Copy link
Member

I think I have run into this issue when I updated from SciML/[email protected] to SciML/[email protected]. It may be due to SciML/DiffEqCallbacks.jl#79.

Below is a minimal working example that is throwing the ERROR: Output of PeriodicController with Δt = X was last updated at Y, but current time is Z. and its output.

using RigidBodyDynamics
using RigidBodySim
mechanism = rand_chain_mechanism(Float64, [Revolute{Float64} for i = 1:8]...)
state = MechanismState(mechanism)
control! = (τ, t, state) -> τ .= 0.0
controller = PeriodicController(similar(velocity(state)), 0.01, control!)
dynamics = Dynamics(mechanism, controller)
tspan = (0.0, 5.0)
ode_problem = ODEProblem(dynamics, state, tspan)
sol = RigidBodySim.solve(ode_problem, Tsit5(), abstol = 1e-9)
ERROR: Output of PeriodicController with Δt = 0.01 was last updated at 0.06, but current time is 0.07.
Please ensure that an associated `PeriodicCallback` was passed into the `ODEProblem` constructor.
This is done automatically if the `ODEProblem` was created using a `Dynamics` object with the `PeriodicController` as the `control!` field,
but if a `PeriodicController` is called from some other control function, the callback needs to be created manually using
`PeriodicCallback(periodiccontroller)` and passed into the `ODEProblem` constructor as the `callback` keyword argument
(or use `CallbackSet` to combine the `PeriodicCallback` with any other callbacks you may have).

Stacktrace:
 [1] (::PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)})(::SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}}, ::Float64, ::MechanismState{Float64,Float64,Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1}}) at /home/henrique/.julia/packages/RigidBodySim/Beung/src/control.jl:149
 [2] (::Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"})(::Array{Float64,1}, ::Array{Float64,1}, ::Nothing, ::Float64) at /home/henrique/.julia/packages/RigidBodySim/Beung/src/core.jl:83
 [3] ODEFunction at /home/henrique/.julia/packages/DiffEqBase/A6T7i/src/diffeqfunction.jl:248 [inlined]
 [4] perform_step!(::OrdinaryDiffEq.ODEIntegrator{Tsit5,true,Array{Float64,1},Nothing,Float64,Nothing,Float64,Float64,Float64,Array{Array{Float64,1},1},DiffEqBase.ODESolution{Float64,2,Array{Array{Float64,1},1},Nothing,Nothing,Array{Float64,1},Array{Array{Array{Float64,1},1},1},ODEProblem{Array{Float64,1},Tuple{Float64,Float64},true,Nothing,DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Base.Iterators.Pairs{Symbol,CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}},Tuple{Symbol},NamedTuple{(:callback,),Tuple{CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}}}}},DiffEqBase.StandardODEProblem},Tsit5,OrdinaryDiffEq.InterpolationData{DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Array{Array{Float64,1},1},Array{Float64,1},Array{Array{Array{Float64,1},1},1},OrdinaryDiffEq.Tsit5Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}}},DiffEqBase.DEStats},DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},OrdinaryDiffEq.Tsit5Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}},OrdinaryDiffEq.DEOptions{Float64,Float64,Float64,Float64,typeof(DiffEqBase.ODE_DEFAULT_NORM),typeof(LinearAlgebra.opnorm),CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}},typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN),typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE),typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK),DataStructures.BinaryHeap{Float64,DataStructures.LessThan},DataStructures.BinaryHeap{Float64,DataStructures.LessThan},Nothing,Nothing,Int64,Array{Float64,1},Array{Float64,1},Array{Float64,1}},Array{Float64,1},Float64,Nothing,OrdinaryDiffEq.DefaultInit}, ::OrdinaryDiffEq.Tsit5Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}}, ::Bool) at /home/henrique/.julia/packages/OrdinaryDiffEq/wVdhu/src/perform_step/low_order_rk_perform_step.jl:641
 [5] perform_step! at /home/henrique/.julia/packages/OrdinaryDiffEq/wVdhu/src/perform_step/low_order_rk_perform_step.jl:628 [inlined]
 [6] solve!(::OrdinaryDiffEq.ODEIntegrator{Tsit5,true,Array{Float64,1},Nothing,Float64,Nothing,Float64,Float64,Float64,Array{Array{Float64,1},1},DiffEqBase.ODESolution{Float64,2,Array{Array{Float64,1},1},Nothing,Nothing,Array{Float64,1},Array{Array{Array{Float64,1},1},1},ODEProblem{Array{Float64,1},Tuple{Float64,Float64},true,Nothing,DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Base.Iterators.Pairs{Symbol,CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}},Tuple{Symbol},NamedTuple{(:callback,),Tuple{CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}}}}},DiffEqBase.StandardODEProblem},Tsit5,OrdinaryDiffEq.InterpolationData{DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Array{Array{Float64,1},1},Array{Float64,1},Array{Array{Array{Float64,1},1},1},OrdinaryDiffEq.Tsit5Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}}},DiffEqBase.DEStats},DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},OrdinaryDiffEq.Tsit5Cache{Array{Float64,1},Array{Float64,1},Array{Float64,1},OrdinaryDiffEq.Tsit5ConstantCache{Float64,Float64}},OrdinaryDiffEq.DEOptions{Float64,Float64,Float64,Float64,typeof(DiffEqBase.ODE_DEFAULT_NORM),typeof(LinearAlgebra.opnorm),CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}},typeof(DiffEqBase.ODE_DEFAULT_ISOUTOFDOMAIN),typeof(DiffEqBase.ODE_DEFAULT_PROG_MESSAGE),typeof(DiffEqBase.ODE_DEFAULT_UNSTABLE_CHECK),DataStructures.BinaryHeap{Float64,DataStructures.LessThan},DataStructures.BinaryHeap{Float64,DataStructures.LessThan},Nothing,Nothing,Int64,Array{Float64,1},Array{Float64,1},Array{Float64,1}},Array{Float64,1},Float64,Nothing,OrdinaryDiffEq.DefaultInit}) at /home/henrique/.julia/packages/OrdinaryDiffEq/wVdhu/src/solve.jl:424
 [7] #__solve#357 at /home/henrique/.julia/packages/OrdinaryDiffEq/wVdhu/src/solve.jl:5 [inlined]
 [8] solve_call(::ODEProblem{Array{Float64,1},Tuple{Float64,Float64},true,Nothing,DiffEqBase.ODEFunction{true,Dynamics{Float64,TypeSortedCollections.TypeSortedCollection{Tuple{Array{Joint{Float64,Revolute{Float64}},1}},1},PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)},RigidBodySim.Core.var"#2#4"},LinearAlgebra.UniformScaling{Bool},Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing},Base.Iterators.Pairs{Symbol,CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}},Tuple{Symbol},NamedTuple{(:callback,),Tuple{CallbackSet{Tuple{},Tuple{DiffEqBase.DiscreteCallback{DiffEqCallbacks.var"#40#43"{Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}},DiffEqCallbacks.var"#42#45"{RigidBodySim.Control.var"#3#5"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Bool,Float64,Base.RefValue{Float64},Base.RefValue{Int64},DiffEqCallbacks.var"#41#44"{RigidBodySim.Control.var"#4#6"{PeriodicController{SegmentedVector{JointID,Float64,Base.OneTo{JointID},Array{Float64,1}},Float64,var"#5#6",typeof(DiffEqBase.INITIALIZE_DEFAULT)}},Float64,Base.RefValue{Float64},Base.RefValue{Int64}}}}}}}}},DiffEqBase.StandardODEProblem}, ::Tsit5; merge_callbacks::Bool, kwargs::Base.Iterators.Pairs{Symbol,Float64,Tuple{Symbol},NamedTuple{(:abstol,),Tuple{Float64}}}) at /home/henrique/.julia/packages/DiffEqBase/A6T7i/src/solve.jl:60
 [9] #solve#449 at /home/henrique/.julia/packages/DiffEqBase/A6T7i/src/solve.jl:78 [inlined]
 [10] top-level scope at REPL[12]:1

For anyone who might run into this, my current dirty workaround is:

] add DiffEqCallbacks@2.13.0; pin DiffEqCallbacks

@ChrisRackauckas
Copy link

Thanks for the MWE. I can try and fix since it is my fault.

@ChrisRackauckas
Copy link

Fixed in #126

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants