【导航基础 1-5】第 1/25 课

🤖 第01课:服务机器人概述

📌 课程概述与学习路线

欢迎来到服务机器人课程!本课程将从零开始,带你系统掌握服务机器人的核心技术——从导航定位到语音交互,从任务规划到系统集成,最终完成实战项目。

🗺️ 课程路线图

阶段课程核心技能
🧭 导航基础1-5SLAM建图、路径规划、避障、电梯交互
🗣️ 人机交互6-10语音识别、NLU、对话管理、情感计算
🎯 任务执行11-15任务规划、物体识别、抓取递送、人脸识别
🔧 系统集成16-20ROS2、云端服务、远程监控、多机调度
🚀 实战项目21-25酒店/医院/商场/迎宾/毕业项目
💡 每个阶段递进——导航是基础,交互是手段,任务是目标,集成是工程,实战是检验。

📌 什么是服务机器人

服务机器人是指在非工业环境中为人类提供服务的自主或半自主机器人。与工业机器人不同,服务机器人需要面对开放、动态、非结构化的人居环境。

🏭 工业机器人 vs 服务机器人

维度工业机器人服务机器人
环境结构化、封闭开放、动态
任务重复、确定多样、不确定
交互少(与人隔离)频繁(服务于人)
导航固定轨道/示教自主导航SLAM
容错停机即安全需优雅降级

下面的代码模拟了服务机器人的基本架构:

import json, time, random

class ServiceRobot:
    def __init__(self, name="ServiceBot-01"):
        self.name = name
        self.modules = {}
        self.state = "idle"
        self.battery = 100
        self.position = {"x": 0.0, "y": 0.0, "floor": 1}
        self.task_queue = []
        self.log = []

    def register_module(self, name, module):
        self.modules[name] = module
        self.log.append(f"[注册] 模块 {name} 已加载")

    def execute_task(self, task):
        self.state = "busy"
        self.log.append(f"[执行] 任务: {task['type']}")
        result = {"status": "success", "task_id": task.get("id", "T001")}
        self.state = "idle"
        self.battery = max(0, self.battery - random.uniform(0.5, 2.0))
        return result

    def get_status(self):
        return {
            "name": self.name, "state": self.state,
            "battery": round(self.battery, 1),
            "position": self.position,
            "modules": list(self.modules.keys()),
            "pending_tasks": len(self.task_queue)
        }

robot = ServiceRobot("CloudBot-X1")
robot.register_module("navigation", {"version": "2.1", "mode": "laser_slam"})
robot.register_module("voice", {"version": "1.5", "lang": ["zh", "en"]})
robot.register_module("vision", {"version": "3.0", "models": ["yolov8", "mediapipe"]})

tasks = [
    {"id": "T001", "type": "navigate", "target": "会议室A"},
    {"id": "T002", "type": "greet", "person": "张总"},
    {"id": "T003", "type": "deliver", "item": "咖啡", "to": "工位15"},
]
for t in tasks:
    result = robot.execute_task(t)
    print(f"任务 {t['id']} ({t['type']}): {result['status']}")

status = robot.get_status()
print(f"\n机器人状态: {json.dumps(status, ensure_ascii=False, indent=2)}")
✅ 验证通过 任务 T001 (navigate): success 任务 T002 (greet): success 任务 T003 (deliver): success 机器人状态: { "name": "CloudBot-X1", "state": "idle", "battery": 95.7, "position": { "x": 0.0, "y": 0.0, "floor": 1 }, "modules": [ "navigation", "voice", "vision" ], "pending_tasks": 0 }

📌 系统架构与模块通信

服务机器人的软件架构通常采用模块化+消息总线的设计,类似于ROS的计算图模型:

🏗️ 典型架构

┌─────────────────────────────────────┐
│         应用层 (Application)        │
│  任务规划 │ 对话管理 │ 场景理解     │
├─────────────────────────────────────┤
│         能力层 (Capability)         │
│  导航 │ 语音 │ 视觉 │ 操控 │ 情感  │
├─────────────────────────────────────┤
│         通信层 (Communication)      │
│      消息总线 (Message Bus/ROS)     │
├─────────────────────────────────────┤
│         硬件层 (Hardware)           │
│  激光雷达 │ 摄像头 │ 麦克风 │ 电机 │
└─────────────────────────────────────┘

模块间通过消息总线通信,实现松耦合:

import json, time
from collections import defaultdict

class MessageBus:
    def __init__(self):
        self.subscribers = defaultdict(list)
        self.message_log = []

    def publish(self, topic, message):
        msg = {"topic": topic, "data": message, "timestamp": time.time()}
        self.message_log.append(msg)
        for callback in self.subscribers[topic]:
            callback(msg)

    def subscribe(self, topic, callback):
        self.subscribers[topic].append(callback)

    def get_log(self, topic=None):
        if topic:
            return [m for m in self.message_log if m["topic"] == topic]
        return self.message_log

bus = MessageBus()
events = []

def on_nav(msg): events.append(f"导航→ 收到: {msg['data']}")
def on_voice(msg): events.append(f"语音→ 识别: {msg['data']}")
def on_vision(msg): events.append(f"视觉→ 检测: {msg['data']}")

