Skip to main content

marinholab-sas-core

Python bindings for the ROS-free SmartArmStack C++ core.

This repository wraps MarinhoLab/sas_cpp (the pure-C++ part of SmartArmStack/sas_core) with pybind11, exposing it to Python as the marinholab.sas.core package.

More information about SmartArmStack is available in smartarmstack.github.io.

Contents

  • marinholab/sas/core/ — the Python package.
    • _core.* — compiled pybind11 extension (the C++ bindings live in src/).
    • modeling/ — kinematic modeling bindings (re-exported from _core).
    • example_*.py — example scripts (also installed as commands).
  • src/ — the C++ binding sources (ported from SmartArmStack/sas_core).
  • submodules/sas_cpp — the C++ core (git submodule, consumed via CMake).
  • submodules/pybind11 — pybind11 (git submodule, pinned to v3.0.4).
  • docker/ — ubuntu:noble build environment and full test pipeline.

The C++ core depends on Eigen3 and dqrobotics (the latter is located by CMake at build time; on Debian/Ubuntu it comes from the DQ Robotics PPA). The Python package additionally depends on the dqrobotics Python package, which registers the dual-quaternion types the bindings expose.

Installation

From source:

git clone --recursive https://github.com/MarinhoLab/sas_py.git
cd sas_py
pip install . --no-build-isolation

Building requires cmake (>= 3.16), ninja, a C++17 compiler, Eigen3, and dqrobotics. On Debian/Ubuntu:

sudo apt install build-essential g++ cmake ninja-build python3-dev libeigen3-dev
# dqrobotics from the DQ Robotics PPA:
sudo add-apt-repository -y ppa:dqrobotics-dev/development
sudo apt install libdqrobotics

Usage

from marinholab.sas.core import (
    Clock,
    Statistics,
    RobotDriver,
    ShutdownSignaler,
)

# High-resolution sampling clock
clock = Clock(0.01)          # 10 ms sampling period
clock.init()
for _ in range(100):
    clock.update_and_sleep()
print(clock.get_statistics(Statistics.Mean, Clock.TimeType.Computational))

# Subclass RobotDriver to drive hardware
class MyDriver(RobotDriver):
    def __init__(self, ss):
        super().__init__(ss)
    def get_joint_positions(self):
        return np.zeros(6)
    def set_target_joint_positions(self, target):
        ...
    def connect(self):
        ...
    def disconnect(self):
        ...
    def initialize(self):
        ...
    def deinitialize(self):
        ...

Kinematic modeling

import numpy as np
from dqrobotics import DQ
from marinholab.sas.core import SerialManipulatorSimulatorFriendly

# 3 revolute joints about X, Y, Z with zero per-joint offsets.
arm = SerialManipulatorSimulatorFriendly(
    offset_before=[DQ(1), DQ(1), DQ(1)],
    offset_after=[DQ(1), DQ(1), DQ(1)],
    actuation_types=[
        SerialManipulatorSimulatorFriendly.ActuationType.RX,
        SerialManipulatorSimulatorFriendly.ActuationType.RY,
        SerialManipulatorSimulatorFriendly.ActuationType.RZ,
    ],
)
q = np.array([0.1, -0.2, 0.3])
x = arm.raw_fkm(q, 2)                 # dual-quaternion pose of the end-effector
J = arm.raw_pose_jacobian(q, 2)       # 8 x 3 pose Jacobian

The examples are installed as commands:

  • sas_core_clock_example — a 10 ms Clock with timing statistics.
  • sas_core_clock_sched_fifo_example — a 1 ms Clock under SCHED_FIFO.
  • sas_core_robot_driver_subclass_example — subclass RobotDriver in Python and exercise the trampoline (connect / initialize / targets / limits).

Versioning

The version is computed from git tags at build time by setuptools-git-versioning. A monthly version tag of the form YY.MM (e.g. 26.09) plus the number of commits since that tag yields a rolling YY.MM.NN version (e.g. 26.09.3), mirroring MarinhoLab/sas_cpp. An untagged checkout builds as 0.0.1 (a development version).

Testing

A full build + test pipeline runs in an ubuntu:noble container:

cd docker
docker compose run --rm marinholab_sas_core

License

See LICENSE for details (LGPLv3).

Metadata

