feat(level1): ROS2 完全体 12 包 / 80 测试 / 23 文档 / 工程化 / Docker 分组
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# Makefile - ROS2 项目构建 / 测试 / 启动聚合命令
|
||||
#
|
||||
# 设计思想:
|
||||
# - 用 make 聚合所有 colcon / docker / 测试命令
|
||||
# - 跨平台: Linux/macOS 直接 make;Windows 用 WSL 或 Git Bash
|
||||
# - 默认项目: docker compose -p ros2
|
||||
#
|
||||
# 使用:
|
||||
# make help # 列出所有命令
|
||||
# make build # build 镜像
|
||||
# make up # 启动容器
|
||||
# make down # 停止容器
|
||||
# make colcon-build # 容器内 build 所有包
|
||||
# make colcon-test # 容器内跑所有测试
|
||||
# make launch TOPIC=pubsub
|
||||
# make logs
|
||||
# make shell
|
||||
|
||||
# ---------- 配置 ----------
|
||||
DOCKER_COMPOSE = docker compose -p ros2 -f docker/docker-compose.yml
|
||||
CONTAINER = ros2_dev
|
||||
WORKSPACE = /root/ros2_ws
|
||||
PACKAGES = py_pubsub cpp_pubsub py_srv py_action_demo cpp_robot_tf2 py_vision_demo \
|
||||
py_params cpp_custom_interface py_lifecycle_composable cpp_qos_demo py_overlay_dds \
|
||||
bringup
|
||||
|
||||
# ---------- 颜色 ----------
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[1;33m
|
||||
RESET = \033[0m
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
.PHONY: help
|
||||
help: ## 显示所有命令
|
||||
@echo "$(GREEN)ROS2 Learning Suite - Makefile$(RESET)"
|
||||
@echo ""
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(RESET) %s\n", $$1, $$2}'
|
||||
|
||||
# ---------- Docker ----------
|
||||
.PHONY: build
|
||||
build: ## 构建镜像(首次 5-10min)
|
||||
$(DOCKER_COMPOSE) build
|
||||
|
||||
.PHONY: up
|
||||
up: ## 启动容器(后台)
|
||||
$(DOCKER_COMPOSE) up -d
|
||||
|
||||
.PHONY: down
|
||||
down: ## 停止容器
|
||||
$(DOCKER_COMPOSE) down
|
||||
|
||||
.PHONY: logs
|
||||
logs: ## 查看容器日志
|
||||
$(DOCKER_COMPOSE) logs -f ros2
|
||||
|
||||
.PHONY: shell
|
||||
shell: ## 进入容器开发终端
|
||||
$(DOCKER_COMPOSE) exec ros2 bash -lc "source $(WORKSPACE)/install/setup.bash && exec bash"
|
||||
|
||||
.PHONY: clean
|
||||
clean: ## 清理构建产物(build/install/log)
|
||||
$(DOCKER_COMPOSE) exec ros2 bash -lc "cd $(WORKSPACE) && rm -rf build/ install/ log/"
|
||||
|
||||
# ---------- colcon ----------
|
||||
.PHONY: colcon-build
|
||||
colcon-build: ## 容器内 build 所有包
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon build --symlink-install --packages-select $(PACKAGES)"
|
||||
|
||||
.PHONY: colcon-test
|
||||
colcon-test: ## 容器内跑所有包的测试
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon test --packages-select $(PACKAGES)"
|
||||
|
||||
.PHONY: colcon-build-one
|
||||
colcon-build-one: ## build 单包: make colcon-build-one PKG=py_pubsub
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon build --symlink-install --packages-select $(PKG)"
|
||||
|
||||
.PHONY: colcon-test-one
|
||||
colcon-test-one: ## 测单包: make colcon-test-one PKG=py_pubsub
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source /opt/ros/humble/setup.bash && colcon test --packages-select $(PKG)"
|
||||
|
||||
# ---------- Launch (端到端 demo) ----------
|
||||
.PHONY: launch
|
||||
launch: ## 启动 launch: make launch NAME=pubsub_launch
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source $(WORKSPACE)/install/setup.bash && ros2 launch bringup $(NAME).py"
|
||||
|
||||
.PHONY: full-demo
|
||||
full-demo: ## 启动 11 节点 full_demo
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && source $(WORKSPACE)/install/setup.bash && ros2 launch bringup full_demo_launch.py"
|
||||
|
||||
# ---------- venv (本机开发) ----------
|
||||
.PHONY: venv-setup
|
||||
venv-setup: ## 本机创建 Python venv(不污染系统 Python)
|
||||
powershell -ExecutionPolicy Bypass -File tools/setup_venv.ps1
|
||||
|
||||
.PHONY: venv-activate
|
||||
venv-activate: ## 提示如何激活 venv
|
||||
@echo "运行: powershell -ExecutionPolicy Bypass -File tools/setup_venv.ps1"
|
||||
@echo "然后: .\\.venv\\Scripts\\Activate.ps1"
|
||||
|
||||
# ---------- 维护 ----------
|
||||
.PHONY: lint
|
||||
lint: ## 容器内跑 ruff + flake8(代码风格)
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && ruff check src/ || true"
|
||||
|
||||
.PHONY: format
|
||||
format: ## 容器内跑 black(代码格式化)
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "cd $(WORKSPACE) && black src/ || true"
|
||||
|
||||
.PHONY: status
|
||||
status: ## 显示所有节点 / topic / service / action
|
||||
$(DOCKER_COMPOSE) exec $(CONTAINER) bash -lc "source $(WORKSPACE)/install/setup.bash && ros2 node list && ros2 topic list && ros2 service list && ros2 action list"
|
||||
Reference in New Issue
Block a user