# Guide: Adding a New ROS2 Package ## 10. Guide: Adding a New ROS2 Package Every new `ament_python` package under `src/` must follow this structure: ``` src// ├── package.xml ├── setup.py ├── setup.cfg ├── resource/ │ └── # Empty file — ament index marker ├── / # Python module — same name as package │ ├── __init__.py │ └── .py └── test/ ├── __init__.py └── test_.py ``` **setup.cfg:** ```ini [develop] script_dir=$base/lib/ [install] install_scripts=$base/lib/ ``` **package.xml:** ```xml PACKAGE_NAME 0.1.0 DESCRIPTION developer MIT rclpy pytest ament_python ``` **setup.py:** ```python from setuptools import setup, find_packages package_name = "PACKAGE_NAME" setup( name=package_name, version="0.1.0", packages=find_packages(exclude=["test"]), data_files=[ ("share/ament_index/resource_index/packages", ["resource/" + package_name]), ("share/" + package_name, ["package.xml"]), ], install_requires=["setuptools"], entry_points={ "console_scripts": [ "node_name = PACKAGE_NAME.module:main", ], }, ) ``` **Steps:** 1. `mkdir -p src//` 2. Create `package.xml`, `setup.py`, `setup.cfg` from templates above 3. `touch src//resource/` 4. Add `__init__.py` and node files 5. Add build/run tasks to `pixi.toml` 6. `colcon build --symlink-install --packages-select ` ---