npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

signalk-attitude-calibrator

v0.7.1

Published

SignalK plugin that applies configurable pitch, roll and yaw offsets (in radians) to navigation.attitude. Supports source filtering and publishes calibrated values as a distinct source to preserve the original data.

Downloads

547

Readme

signalk-attitude-calibrator

SignalK plugin that applies fixed offsets (in radians) to navigation.attitude pitch, roll and yaw values.

The calibrated values are republished on navigation.attitude with the plugin as source, so both the original and calibrated values coexist in SignalK with distinct sources.

A feedback loop guard prevents the plugin from processing its own output. On Signal K servers that support subscription excludeSelf, the preferred-source mode also asks the server to exclude this plugin from the preferred-source cascade so the original preferred attitude source can still be calibrated after the plugin republishes on the same path.

Configuration

The full calibration workflow is available in Apps → Attitude Calibrator. The plugin configuration panel also displays the webapp path and remains available as a manual fallback.

| Option | Description | Default | |--------|-------------|---------| | Source mode | Choose between all sources, the preferred source only, or a specific source. | All sources | | Specific source | Full source identifier as shown in the Data Browser. Only shown and used when Source mode is Specific source. | (empty) | | Pitch offset (rad) | Value added to pitch. Positive = bow up. | 0 | | Roll offset (rad) | Value added to roll. Positive = starboard down. | 0 | | Yaw offset (rad) | Value added to yaw. | 0 |

How it works

At each update received on navigation.attitude:

  1. The source label is checked — updates from the plugin itself are ignored (anti-loop guard)
  2. If Source mode is Specific source, the subscription listens to all sources and updates from other sources are skipped
  3. The offsets are applied: calibrated = source_value + offset
  4. The result is published on navigation.attitude with source.label = signalk-attitude-calibrator

Source mode controls the subscription:

  • All sources: subscribe with sourcePolicy: 'all'
  • Preferred source only: subscribe with sourcePolicy: 'preferred' and excludeSelf: true
  • Specific source: subscribe with sourcePolicy: 'all', then filter updates by $source

Specific source keeps sourcePolicy: 'all' intentionally: the selected source may not be the Signal K preferred source. The plugin still ignores its own output manually, which preserves loop protection on older Signal K servers that do not understand excludeSelf; on those servers, preferred-source mode may not benefit from the server-side cascade exclusion.

Units

All offsets are in radians. The plugin declares units: rad metadata for navigation.attitude.pitch, .roll and .yaw at startup.

Typical use case

Chain with signalk-attitude-converter to expose calibrated individual paths:

  1. signalk-attitude-calibrator — subscribes to navigation.attitude from your sensor source, applies offsets, republishes as signalk-attitude-calibrator
  2. signalk-attitude-converter (mode object-to-values, source filter = signalk-attitude-calibrator) — splits the calibrated object into individual pitch, roll, yaw paths

Calibration webapp

The plugin includes a small Signal K webapp. Open Apps → Attitude Calibrator to monitor:

  • the raw navigation.attitude sample received by the plugin
  • the configured pitch, roll and yaw offsets
  • the calibrated navigation.attitude value published by the plugin
  • the configured source mode and source currently used by the plugin

Values are shown in radians and degrees. When the vessel is in its reference attitude, use:

  • Zero pitch to set pitchOffset = -current pitch
  • Zero roll to set rollOffset = -current roll
  • Zero pitch + roll to set both at the same time

The webapp writes the new offsets through the plugin API using Signal K plugin options, so changes are applied immediately and persisted for the next restart when the server supports savePluginOptions.

The webapp also lists observed navigation.attitude sources and can save the plugin source mode:

  • All sources
  • Preferred source only
  • Specific source

When Specific source is selected, choose one of the observed sources instead of copying the $source string manually.

Webapp API

The webapp uses these plugin routes:

  • GET /plugins/signalk-attitude-calibrator/api/state
  • PUT /plugins/signalk-attitude-calibrator/api/source
  • PUT /plugins/signalk-attitude-calibrator/api/offsets
  • POST /plugins/signalk-attitude-calibrator/api/zero

Installation

npm install --prefix ~/.signalk signalk-attitude-calibrator

Restart SignalK after installation, then configure via Server → Plugin Config → Attitude Calibrator.

Changelog

See CHANGELOG.md.

License

MIT — Jean-Laurent Girod