From ProventusNova DeveloperWiki
Revision as of 00:31, 5 February 2026 by Andres (talk | contribs) (Created page with "__TOC__ == Project Overview: Symbolic AI Planning on NVIDIA Jetson == This project demonstrates the implementation of '''Symbolic AI Planning''' on an NVIDIA Jetson (ARM64) using '''PDDL''' (Planning Domain Definition Language). Unlike traditional machine learning, this approach focuses on deterministic logic and reasoning to solve complex multi-step tasks. === ๐Ÿ› ๏ธ Environment Setup === Because the Jetson uses an ARM64 architecture, traditional x86 planners (like...")
(diff) โ† Older revision | Latest revision (diff) | Newer revision โ†’ (diff)

Project Overview: Symbolic AI Planning on NVIDIA Jetson

This project demonstrates the implementation of Symbolic AI Planning on an NVIDIA Jetson (ARM64) using PDDL (Planning Domain Definition Language). Unlike traditional machine learning, this approach focuses on deterministic logic and reasoning to solve complex multi-step tasks.

๐Ÿ› ๏ธ Environment Setup

Because the Jetson uses an ARM64 architecture, traditional x86 planners (like those found in planutils) often fail. We utilize a native Python approach for maximum compatibility.

  • Hardware: NVIDIA Jetson (Nano/Xavier/Orin)
  • OS: Ubuntu 20.04/22.04 LTS
  • Language: Python 3.10+
  • Library: Pyperplan (Pure Python PDDL Planner)

Installation

# Install the planner
pip install pyperplan

---

๐Ÿ“‹ The Logistics Domain

The domain defines the "physics" of our world. We use `:typing` to categorize objects for the planner.

Domain Code (logistics_domain.pddl)

(define (domain logistics)
  (:requirements :strips :typing)
  
  (:types location truck package)

  (:predicates 
    (at ?obj ?loc)
    (in ?p ?t)
  )

  (:action drive
    :parameters (?t - truck ?from - location ?to - location)
    :precondition (and (at ?t ?from))
    :effect (and (at ?t ?to) (not (at ?t ?from)))
  )

  (:action load
    :parameters (?p - package ?t - truck ?l - location)
    :precondition (and (at ?p ?l) (at ?t ?l))
    :effect (and (in ?p ?t) (not (at ?p ?l)))
  )

  (:action unload
    :parameters (?p - package ?t - truck ?l - location)
    :precondition (and (in ?p ?t) (at ?t ?l))
    :effect (and (at ?p ?l) (not (in ?p ?t)))
  )
)

---

๐Ÿ“ The Problem Definition

The problem defines the specific starting state and the desired goal.

Problem Code (logistics_problem.pddl)

(define (problem delivery-task)
  (:domain logistics)
  
  (:objects 
    warehouse hospital post_office - location
    truck1 - truck
    meds food - package
  )

  (:init 
    (at truck1 warehouse)
    (at meds warehouse)
    (at food warehouse)
  )

  (:goal (and 
    (at meds hospital)
    (at food post_office)
  ))
)

---

๐Ÿš€ Execution & Results

Run the following command in the Jetson terminal:

pyperplan logistics_domain.pddl logistics_problem.pddl

Expected Output

The planner uses Breadth-First Search (BFS) to find the shortest path.

  • Search Time: ~0.00092s
  • Nodes Expanded: 42
  • Plan Length: 6 steps

The generated plan is saved to logistics_problem.pddl.soln.

---

โš ๏ธ Troubleshooting & Lessons Learned

  • Architecture Conflicts: Avoid using planutils or up-tamer on Jetson as they rely on x86 pre-compiled binaries or Apptainer images that lack ARM64 support.
  • Typing Requirement: Ensure (:requirements :typing) is declared in the domain if using typed objects (e.g., - location), otherwise, Pyperplan will throw a SemanticError.
  • Validation: If validate is missing from PATH, the plan still runs but cannot be formally verified by the software.