78 lines
1.7 KiB
Markdown
78 lines
1.7 KiB
Markdown
|
|
# node-pid-controller
|
||
|
|
|
||
|
|
Simple Node.js PID controller.
|
||
|
|
|
||
|
|

|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
```
|
||
|
|
$ npm install node-pid-controller
|
||
|
|
```
|
||
|
|
|
||
|
|
## Example
|
||
|
|
|
||
|
|
Let's take the example of a car cruise control. We want the car driving at 120km/h.
|
||
|
|
|
||
|
|
### Create a Controller instance
|
||
|
|
|
||
|
|
`k_p`, `k_i` and `k_d` are the proportional, integral and derivative terms. `dt` is the interval of time between two measures. If not set, it will be automatically calculated.
|
||
|
|
|
||
|
|
```js
|
||
|
|
var Controller = require('node-pid-controller');
|
||
|
|
|
||
|
|
var ctr = new Controller({
|
||
|
|
k_p: 0.25,
|
||
|
|
k_i: 0.01,
|
||
|
|
k_d: 0.01,
|
||
|
|
dt: 1
|
||
|
|
});
|
||
|
|
```
|
||
|
|
|
||
|
|
You can also pass options as arguments:
|
||
|
|
```js
|
||
|
|
var ctr = new Controller(0.25, 0.01, 0.01, 1); // k_p, k_i, k_d, dt
|
||
|
|
```
|
||
|
|
|
||
|
|
### Set the target
|
||
|
|
|
||
|
|
```js
|
||
|
|
ctr.setTarget(120); // 120km/h
|
||
|
|
```
|
||
|
|
|
||
|
|
### Get the correction
|
||
|
|
|
||
|
|
```js
|
||
|
|
var correction = ctr.update(110); // 110km/h is the current speed
|
||
|
|
```
|
||
|
|
|
||
|
|
### Real example
|
||
|
|
|
||
|
|
Normally, you use the correction to a measure, in a closed loop.
|
||
|
|
|
||
|
|
```js
|
||
|
|
var goalReached = false
|
||
|
|
while (!goalReached) {
|
||
|
|
var output = measureFromSomeSensor();
|
||
|
|
var input = ctr.update(output);
|
||
|
|
applyInputToActuator(input);
|
||
|
|
goalReached = (input === 0) ? true : false; // in the case of continuous control, you let this variable 'false'
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Options
|
||
|
|
|
||
|
|
* `k_p`, `k_i`, `k_d`: the PID's coefficients
|
||
|
|
* `dt`: interval of time (in seconds) between two measures. If not provided, it will be automatically calculated.
|
||
|
|
* `i_max`: the maximum absolute value of the integral term (optional)
|
||
|
|
|
||
|
|
## Test
|
||
|
|
|
||
|
|
```js
|
||
|
|
mocha test
|
||
|
|
```
|
||
|
|
|
||
|
|
## Author
|
||
|
|
|
||
|
|
Philmod <philippe.modard@gmail.com>
|