cd ~/ros2_ws/src
ros2 pkg create uv_sample_pkg
cd uv_sample_pkg
プロジェクトの初期化
uv init . --lib --python-preference only-system
仮想環境作成(ローカルの環境にアクセス可能)
uv venv --system-site-packages
初期構造
uv_sample_pkg/
├── CMakeLists.txt
├── LICENSE
+ ├── README.md
├── include
│ └── uv_sample_pkg
├── package.xml
+ ├── pyproject.toml
└── src
+ └── uv_sample_pkg
+ ├── __init__.py
+ └── py.typed
src/uv_sample_pkg/init.pyにclassとメイン関数記述
scripts/publisher.pyを作成して以下のように記述(名前はなんでもいい)
#!/usr/bin/env python3
from uv_sample_pkg import main
if __name__ == "__main__":
main()
権限の付与
chmod +x scripts/publisher.py
cmake設定
cmake_minimum_required(VERSION 3.8)
project(uv_sample_pkg)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# 依存パッケージ
find_package(ament_cmake REQUIRED)
find_package(ament_cmake_python REQUIRED)
find_package(rclpy REQUIRED)
# Pythonパッケージのインストール
ament_python_install_package(${PROJECT_NAME} PACKAGE_DIR src/${PROJECT_NAME})
# スクリプトのインストール
install(PROGRAMS scripts/publisher.py DESTINATION lib/${PROJECT_NAME})
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
set(ament_cmake_copyright_FOUND TRUE)
set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()
# ワークスペースのルートディレクトリで実行
cd ~/ros2_ws
colcon build --packages-select uv_sample_pkg --symlink-install
source ./install/setup.sh
# パッケージディレクトリで仮想環境を有効化
cd ~/ros2_ws/src/uv_sample_pkg
source .venv/bin/activate
# ノードの実行
ros2 run uv_sample_pkg publisher.py