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.corepackage.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 insrc/).modeling/— kinematic modeling bindings (re-exported from_core).example_*.py— example scripts (also installed as commands).
src/— the C++ binding sources (ported fromSmartArmStack/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:noblebuild 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 msClockwith timing statistics.sas_core_clock_sched_fifo_example— a 1 msClockunderSCHED_FIFO.sas_core_robot_driver_subclass_example— subclassRobotDriverin 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)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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