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
planutilsorup-tameron 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 aSemanticError. - Validation: If
validateis missing from PATH, the plan still runs but cannot be formally verified by the software.
