pgorczak
pgorczak

Reputation: 131

Segfault when simulating control loop with second order system

Working from the tutorials I wanted to try PID-controlling a second order linear system. I'm running into segfaults when simulating the closed loop. I've put my code over on Gist. It is mostly identical to the example in the dynamical systems tutorial.

Here's what works

I'm sure I am missing something obvious here. Does anyone with more experience see what's wrong?

Upvotes: 0

Views: 68

Answers (2)

Sean Curtis
Sean Curtis

Reputation: 1883

I'm investigating this now -- I've also successfully reproduced the bug locally using the provided python, but I've also reproduced it directly in C++. [Reproduced in now defunct branch]

I'll update when I have something concrete.


Update 1: You've got an algebraic loop in these two systems (one that does not exist for the PendulumPlant as its derivatives and output are expressed in terms of its state and not its inputs). In this case, both systems' outputs depend directly on their inputs so, kablooie! The bug, in this case, is figuring out why that isn't communicated to you right up front.

Presumably, you'd also like to know what the right version of this program is that doesn't have an algebraic loop. Stay tuned.


Final update

A patch has gone through to correct the underlying bug. Depending on how you're accessing Drake, it's immediately available in master, or you can wait for the next binary (as to your taste).

Thanks for bringing this issue to our attention.

Upvotes: 1

Russ Tedrake
Russ Tedrake

Reputation: 5533

Thanks for reporting this. I didn't see anything on quick inspection. I ran your code (both on linux and mac) and was able to reproduce. Absolutely you should never see a silent segfault, so this is a real issue.

I've escalated it here: https://github.com/RobotLocomotion/drake/issues/12497

FTR - I've also opened a PR to improve the PidController documentation. https://github.com/robotlocomotion/drake/pull/12496

Upvotes: 1

Related Questions