301 - Permanently moved to the eagletrt's organization
From a CAN and/or GPS log, simulates the contained messages into the local environment @eagletrt.
This project is an npm package made for the telemetry of eagletrt. The telemetry consists in a c program located in a Raspberry Pi and attached to the canbus of the car and to a rover-gps. Its job is reading all the sensors messages, forwarding them via mqtt and saving them in a local mongodb database. Some can and gps raw logs are also saved by the telemetry. The purpose of this project is having a tool that given those raw logs, reproduces them in the local environment, especially for testing purposes.
This project was made with typescript and consists in an npm module that can be used also globally, as a terminal command. It is linted with eslint, bundled with webpack, documented with typedoc and checked by some github actions.
The library gets as inputs a can and/or gps raw log. It is very highly conigurable, but roughly what it does is reading those files and reproducing the events it reads, by emitting events in the CANbus (virtual or real) and USB virtual serial ports.
This module can be actually used both as a local and as a global npm module.
Install the module executing:
$ npm install --save @eagletrt/telemetria-simulatorVirtualize a can interface
const telemetriaSimulator = require('@eagletrt/telemetria-simulator');
async function main() {
await telemetriaSimulator.virtualizeCan('vcan0', { silent: true });
}
main();Simulate from a CAN log
const telemetriaSimulator = require('@eagletrt/telemetria-simulator');
async function main() {
const canSimulatorInstance = await simulateCan('./can.log', {
iterations: 100,
silent: true,
canInterface: 'vcan0'
});
await canSimulatorInstance.waitUntilFinished();
}
main();Simulate from a GPS log
const telemetriaSimulator = require('@eagletrt/telemetria-simulator');
async function main() {
const gpsSimulatorInstance = await simulateGps('./gps.ubx', {
iterations: 100,
silent: true,
simulateTime: true,
delay: 230
});
console.log(await gpsSimulatorInstance.getGpsInterface());
await gpsSimulatorInstance.waitUntilFinished();
}
main();To see all the options, refer to the api.
Install the module with:
$ npm install -g @eagletrt/telemetria-simulatorExecuting:
$ eagletrt-simulator virtualize can
$ eagletrt-simulator simulate can
$ eagletrt-simulator simulate gps
$ eagletrt-simulator simulate allWill have the same results as the examples with the local module.
The options are almost the same as in the api of the local module. To see all the cli options, run:
$ eagletrt-simulator --helpSyntax:
virtualizeCan(canInterface, options)
Description:
Virtualizes a canbus interface.
Parameters:
- canInterface: The name of the interface that is to be virtualized. It is a
stringand the default value iscan0. - options: The VirtualizeCanOptions passed to customize the behaviour.
Returns:
It returns a promise to the string virtualized if it is succesfully virtualized or already_virtualized if it were already virtualized.
Options:
- silent: Default value
false. If true, the log will not be shown.
Syntax:
simulateCan(src, options)
Description:
Simulates some data sent via a virtualized canbus interface. The data comes from a can log, that can be obtained through tools such as candump.
Parameters:
- src: The path to the can log file containing the messages that will be sent over the virtualized canbus. The default value is a can log file already stored in this npm package. If some options are wanted to be specified, but also using the default src file, use null as this value.
- options: The SimulateCanOptions passed to customize the behaviour.
Returns:
It returns a promise to a CanSimulatorInstance that can be used to wait until the simulation is finished.
Options:
- canInterface: The name of the interface that is to be virtualized. It is a
stringand the default value iscan0. - iterations: The number of times that the can log file will be sent over the can. It is a
numberand the default value isInfinity. - silent: If true, the log will not be shown. It is a
booleanand the default value istrue. - simulateTime: If the delta timestamps specified for each message in the can log file will be taken in consideration and simulated. It is a
booleanand the default value istrue.
Methods of the returned instance
- stop(): Stops the process if it has not already finished. It returns a promise to
void. - waitUntilFinished(timeout?: null | number): Waits until the can simulator has finished or an optional-specified timeout (in milliseconds) has expired. It returns a promise to a
booleanwhich is true if the simulator has finished and false otherwise.
Syntax:
simulateGps(src, options)
Description:
Simulates some data sent via a virtualized gps serial port. The data comes from a gps ubx log.
Parameters:
- src: The path to the gps log file containing the messages that will be sent over the virtualized serial port. The default value is a gps log file already stored in this npm package. If some options are wanted to be specified, but also using the default src file, use null as this value.
- options: The SimulateGpsOptions passed to customize the behaviour.
Returns:
It returns a promise to a GpsSimulatorInstance that can be used to wait until the simulation is finished.
Options:
- delay: The number of milliseconds that the gps simulator will wait after opening the gps pseudoterminal port interface and before sending the messages over that interface. It is a
numberand the default value is0. - iterations: The number of times that the gps ubx log file will be sent over the serial port. It is a
numberand the default value isInfinity. - keepAlive: If true, the process will be kept alive after having sent all the simulated gps data. It is a
booleanand the default value isfalse. - silent: If true, the log will not be shown. It is a
booleanand the default value istrue. - simulateTime: If the delta timestamps specified for each message in the gps ubx log file will be taken in consideration and simulated. It is a
booleanand the default value istrue.
Methods of the returned instance
- getGpsInterface(): Returns the gps interface if it is already defined, or waits for the gps simulator output to print it and returns it after detecting that output. It returns a promise to a
string. - stop(): Stops the process if it has not already finished. It returns a promise to
void. - waitUntilFinished(timeout?: null | number): Waits until the gps simulator has finished or an optional-specified timeout (in milliseconds) has expired. It returns a promise to a
booleanwhich is true if the simulator has finished and false otherwise.
This module was used in the telemetry sender repo of eagletrt. It is also included in the eagle-cli.
Note that this module uses yargs for the cli and the yargs commands and options are modular: this means that they can be imported and used by other modules that consists in a cli and wrap this library, such as the eagle-cli.
The GPS simulator is written in C and compiled during installation. If this does not happen, there is a script in the package.json exactly to do it. The C program is valid only on Linux.
A default can log and a default gps log are already included in this package.
To build for production, using webpack:
npm run bundle