Skip to main content

Python binding of the OctoMap library.

Project description

octomap-ros

Python binding of the OctoMap library for ROS (Robot Operating System).

Installation

ROS Humble Integration

To use OctoMap with ROS Humble, install the following ROS packages:

sudo apt-get install ros-humble-octomap ros-humble-octomap-mapping ros-humble-octomap-server

These packages provide the necessary ROS integration for OctoMap:

  • ros-humble-octomap: Core OctoMap library for ROS
  • ros-humble-octomap-mapping: Provides mapping capabilities using OctoMap
  • ros-humble-octomap-server: Offers a ROS server for OctoMap, allowing you to save, load, and publish OctoMaps

Python Package

Install octomap-ros directly from PyPI:

pip install octomap-ros

Prerequisites:

  • Python development headers: sudo apt-get install python3-dev
  • C++ compiler: sudo apt-get install build-essential
  • CMake: sudo apt-get install cmake

ROS Humble Usage

Here's a basic example of how to use OctoMap with ROS Humble:

import rclpy
from rclpy.node import Node
from octomap_msgs.msg import Octomap
import octomap

class OctomapProcessor(Node):
    def __init__(self):
        super().__init__('octomap_processor')
        self.subscription = self.create_subscription(
            Octomap,
            '/octomap_binary',
            self.octomap_callback,
            10)
        self.octree = octomap.OcTree(0.1)  # 0.1 is the resolution

    def octomap_callback(self, msg):
        # Convert ROS message to OcTree
        tree = octomap.OcTree.from_msg(msg)
    
        # Process the OcTree
        for node in tree.iterator():
            if tree.isNodeOccupied(node):
                # Process occupied nodes
                coord = node.getCoordinate()
                print(f"Occupied node at {coord.x()}, {coord.y()}, {coord.z()}")

        # You can also update your own OcTree
        self.octree.insertPointCloud(tree.getPointCloud(), octomap.point3d(0, 0, 0))

def main(args=None):
    rclpy.init(args=args)
    octomap_processor = OctomapProcessor()
    rclpy.spin(octomap_processor)
    octomap_processor.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

This example demonstrates how to:

  1. Subscribe to the /octomap_binary topic
  2. Process incoming OctoMap messages
  3. Convert ROS messages to OcTree objects
  4. Iterate through occupied nodes in the OcTree
  5. Update a local OcTree with new data

To run the OctoMap server and visualize the data:

# Run the octomap server
ros2 run octomap_server octomap_server_node

# In another terminal, run your OctoMap processor
python3 your_octomap_processor.py

# View the OctoMap in RViz
ros2 run rviz2 rviz2

Configure RViz to display the OctoMap by adding an OccupancyGrid or MarkerArray display and setting the appropriate topic (usually /octomap_binary or /octomap_full).

Acknowledgement

This package is based on wkentaro/octomap-python and neka-nat/python-octomap, adapted for ROS integration.

License

octomap-ros is licensed under the BSD License. See the LICENSE file for details.

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

octomap_ros-1.8.0.post16.tar.gz (2.5 MB view details)

Uploaded Source

File details

Details for the file octomap_ros-1.8.0.post16.tar.gz.

File metadata

  • Download URL: octomap_ros-1.8.0.post16.tar.gz
  • Upload date:
  • Size: 2.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for octomap_ros-1.8.0.post16.tar.gz
Algorithm Hash digest
SHA256 319876e8665ec7f6877d34290ac99fb6798ed4ee4ca39ae9163687587587b3b7
MD5 2e4cd6f9bf03f786a9c8ddf448fa849e
BLAKE2b-256 82b3b6f23f033cfb67a67bca005570dee54b8c893a879d188e37ee9a82b78884

See more details on using hashes here.

Supported by

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