Improve camera status and production startup

This commit is contained in:
2026-06-22 13:54:07 +08:00
parent 55f646053d
commit 7dadcb8bcc
5 changed files with 72 additions and 30 deletions
+25 -9
View File
@@ -46,7 +46,6 @@ info "ok" "清理完成"
# 2. 启动 ros2 daemon
# ============================================================================
step "2/8" "启动 ros2 daemon"
source "$ROS_SETUP" 2>/dev/null || true
rm -rf "$FASTRTPS_SHM_DIR"/fastrtps_* 2>/dev/null || true
start_ros2_daemon || true
@@ -55,12 +54,16 @@ start_ros2_daemon || true
# ============================================================================
step "3/8" "启动 AGV Bringup"
cd "$AGV_ROS2_DIR"
source "$ROS_WORKSPACE_SETUP"
rm -rf "$FASTRTPS_SHM_DIR"/fastrtps_* 2>/dev/null || true
nohup bash -c "export ROS_DOMAIN_ID=$ROS_DOMAIN_ID && \
ros2 launch agv_pro_bringup agv_pro_bringup.launch.py port_name:=$AGV_CONTROLLER_DEVICE" \
nohup bash -c '
source "$1" || exit 1
source "$2" || exit 1
export ROS_DOMAIN_ID="$3"
cd "$4" || exit 1
ros2 launch agv_pro_bringup agv_pro_bringup.launch.py port_name:="$5"
' _ "$ROS_SETUP" "$ROS_WORKSPACE_SETUP" "$ROS_DOMAIN_ID" "$AGV_ROS2_DIR" "$AGV_CONTROLLER_DEVICE" \
> "$BRINGUP_LOG" 2>&1 &
BRINGUP_PID=$!
echo " bringup PID: $BRINGUP_PID"
@@ -123,7 +126,7 @@ step "6/8" "启动 Nav2 导航"
nohup bash -c "source \"$ROS_SETUP\" && source \"$ROS_WORKSPACE_SETUP\" && \
export ROS_DOMAIN_ID=$ROS_DOMAIN_ID && \
ros2 launch agv_pro_navigation2 navigation2_active.launch.py autostart:=True" \
ros2 launch agv_pro_navigation2 navigation2_active.launch.py autostart:=True use_rviz:=False" \
> "$NAV2_LOG" 2>&1 &
NAV2_PID=$!
echo " Nav2 PID: $NAV2_PID"
@@ -153,9 +156,22 @@ info "ok" "精度参数已设置"
step "8/8" "启动 Flask API"
cd "$AGV_APP_DIR"
nohup uv run --locked python app.py > "$FLASK_LOG" 2>&1 &
FLASK_PID=$!
echo " Flask PID: $FLASK_PID"
UV_EXECUTABLE=$(resolve_uv_bin || true)
FLASK_PID=""
if [ -z "$UV_EXECUTABLE" ]; then
echo " [ERROR] 未找到 uv,可设置 UV_BIN=/path/to/uv"
else
nohup bash -c '
source "$1" || exit 1
source "$2" || exit 1
export ROS_DOMAIN_ID="$3"
cd "$4" || exit 1
exec "$5" run --locked python app.py
' _ "$ROS_SETUP" "$ROS_WORKSPACE_SETUP" "$ROS_DOMAIN_ID" "$AGV_APP_DIR" "$UV_EXECUTABLE" \
> "$FLASK_LOG" 2>&1 &
FLASK_PID=$!
echo " Flask PID: $FLASK_PID"
fi
sleep 4
# ============================================================================
@@ -223,7 +239,7 @@ echo " 进程状态:"
for proc_info in "bringup:$BRINGUP_PID" "Nav2:$NAV2_PID" "fixer:$FIXER_PID" "Flask:$FLASK_PID"; do
name="${proc_info%%:*}"
pid="${proc_info##*:}"
if ps aux | grep -w "$pid" | grep -v grep >/dev/null 2>&1; then
if [ -n "$pid" ] && ps -p "$pid" >/dev/null 2>&1; then
echo " $name : 运行中 (PID: $pid)"
else
echo " $name : 已退出"
+33 -3
View File
@@ -16,6 +16,7 @@ readonly SCAN_FIXER_DIR="${SCAN_FIXER_DIR:-$AGV_PROJECT_DIR/scan_fixer}"
readonly LOG_DIR="${LOG_DIR:-/tmp}"
readonly FASTRTPS_SHM_DIR="${FASTRTPS_SHM_DIR:-/dev/shm}"
readonly AGV_CONTROLLER_DEVICE="${AGV_CONTROLLER_DEVICE:-/dev/agvpro_controller}"
readonly UV_BIN="${UV_BIN:-}"
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-1}"
# 日志文件
@@ -131,6 +132,32 @@ ros2_exec() {
' _ "$ROS_SETUP" "$ROS_WORKSPACE_SETUP" "$ROS_DOMAIN_ID" "$@"
}
resolve_uv_bin() {
if [ -n "$UV_BIN" ]; then
if [ -x "$UV_BIN" ]; then
echo "$UV_BIN"
return 0
fi
return 1
fi
local candidate
candidate=$(command -v uv 2>/dev/null || true)
if [ -n "$candidate" ]; then
echo "$candidate"
return 0
fi
for candidate in "$HOME/.local/bin/uv" "$HOME/.cargo/bin/uv"; do
if [ -x "$candidate" ]; then
echo "$candidate"
return 0
fi
done
return 1
}
# ============================================================================
# ROS2 环境操作
# ============================================================================
@@ -184,8 +211,11 @@ stop_ros2_daemon() {
pkill -9 -f "ros2-daemon" 2>/dev/null || true
sleep 2
source "$ROS_SETUP" 2>/dev/null || true
ros2 daemon stop 2>/dev/null || true
bash -c '
source "$1" || exit 0
export ROS_DOMAIN_ID="$2"
ros2 daemon stop
' _ "$ROS_SETUP" "$ROS_DOMAIN_ID" 2>/dev/null || true
echo " [OK] ros2 daemon 已重置"
}
@@ -223,7 +253,7 @@ wait_for_nodes() {
while [ "$elapsed" -lt "$max_wait" ]; do
local nodes
nodes=$(ros2_exec ros2 node list 2>/dev/null || true)
nodes=$(ros2_exec timeout 8 ros2 node list --no-daemon --spin-time 3 2>/dev/null || true)
count=$(printf '%s\n' "$nodes" | grep -cE "$pattern" || true)
if [ "$count" -ge "$expected" ]; then
echo " [OK] 已检测到 $count 个节点"