新增vl模式
This commit is contained in:
@@ -23,6 +23,7 @@ unstructured[all]>=0.11.0
|
|||||||
|
|
||||||
# HTTP Requests
|
# HTTP Requests
|
||||||
requests>=2.31.0
|
requests>=2.31.0
|
||||||
|
PyYAML>=6.0
|
||||||
|
|
||||||
# Progress Bars and UI
|
# Progress Bars and UI
|
||||||
rich>=13.7.0
|
rich>=13.7.0
|
||||||
|
|||||||
@@ -10,6 +10,11 @@
|
|||||||
7. **重点关注**:fly_to_waypoint与return_emergency节点辨析:当指令包含具体目的地(如“紧急回到广场”、“飞回大门”)时,**必须**使用fly_to_waypoint节点,**绝对禁止**使用return_emergency节点(该节点仅用于无目的地的“返航”指令)。
|
7. **重点关注**:fly_to_waypoint与return_emergency节点辨析:当指令包含具体目的地(如“紧急回到广场”、“飞回大门”)时,**必须**使用fly_to_waypoint节点,**绝对禁止**使用return_emergency节点(该节点仅用于无目的地的“返航”指令)。
|
||||||
8. 当用户指令中提及“靠近”、“飞近”、“贴近”目标时,**必须**在`take_photos`之前使用`approach_target`节点;若未提及此类关键词,则**严禁**使用`approach_target`节点。
|
8. 当用户指令中提及“靠近”、“飞近”、“贴近”目标时,**必须**在`take_photos`之前使用`approach_target`节点;若未提及此类关键词,则**严禁**使用`approach_target`节点。
|
||||||
9. **方向移动优先原则**:当指令为“快速去往东边100米”,直接使用 `move_direction` 节点+距离参数,严禁使用fly_to_waypoint
|
9. **方向移动优先原则**:当指令为“快速去往东边100米”,直接使用 `move_direction` 节点+距离参数,严禁使用fly_to_waypoint
|
||||||
|
10. **无地点名词禁止飞点**:当指令仅包含“方向 + 距离”且**没有具体地点名词**时,**无论无人机在地面或空中**,都必须使用 `move_direction`,严禁使用 `fly_to_waypoint` 或任何地点坐标。
|
||||||
|
|
||||||
|
示例(必须遵守):
|
||||||
|
- “无人机当前在地面,快速去往东边60米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。” → 必须使用 `move_direction`(east, 60),不得生成 `fly_to_waypoint` 或引用任何地点坐标。
|
||||||
|
- “无人机当前在空中,快速去往东边60米,有身穿白色衣服,头戴帽子的男子在挟持他人,对其进行拍照。” → 同样必须使用 `move_direction`(east, 60),不得生成 `fly_to_waypoint` 或引用任何地点坐标。
|
||||||
|
|
||||||
## 七、坐标计算规则(东南天坐标系 ENU)
|
## 七、坐标计算规则(东南天坐标系 ENU)
|
||||||
本系统统一使用东南天(ENU)坐标系:
|
本系统统一使用东南天(ENU)坐标系:
|
||||||
|
|||||||
@@ -10,16 +10,20 @@
|
|||||||
3. 仅允许以上三种取值,禁止输出其他字段或文本。
|
3. 仅允许以上三种取值,禁止输出其他字段或文本。
|
||||||
|
|
||||||
—— 场景定义 ——
|
—— 场景定义 ——
|
||||||
scene1(大楼外围巡查类):
|
scene1(方位态势感知巡查类):
|
||||||
- 关键词特征:面前大楼/这栋楼、外围/沿着外围/绕着外围、12米高处、逆时针等;
|
- 关键词特征:面前大楼/这栋楼、外围/沿着外围/绕着外围、12米高处、逆时针等;
|
||||||
- 任务类型:绕楼外围巡查、搜索窗户/杂物堆积/人员等并拍照;
|
- 任务类型:绕楼外围巡查、搜索窗户/杂物堆积/人员等并拍照;
|
||||||
- 包含上下/下降移动(上升3米/下降3米)后绕楼侦察的也属于 scene1。
|
- 包含上下/下降移动(上升3米/下降3米)后绕楼侦察的也属于 scene1。
|
||||||
|
|
||||||
scene4(广场相关复合任务类):
|
scene4(序列感知复合任务类):
|
||||||
- 关键词特征:广场、广场边上、广场南边、施工区域、紧急回到广场、回到广场;
|
- 关键词特征:广场边上、广场南边、施工区域、紧急回到广场、回到广场;
|
||||||
- 任务类型:在广场搜索/拍照/监控/返航/降落/靠近拍照等;
|
- 任务类型:在广场搜索/拍照/监控/返航/降落/靠近拍照等;
|
||||||
- 可能包含“确认后拍照/返航”、“持续监控5分钟”、“挟持”等描述。
|
- 可能包含“确认后拍照/返航”、“持续监控5分钟”、“挟持”等描述。
|
||||||
|
|
||||||
|
simple(单步执行简单指令):
|
||||||
|
- 任务类型:只需要单一节点即可完成任务(无人机在空中时,飞到某地或者往某个方位飞行,这应该是简单节点)
|
||||||
|
- 举例:“无人机当前在地面,起飞”“无人机当前在空中,飞到广场”
|
||||||
|
|
||||||
—— 场景指令样例 ——
|
—— 场景指令样例 ——
|
||||||
scene1 示例:
|
scene1 示例:
|
||||||
- 无人机当前在地面,去面前大楼的12米高处,绕着外围看有没有打开的窗户,发现则进行拍照。
|
- 无人机当前在地面,去面前大楼的12米高处,绕着外围看有没有打开的窗户,发现则进行拍照。
|
||||||
|
|||||||
95
start_all.sh
95
start_all.sh
@@ -19,8 +19,11 @@ NC='\033[0m' # No Color
|
|||||||
# 默认配置(可通过环境变量覆盖)
|
# 默认配置(可通过环境变量覆盖)
|
||||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
LLAMA_SERVER_DIR="${LLAMA_SERVER_DIR:-~/llama.cpp/build/bin}"
|
LLAMA_SERVER_DIR="${LLAMA_SERVER_DIR:-~/llama.cpp/build/bin}"
|
||||||
INFERENCE_MODEL="${INFERENCE_MODEL:-~/models/gguf/Qwen3/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf}"
|
INFERENCE_MODEL_DEFAULT="${INFERENCE_MODEL_DEFAULT:-~/models/gguf/Qwen3/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf}"
|
||||||
EMBEDDING_MODEL="${EMBEDDING_MODEL:-~/models/gguf/Qwen3/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q5_K_M.gguf}"
|
EMBEDDING_MODEL="${EMBEDDING_MODEL:-~/models/gguf/Qwen3/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q5_K_M.gguf}"
|
||||||
|
VL_INFERENCE_MODEL_DEFAULT="${VL_INFERENCE_MODEL_DEFAULT:-~/models/gguf/Qwen3/qwen3_vl_4b_instruct/Qwen3VL-4B-Instruct-Q4_K_M.gguf}"
|
||||||
|
VL_VISION_ENCODER_MODEL_DEFAULT="${VL_VISION_ENCODER_MODEL_DEFAULT:-~/models/gguf/Qwen3/qwen3_vl_4b_instruct/mmproj-Qwen3VL-4B-Instruct-Q8_0.gguf}"
|
||||||
|
ENABLE_VL="${ENABLE_VL:-0}"
|
||||||
VENV_PATH="${VENV_PATH:-${PROJECT_ROOT}/backend_service/venv}"
|
VENV_PATH="${VENV_PATH:-${PROJECT_ROOT}/backend_service/venv}"
|
||||||
LOG_DIR="${PROJECT_ROOT}/logs"
|
LOG_DIR="${PROJECT_ROOT}/logs"
|
||||||
PID_FILE="${LOG_DIR}/services.pid"
|
PID_FILE="${LOG_DIR}/services.pid"
|
||||||
@@ -136,6 +139,10 @@ trap cleanup EXIT
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
start_services() {
|
start_services() {
|
||||||
|
local enable_vl="${ENABLE_VL}"
|
||||||
|
if [ "${1:-}" = "vl" ]; then
|
||||||
|
enable_vl=1
|
||||||
|
fi
|
||||||
print_info "=========================================="
|
print_info "=========================================="
|
||||||
print_info " 无人机自然语言控制项目 - 服务启动"
|
print_info " 无人机自然语言控制项目 - 服务启动"
|
||||||
print_info "=========================================="
|
print_info "=========================================="
|
||||||
@@ -176,16 +183,39 @@ start_services() {
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# 检查模型文件
|
# 检查模型文件
|
||||||
local inference_model_expanded=$(eval echo "${INFERENCE_MODEL}")
|
local inference_model=""
|
||||||
|
local vision_encoder_model_expanded=""
|
||||||
|
if [ "${enable_vl}" = "1" ]; then
|
||||||
|
inference_model="${VL_INFERENCE_MODEL:-${VL_INFERENCE_MODEL_DEFAULT}}"
|
||||||
|
local vision_encoder_model="${VISION_ENCODER_MODEL:-${VL_VISION_ENCODER_MODEL_DEFAULT}}"
|
||||||
|
vision_encoder_model_expanded=$(eval echo "${vision_encoder_model}")
|
||||||
|
print_info "VL模式已启用,将使用VL模型与视觉编码器"
|
||||||
|
else
|
||||||
|
inference_model="${INFERENCE_MODEL:-${INFERENCE_MODEL_DEFAULT}}"
|
||||||
|
fi
|
||||||
|
local inference_model_expanded=$(eval echo "${inference_model}")
|
||||||
local embedding_model_expanded=$(eval echo "${EMBEDDING_MODEL}")
|
local embedding_model_expanded=$(eval echo "${EMBEDDING_MODEL}")
|
||||||
|
|
||||||
if [ ! -f "${inference_model_expanded}" ]; then
|
if [ ! -f "${inference_model_expanded}" ]; then
|
||||||
print_error "推理模型文件未找到: ${inference_model_expanded}"
|
print_error "推理模型文件未找到: ${inference_model_expanded}"
|
||||||
print_info "请设置 INFERENCE_MODEL 环境变量指向正确的模型路径"
|
if [ "${enable_vl}" = "1" ]; then
|
||||||
|
print_info "请设置 VL_INFERENCE_MODEL 环境变量指向正确的模型路径"
|
||||||
|
else
|
||||||
|
print_info "请设置 INFERENCE_MODEL 环境变量指向正确的模型路径"
|
||||||
|
fi
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
print_success "找到推理模型: ${inference_model_expanded}"
|
print_success "找到推理模型: ${inference_model_expanded}"
|
||||||
|
|
||||||
|
if [ "${enable_vl}" = "1" ]; then
|
||||||
|
if [ ! -f "${vision_encoder_model_expanded}" ]; then
|
||||||
|
print_error "视觉编码器模型文件未找到: ${vision_encoder_model_expanded}"
|
||||||
|
print_info "请设置 VISION_ENCODER_MODEL 环境变量指向正确的模型路径"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
print_success "找到视觉编码器模型: ${vision_encoder_model_expanded}"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -f "${embedding_model_expanded}" ]; then
|
if [ ! -f "${embedding_model_expanded}" ]; then
|
||||||
print_error "Embedding模型文件未找到: ${embedding_model_expanded}"
|
print_error "Embedding模型文件未找到: ${embedding_model_expanded}"
|
||||||
print_info "请设置 EMBEDDING_MODEL 环境变量指向正确的模型路径"
|
print_info "请设置 EMBEDDING_MODEL 环境变量指向正确的模型路径"
|
||||||
@@ -229,18 +259,34 @@ start_services() {
|
|||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
print_info "启动推理模型服务 (端口 ${INFERENCE_PORT})..."
|
print_info "启动推理模型服务 (端口 ${INFERENCE_PORT})..."
|
||||||
cd "${llama_server_dir_expanded}"
|
cd "${llama_server_dir_expanded}"
|
||||||
nohup ./llama-server \
|
if [ "${enable_vl}" = "1" ]; then
|
||||||
-m "${inference_model_expanded}" \
|
nohup ./llama-server \
|
||||||
--port ${INFERENCE_PORT} \
|
-m "${inference_model_expanded}" \
|
||||||
--gpu-layers 36 \
|
--mmproj "${vision_encoder_model_expanded}" \
|
||||||
--host 0.0.0.0 \
|
--port ${INFERENCE_PORT} \
|
||||||
-c 16384 \
|
--gpu-layers 36 \
|
||||||
--jinja \
|
--host 0.0.0.0 \
|
||||||
--temp 0 \
|
-c 16384 \
|
||||||
--top-k 1 \
|
--jinja \
|
||||||
--top-p 1.0 \
|
--temp 0 \
|
||||||
--min-p 0 \
|
--top-k 1 \
|
||||||
> "${LOG_DIR}/inference_model.log" 2>&1 &
|
--top-p 1.0 \
|
||||||
|
--min-p 0 \
|
||||||
|
> "${LOG_DIR}/inference_model.log" 2>&1 &
|
||||||
|
else
|
||||||
|
nohup ./llama-server \
|
||||||
|
-m "${inference_model_expanded}" \
|
||||||
|
--port ${INFERENCE_PORT} \
|
||||||
|
--gpu-layers 36 \
|
||||||
|
--host 0.0.0.0 \
|
||||||
|
-c 16384 \
|
||||||
|
--jinja \
|
||||||
|
--temp 0 \
|
||||||
|
--top-k 1 \
|
||||||
|
--top-p 1.0 \
|
||||||
|
--min-p 0 \
|
||||||
|
> "${LOG_DIR}/inference_model.log" 2>&1 &
|
||||||
|
fi
|
||||||
local inference_pid=$!
|
local inference_pid=$!
|
||||||
echo $inference_pid >> "${PID_FILE}"
|
echo $inference_pid >> "${PID_FILE}"
|
||||||
print_success "推理模型服务已启动 (PID: $inference_pid)"
|
print_success "推理模型服务已启动 (PID: $inference_pid)"
|
||||||
@@ -378,6 +424,9 @@ case "${1:-start}" in
|
|||||||
start)
|
start)
|
||||||
start_services
|
start_services
|
||||||
;;
|
;;
|
||||||
|
vl)
|
||||||
|
ENABLE_VL=1 start_services vl
|
||||||
|
;;
|
||||||
stop)
|
stop)
|
||||||
stop_services
|
stop_services
|
||||||
;;
|
;;
|
||||||
@@ -386,6 +435,11 @@ case "${1:-start}" in
|
|||||||
sleep 2
|
sleep 2
|
||||||
start_services
|
start_services
|
||||||
;;
|
;;
|
||||||
|
restart-vl)
|
||||||
|
stop_services
|
||||||
|
sleep 2
|
||||||
|
ENABLE_VL=1 start_services vl
|
||||||
|
;;
|
||||||
status)
|
status)
|
||||||
print_info "检查服务状态..."
|
print_info "检查服务状态..."
|
||||||
if [ -f "${PID_FILE}" ]; then
|
if [ -f "${PID_FILE}" ]; then
|
||||||
@@ -412,17 +466,24 @@ case "${1:-start}" in
|
|||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "用法: $0 {start|stop|restart|status}"
|
echo "用法: $0 {start|vl|stop|restart|restart-vl|status}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "命令说明:"
|
echo "命令说明:"
|
||||||
echo " start - 启动所有服务(默认)"
|
echo " start - 启动所有服务(默认)"
|
||||||
|
echo " vl - 启动所有服务(VL模式)"
|
||||||
echo " stop - 停止所有服务"
|
echo " stop - 停止所有服务"
|
||||||
echo " restart - 重启所有服务"
|
echo " restart - 重启所有服务"
|
||||||
|
echo " restart-vl - 重启所有服务(VL模式)"
|
||||||
echo " status - 查看服务状态"
|
echo " status - 查看服务状态"
|
||||||
echo ""
|
echo ""
|
||||||
echo "环境变量配置:"
|
echo "环境变量配置:"
|
||||||
echo " LLAMA_SERVER_DIR - llama-server所在目录 (默认: ~/llama.cpp/build/bin)"
|
echo " LLAMA_SERVER_DIR - llama-server所在目录 (默认: ~/llama.cpp/build/bin)"
|
||||||
echo " INFERENCE_MODEL - 推理模型路径 (默认: ~/models/gguf/Qwen/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf)"
|
echo " INFERENCE_MODEL - 推理模型路径 (默认: \${INFERENCE_MODEL_DEFAULT})"
|
||||||
|
echo " INFERENCE_MODEL_DEFAULT - 默认推理模型路径"
|
||||||
|
echo " VL_INFERENCE_MODEL - VL推理模型路径 (默认: \${VL_INFERENCE_MODEL_DEFAULT})"
|
||||||
|
echo " VL_INFERENCE_MODEL_DEFAULT - VL推理模型路径"
|
||||||
|
echo " VISION_ENCODER_MODEL - 视觉编码器模型路径 (默认: \${VL_VISION_ENCODER_MODEL_DEFAULT})"
|
||||||
|
echo " VL_VISION_ENCODER_MODEL_DEFAULT - VL视觉编码器默认路径"
|
||||||
echo " EMBEDDING_MODEL - Embedding模型路径 (默认: ~/models/gguf/Qwen/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q4_K_M.gguf)"
|
echo " EMBEDDING_MODEL - Embedding模型路径 (默认: ~/models/gguf/Qwen/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q4_K_M.gguf)"
|
||||||
echo " VENV_PATH - venv虚拟环境路径 (默认: \${PROJECT_ROOT}/backend_service/venv)"
|
echo " VENV_PATH - venv虚拟环境路径 (默认: \${PROJECT_ROOT}/backend_service/venv)"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user