bus.subscribe("/nav/command", on_nav)
bus.subscribe("/voice/command", on_voice)
bus.subscribe("/vision/detect", on_vision)

bus.publish("/voice/command", "去会议室A")
bus.publish("/nav/command", "路径: (0,0)→(5,3)")
bus.publish("/vision/detect", "行人 距离2.5m")
bus.publish("/nav/command", "避障: 左转15°")

for e in events:
    print(e)
print(f"\n消息统计: 共 {len(bus.get_log())} 条")
✅ 验证通过 语音→ 识别: 去会议室A 导航→ 收到: 路径: (0,0)→(5,3) 视觉→ 检测: 行人 距离2.5m 导航→ 收到: 避障: 左转15° 消息统计: 共 4 条

📌 服务机器人分类与市场

robot_types = {
    "配送机器人": {
        "代表": ["Pudu BellaBot", "云迹润宝", "擎朗花生"],
        "核心": ["室内导航", "动态避障", "电梯交互", "多机调度"],
        "场景": ["酒店配送", "餐厅送餐", "医院运输"],
        "市场": "约120亿(2024)"
    },
    "导诊机器人": {
        "代表": ["晓医机器人", "科大讯飞智医助理"],
        "核心": ["语音交互", "科室导航", "人脸识别", "知识问答"],
        "场景": ["门诊导诊", "健康咨询", "自助挂号"],
        "市场": "约80亿(2024)"
    },
    "迎宾机器人": {
        "代表": ["优必选Cruzr", "康力优蓝Little U"],
        "核心": ["人脸识别", "情感交互", "多模态对话", "主动问候"],
        "场景": ["展厅接待", "商场指引", "前台服务"],
        "市场": "约60亿(2024)"
    },
    "清洁机器人": {
        "代表": ["高仙机器人", "奇勃科技"],
        "核心": ["自主建图", "区域覆盖", "自动充电", "污渍检测"],
        "场景": ["商场清洁", "医院消毒", "停车场清扫"],
        "市场": "约150亿(2024)"
    }
}

print("=" * 55)
print("服务机器人分类与应用场景")
print("=" * 55)
for rtype, info in robot_types.items():
    print(f"\n🔹 {rtype}")
    for k, v in info.items():
        if isinstance(v, list):
            print(f"  {k}: {', '.join(v)}")
        else:
            print(f"  {k}: {v}")
✅ 验证通过 ======================================================= 服务机器人分类与应用场景 ======================================================= 🔹 配送机器人 代表: Pudu BellaBot, 云迹润宝, 擎朗花生 核心: 室内导航, 动态避障, 电梯交互, 多机调度 场景: 酒店配送, 餐厅送餐, 医院运输 市场: 约120亿(2024) 🔹 导诊机器人 代表: 晓医机器人, 科大讯飞智医助理 核心: 语音交互, 科室导航, 人脸识别, 知识问答 场景: 门诊导诊, 健康咨询, 自助挂号 市场: 约80亿(2024) 🔹 迎宾机器人 代表: 优必选Cruzr, 康力优蓝Little U 核心: 人脸识别, 情感交互, 多模态对话, 主动问候 场景: 展厅接待, 商场指引, 前台服务 市场: 约60亿(2024) 🔹 清洁机器人 代表: 高仙机器人, 奇勃科技 核心: 自主建图, 区域覆盖, 自动充电, 污渍检测 场景: 商场清洁, 医院消毒, 停车场清扫 市场: 约150亿(2024)

📌 关键技术栈总览

🛠️ 核心技术栈

领域关键技术常用工具
导航定位SLAM、路径规划、定位Cartographer、Nav2、AMCL
感知理解物体检测、语义分割YOLOv8、SAM、MediaPipe
语音交互ASR、TTS、NLUWhisper、VITS、Rasa
人机交互人脸识别、情感计算ArcFace、FER、多模态融合
任务规划行为树、状态机BehaviorTree.CPP、SMACH
系统集成中间件、云端、运维ROS2、Docker、K8s
💡 本课程使用Python仿真验证每个技术点,无需硬件即可学习。代码可在真实机器人上平滑迁移。

📌 交互流程设计

服务机器人典型交互遵循感知→理解→决策→执行→反馈循环:

交互流程示例

用户: "帮我送咖啡到3楼会议室"
  │
  ├─→ [语音识别] ASR: 音频→文字
  ├─→ [语义理解] NLU: 意图=配送, 目标=3楼会议室, 物品=咖啡
  ├─→ [任务规划] 规划: 取咖啡→等电梯→到3楼→进会议室
  ├─→ [导航执行] 导航到咖啡机→避障→电梯交互→到达
  ├─→ [交互反馈] "咖啡已送达,祝会议顺利!"
  └─→ [状态更新] 任务完成→返回待命点

📌 练习

📝 练习 1

扩展ServiceRobot类,添加charge()方法,当电量低于20%时自动导航到充电桩并充电至90%。模拟电量消耗和充电过程。

📝 练习 2

在MessageBus中实现service_call(topic, request)同步调用模式,支持请求-响应语义,超时3秒返回错误。

📝 练习 3

设计养老陪护机器人场景,定义模块、任务类型、交互流程,模拟5个典型任务执行。

📌 成就

🏆 本课成就

◀ 上一课 📚 目录 下一课 ▶