isaac_manipulator_pick_and_place#

Source code available on GitHub.

Overview#

isaac_manipulator_pick_and_place is the ROS 2 package implementation of the multi-object Pick and Place workflow, built on top of the isaac_manipulator_orchestration behavior tree framework. This package provides the executable nodes, launch files, and configuration templates needed to run the system on your robot hardware.

Package Contents:

  • ROS 2 Action Server: /multi_object_pick_and_place for workflow execution

  • Launch Files: Complete system orchestration with configurable parameters

  • Configuration Templates: YAML files for behavior tree and blackboard setup

  • Behavior Tree Nodes: Custom nodes for manipulation-specific operations

  • Integration Layer: Interfaces with Isaac ROS perception and motion packages

Quickstart#

Set Up Development Environment#

  1. Set up your development environment by following the instructions in getting started.

  2. (Optional) Install dependencies for any sensors you want to use by following the sensor-specific guides.

    Note

    We strongly recommend installing all sensor dependencies before starting any quickstarts. Some sensor dependencies require restarting the development environment during installation, which will interrupt the quickstart process.

Build isaac_manipulator_pick_and_place#

  1. Activate the Isaac ROS environment:

    isaac-ros activate
    
  2. Install the prebuilt Debian package:

    sudo apt-get update
    
    sudo apt-get install -y ros-jazzy-isaac-manipulator-pick-and-place
    
  1. Clone this repository under ${ISAAC_ROS_WS}/src:

    cd ${ISAAC_ROS_WS}/src && \
       git clone --recursive -b release-4.0 https://github.com/NVIDIA-ISAAC-ROS/isaac_manipulator.git isaac_manipulator
    
  2. Activate the Isaac ROS environment:

    isaac-ros activate
    
  3. Use rosdep to install the package’s dependencies:

    sudo apt-get update
    
    rosdep update && rosdep install --from-paths ${ISAAC_ROS_WS}/src/isaac_manipulator/isaac_manipulator_pick_and_place --ignore-src -y
    
  4. Build the package from source:

    cd ${ISAAC_ROS_WS} && \
       colcon build --symlink-install --packages-up-to isaac_manipulator_pick_and_place
    

    Note

    The --symlink-install flag allows you to edit configuration files in place without rebuilding. Changes to Python scripts and config files will be immediately available after sourcing.

  5. Source the ROS workspace:

    Note

    Make sure to repeat this step in every terminal created inside the Isaac ROS environment.

    Because this package was built from source, the enclosing workspace must be sourced for ROS to be able to find the package’s contents.

    source install/setup.bash
    

Run Launch File#

  1. This quickstart focuses on running the orchestration system standalone for development and testing.

  2. Prepare configuration files:

    Set up configuration files and environment variables based on your installation method:

    Binary installations have read-only configuration files, so you must copy them to edit:

    # Set up configuration directory and copy files
    mkdir -p ${ISAAC_ROS_WS}/isaac_manipulator_config
    cp $(ros2 pkg prefix --share isaac_manipulator_pick_and_place)/params/multi_object_pick_and_place_behavior_tree_params.yaml \
       ${ISAAC_ROS_WS}/isaac_manipulator_config/multi_object_pick_and_place_behavior_tree_params.yaml
    cp $(ros2 pkg prefix --share isaac_manipulator_pick_and_place)/params/multi_object_pick_and_place_blackboard_params.yaml \
       ${ISAAC_ROS_WS}/isaac_manipulator_config/multi_object_pick_and_place_blackboard_params.yaml
    

    Files you’ll edit:

    • Behavior tree parameters: ${ISAAC_ROS_WS}/isaac_manipulator_config/multi_object_pick_and_place_behavior_tree_params.yaml

    • Blackboard parameters: ${ISAAC_ROS_WS}/isaac_manipulator_config/multi_object_pick_and_place_blackboard_params.yaml

    # Point to the directory containing your configuration files
    export ISAAC_MANIPULATOR_PICK_AND_PLACE_CONFIG_DIR="${ISAAC_ROS_WS}/isaac_manipulator_config"
    

    When building from source with --symlink-install, you can edit configuration files directly in the source directory. Changes take effect immediately after sourcing your workspace (no rebuild needed).

    Files you’ll edit:

    • Behavior tree parameters: ${ISAAC_ROS_WS}/src/isaac_manipulator/isaac_manipulator_pick_and_place/params/multi_object_pick_and_place_behavior_tree_params.yaml

    • Blackboard parameters: ${ISAAC_ROS_WS}/src/isaac_manipulator/isaac_manipulator_pick_and_place/params/multi_object_pick_and_place_blackboard_params.yaml

    # Point to the source directory containing the configuration files
    export ISAAC_MANIPULATOR_PICK_AND_PLACE_CONFIG_DIR="${ISAAC_ROS_WS}/src/isaac_manipulator/isaac_manipulator_pick_and_place/params"
    

    For detailed configuration instructions, see the Configuration Guide.

  3. Start the mock action servers and services for testing the orchestration logic:

    ros2 launch isaac_manipulator_orchestration mock_servers.launch.py
    

    Note

    These are dummy/mock servers that provide the expected action and service interfaces but do not perform actual object detection, pose estimation, motion planning, or gripper control. They are only for testing the behavior tree orchestration logic.

  4. (Optional) For interactive debugging and visualization:

    py-trees-tree-viewer
    

    Note

    The py-trees-tree-viewer is a Qt-based graphical tool that provides real-time tree visualization, timeline replay, and blackboard inspection.

  5. Launch the orchestration system:

    ros2 launch isaac_manipulator_pick_and_place orchestration.launch.py \
       behavior_tree_config_file:=${ISAAC_MANIPULATOR_PICK_AND_PLACE_CONFIG_DIR}/multi_object_pick_and_place_behavior_tree_params.yaml \
       blackboard_config_file:=${ISAAC_MANIPULATOR_PICK_AND_PLACE_CONFIG_DIR}/multi_object_pick_and_place_blackboard_params.yaml \
       print_ascii_tree:=false
    
  6. Send an action goal to test the behavior tree execution:

    # Test with single bin mode
    ros2 action send_goal --feedback /multi_object_pick_and_place isaac_manipulator_interfaces/action/MultiObjectPickAndPlace \
      '{target_poses: {header: {frame_id: "base_link"}, poses: [{position: {x: -0.25, y: 0.45, z: 0.50}, orientation: {w: 0.017994, x: -0.677772, y: 0.734752, z: 0.020993}}]}, class_ids: [], mode: 0}'
    

    The behavior tree will execute with mock responses, allowing you to observe the orchestration logic and debug your configuration.

API and Configuration#

Related Resources:

Integration#

This package integrates with the broader Isaac for Manipulation ecosystem and requires the following dependencies:

  • isaac_manipulator_orchestration: Behavior tree framework and shared behaviors

  • isaac_manipulator_servers: Action servers for perception and motion

  • isaac_manipulator_bringup: Complete system launch files