Release files for marinholab-sas-core 26.9.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for marinholab-sas-core 26.9.6
File
marinholab_sas_core-26.9.6-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.39+ x86-64 Details
marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.39+ ARM64 Details
marinholab_sas_core-26.9.6-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.39+ x86-64 Details
marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.39+ ARM64 Details
marinholab_sas_core-26.9.6-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.39+ x86-64 Details
marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.39+ ARM64 Details

Total release size: 94.1 MB

Release files / marinholab_sas_core-26.9.6-cp312-cp312-win_amd64.whl

Download URL marinholab_sas_core-26.9.6-cp312-cp312-win_amd64.whl
Size 184.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9fe8975e53fac0fb8999564b26748eb79fb217e4419257bced3271a30746b759
BLAKE2b-256 checksum
How to use checksums
8931b2f413e5624998bed0c449d734db5ec191f5bca33b26bde99158ae0e74c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_x86_64.whl

Download URL marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_x86_64.whl
Size 15.7 MB
Tags CPython 3.12 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
158a2704f73447d0282b2ea735ea2381128ddfd60264db9595a54cbc67c3784b
BLAKE2b-256 checksum
How to use checksums
71ea9b99ea08bc8c004de0b3c6b4ee47b493585d0a852902674866e3ad689c31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_aarch64.whl

Download URL marinholab_sas_core-26.9.6-cp312-cp312-manylinux_2_39_aarch64.whl
Size 15.5 MB
Tags CPython 3.12 Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
91ff8fc70fbfad87ebecd7a87a490feb829715933ac4afbfaf2d771df3cc3afe
BLAKE2b-256 checksum
How to use checksums
674a855f625934614809e5544598fa71260689f16b87a8f816c267cf4ceb95b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp311-cp311-win_amd64.whl

Download URL marinholab_sas_core-26.9.6-cp311-cp311-win_amd64.whl
Size 181.1 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
25db0ec6f99434c9313d5d409a17f9121aa18120d822448c4f5c9422d653fd37
BLAKE2b-256 checksum
How to use checksums
84217be008e7848695e300afa09417e745d2175929229d2bc46dda7965fbcebb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_x86_64.whl

Download URL marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_x86_64.whl
Size 15.7 MB
Tags CPython 3.11 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
02f1118bd28daac310f65a067ffa9b4d25df3414232d60c9c9c5a91052de43a1
BLAKE2b-256 checksum
How to use checksums
5f515bab065e2b50780958ea38c1db155566b084c96fec79b663e0555bcbad30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_aarch64.whl

Download URL marinholab_sas_core-26.9.6-cp311-cp311-manylinux_2_39_aarch64.whl
Size 15.5 MB
Tags CPython 3.11 Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
5f93ee11246837790279c8d150be9fe56d9230ad69b111674196a7f1c176a0ec
BLAKE2b-256 checksum
How to use checksums
72fcc47d4b28c53f5f6f89debaff971f99e3c27cea34192af1afbbb059d051c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp310-cp310-win_amd64.whl

Download URL marinholab_sas_core-26.9.6-cp310-cp310-win_amd64.whl
Size 178.2 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
8c7d0eafb87bf2697828ef184848a367f0682bc964a0a689a06a641597915a42
BLAKE2b-256 checksum
How to use checksums
24b35292c12499733a12240d513595e6149a32d3aafb82ea61b7f416b68f10ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_x86_64.whl

Download URL marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_x86_64.whl
Size 15.7 MB
Tags CPython 3.10 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
950f411a73c26d011c7542d4c9c0326ec6d6f969c7a84839f91497df99011b79
BLAKE2b-256 checksum
How to use checksums
b96ee9e3387770ec58aad3fdd668e79bbf843d4640bb607b85dec6289ac79e3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_aarch64.whl

Download URL marinholab_sas_core-26.9.6-cp310-cp310-manylinux_2_39_aarch64.whl
Size 15.5 MB
Tags CPython 3.10 Linux glibc 2.39+ ARM64
SHA-256 checksum
How to use checksums
98b308b33ddc04a97995106fe28d7b9996892709e7532c468ff54816a3a4468f
BLAKE2b-256 checksum
How to use checksums
9f37913f8546220d251e99b66a08f6af3a235659100c0eceff4aaf17030f4008
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

26.9.8

9 release files

This release

26.9.6 This release

9 release files

26.9.5

9 release files

26.9.4

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page