Skip to main content

Python package for interfacing with robot data

Project description

robotdatapy

Welcome to robotdatapy! At its core, robotdatapy is a package designed to make accessing and manipulating robot/geometric data easy in Python.

annotated_point_cloud

Install

robotdatapy is available via PyPi! To install:

pip install robotdatapy

Or to install the most recent version:

git clone git@github.com:mbpeterson70/robotdatapy.git
cd robotdatapy
pip install .

Tutorial

The best way to get familiar with robotdatapy is through the introductory tutorial, accessible here.

Data Interfaces

The primary use of this package is for interfacing with robot data. When developing offline robot applications, it can be difficult to deal with all of the different ways that data can be saved in (ROS bags, csv files, individual images, etc.). The goal of this package is to provide classes for loading data from a variety of sources, enabling a downstream task to use these data interfaces without needing to account for where that data is coming from.

Additionally, when dealing with offline data, a user may want to get a camera image at a certain time as well as a robot pose estimate at that same time. However, pose estimates are often discrete and may not be synced with the camera image. This package provides a way of dealing with time synchronization between data via interpolation or finding the nearest datapoint to a requested timestamp.

This README briefly describes three robot data classes: PoseData, ImgData, PointCloudData, and ArrayData. See the examples folder for example Python notebooks of interacting with different robot data.

PoseData

PoseData can load pose information from ROS1/2 bags, csv files, KITTI, or directly from a set of times and poses. Interpolation between poses is enabled by default, making it easy to get positions and orientations of a robot body at any time. Additionally, a transformation can be specified to be pre-multiplied or post-multiplied (via the T_premultiply or T_postmultiply keyword argument) changing the reference frame given by the PoseData object.

To quickly plot the trajectory of a robot for example, you can run the following:

import robotdatapy as rdp

bag_path = <path to bag>
topic = <Odometry or Pose msg>
pose_data = rdp.data.PoseData.from_bag(bag_path, topic=topic, interp=True)

pose_data.plot2d(dt=1.0, trajectory=True, pose=False)     # plots only position every second
pose_data.plot2d(dt=5.0, trajectory=False, pose=True)     # plots coordinate frames of the poses every 5 seconds

trajectory_plot

ImgData

ImgData can be loaded from ROS1/2 bags, a zipped file of images, a numpy npz files of times and images, or directly from a list of times and cv images. Depth images are supported as well.

Here's an example of loading and viewing an image from a ROS bag:

import robotdatapy as rdp

img_data = rdp.data.ImgData.from_bag(
    bag_path,
    topic=<camera image topic>
    compressed=True # tells the loader that the images are ROS CompressedImage messages
)

img_data.show(img_data.t0) # shows the first image

PointCloudData

PointCloudData can be loaded from ROS1/2 bags. Tools exist in robotdatapy to make transforming points or projecting points onto a camera image easy.

import robotdatapy as rdp

ptcld_data = rdp.data.PointCloudData.from_bag(
    <ROS bag path>,
    topic=<ROS point cloud topic>,
)

ArrayData

This class can be used for storing generic data. For example, discrete samples of position, velocity, and acceleration. Linear interpolation can be turned on to enable accessing this data at any time.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

robotdatapy-1.1.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

robotdatapy-1.1.1-py3-none-any.whl (43.9 kB view details)

Uploaded Python 3

File details

Details for the file robotdatapy-1.1.1.tar.gz.

File metadata

  • Download URL: robotdatapy-1.1.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for robotdatapy-1.1.1.tar.gz
Algorithm Hash digest
SHA256 fce4b11b458714c1c71e890ae3cb2419f1b9341ebd111842f66f3baccaf73b58
MD5 af6c3c68b79ad85ccd0129826a374b6f
BLAKE2b-256 1faea5024933babcf4ef91a7bc425808454aa5cb5e653a8d21dedd9400ac06d4

See more details on using hashes here.

File details

Details for the file robotdatapy-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: robotdatapy-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 43.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for robotdatapy-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eadded44f4114933c8448228f4e35e5d87520b397f7fd8ced6b242d010aae0a0
MD5 22431228fa4104070b9ee515bc649dec
BLAKE2b-256 ab31592273db0cd026b2ac6dbba07786e6289274fedae278e8c8655a5d26f1e4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page