Python Scanse Sweep LiDAR library. Work with Python2 and Python3.
Requires libsweep.so to be installed.
Install sweeppy module for Python3 locally:
python3 setup.py install --userIn the following, replace /dev/ttyUSB0 with your device's port name. This executes __main__.py (also works without the installation step).
python -m sweeppy /dev/ttyUSB0See app.py for the common use-case where you have to coordinate between scanning and your app's work:
- we start a producer thread putting scans from the Sweep device into a shared queue (non-blocking)
- we start a consumer thread pulling scans out of the shared queue and doing work on them (blocking)
- we use a third thread to set off a stop event and cleanly shutdown the pipeline
The installed sweep library architecture must match the python version. Ie: if you are using a x86 (32bit) version of python, you must install the x86 (32bit) verison of libsweep.
python.exe setup.py install --userIn the following: replace COM5 with your device's port name (check "Device Manager -> COM Ports").
python.exe -m sweeppy COM5from sweeppy import Sweep
with Sweep('/dev/ttyUSB0') as sweep:
sweep.start_scanning()
for scan in sweep.get_scans():
print('{}\n'.format(scan))Note: Sweep objects need to be scoped using the with statement for resource management.
See sweeppy.py for interface and example for example usage.
class Sweep:
def __init__(self, port, bitrate = None) -> Sweep
def start_scanning(self) -> None
def stop_scanning(self) -> None
def get_motor_ready(self) -> bool
def get_motor_speed(self) -> int (Hz)
def set_motor_speed(self, speed) -> None
def get_sample_rate(self) -> int (Hz)
def set_sample_rate(self, speed) -> None
def get_scans(self) -> Iterable[Scan]
def reset(self) -> None
class Scan:
self.samples -> Sample
class Sample:
self.angle -> int (milli-degree)
self.distance -> int (cm)
self.signal_strength -> int ([0:255])
See the libsweep README for a description of how to use a related interface.
Additionally, it is recommended that you read through the sweep Theory of Operation and Best Practices.
sample.angleThe sample's angle (azimuth) represents the rotation of the sensor when the range measurment was taken. The value is reported in milli-degrees, or 1/1000 of a degree. For example, a sample.angle value of 180000 milli-degrees equates to 180 degrees (half of a complete rotation). Successive samples of the same scan will have increasing angles in the range 0-360000.
sample.distanceThe sample's distance is the range measurement (in cm).
sample.distanceThe sample's signal strength is the strength or confidence of the range measurement. The value is reported in the range 0-255, where larger values are better.
Copyright © 2016 Daniel J. Hofmann
Distributed under the MIT License (MIT).