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 ROSros-humble-octomap-mapping
: Provides mapping capabilities using OctoMapros-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:
- Subscribe to the
/octomap_binary
topic - Process incoming OctoMap messages
- Convert ROS messages to OcTree objects
- Iterate through occupied nodes in the OcTree
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.