UGV Beast Jetson Orin ROS2 8. Web 端自然语言交互
| ||||||||||||||||||||||
|
8. Web 端自然语言交互
本教程将介绍如何在 Web 端页面用自然语言直接控制机器人。在该教程中,我们使用 Ollama 命令行工具运行大型语言模型,通过命令行输入相应的命令来使用 Gemma 模型进行 JSON 指令生成,生成的 JSON 指令发送给机器人,支持机器人执行基础移动、辅助建图、导航等任务。
8.1 Ollama 简介
Ollama 是一个开源的大型语言模型服务工具,用于简化在本地运行大语言模型、降低使用大语言模型的门槛,同时还提供了一个丰富的预构建模型库,包括如 Qwen2、Llama3、Phi3、Gemma2 等开源的大型语言模型,可以轻松集成到各种应用程序中。Ollama 的目标是使大型语言模型的部署和交互变得简单,无论是对于开发者还是对于终端用户。
8.2 安装与配置 Ollama
1. 点击 Ollama 官网下载 Ollama 的安装包。官方 Ollama 支持不同操作系统下载,根据您的操作系统,选择相应的安装包进行下载。该教程中是在 Windows 操作系统安装的,下载完成后,运行安装包,按照提示完成安装过程。
2. 安装完成后,需要进行 Windows 系统环境变量配置。在“开始”菜单栏中,搜索“高级系统设置”,在系统设置中选择“环境变量”。
3. 在用户变量中选择“新建”,变量名填入:“OLLAMA_HOST”,变量值填入:“:11434”,如下图。填完后点击“OK”进行保存。
4. 如下图显示即为添加成功,最后点击“OK”保存环境变量的配置。
8.3 下载大模型到本地
Ollama 支持 Ollama 模型库上提供的一系列模型,以下是一些可以下载的示例模型,该教程中使用的是 Gemma2:9B 模型。
注意:你应该至少有 8GB RAM 内存大小来运行 7B 的模型,16GB RAM 内存大小来运行 13B 的模型,32GB RAM 内存大小来运行 33B 的模型。我们教程中使用的是 Gemma2:9B 的模型,则需要保证你的电脑 RAM 内存大小有 16GB 及以上。
1. 首先,先确定你的电脑 RAM 内存大小有 16 GB 及以上。在“开始”菜单栏中搜索“任务管理器”,选择“内存”查看内存大小是 16GB 及以上即可。
2. 接着在Windows 系统下,按 Ctrl+R 后输入“cmd”打开终端,通过 pull 命令从 Ollama 远程仓库完整下载大模型到本地。
ollama pull gemma2
3. 下载完成后,可以运行大模型进行测试,随机和 AI 进行对话测试。
ollama run gemma2
8.4 更改 IP 地址
首先,先确定你进行 Ollama 部署的本地 IP 地址是多少,记住这个 IP 地址。
- Windows 系统
按 Ctrl+R,输入 cmd 打开终端,在终端中输入查看 IP 地址的指令:
ipconfig
记住这个 IP 地址,接着在 Jetson Orin Nano 操作系统中,打开 /home/ws/ugv_ws/src/ugv_main/ugv_chat_ai/ugv_chat_ai/ 这个目录下的 app.py 文件,如下图将第 85 行“:11434”前的 IP 地址更改为你前面所得到的本地 IP 地址。
更改后按 Ctrl+S 保存退出即可。
8.5 底盘驱动
在启动底盘驱动之前,默认您已根据第一章 UGV Beast Jetson Orin PI ROS2 1. 准备工作里的内容已结束主程序且远程连接上 Docker 容器。
在容器中,进入该产品 ROS 2 项目的工作空间:
cd /home/ws/ugv_ws
启动小车驱动节点:
ros2 launch ugv_bringup bringup_lidar.launch.py use_rviz:=true
此时,机器人云台会转至中位,摄像头面向前方,可以查看到该产品 Rviz2 模型界面,原地旋转小车可以看见模型中也会跟着一起旋转。
8.6 启动 Web 端 AI 应用
打开一个新的 Docker 容器终端,点击左边侧栏中的“⭐”符号,双击打开 Docker 的远程终端,输入用户名:root,密码:jetson。
运行 Web 端 AI 应用:
ros2 run ugv_chat_ai app
运行后成功后如下图所示:
接着在部署 Ollama 的操作系统的浏览器中,访问“IP 地址:5000”这个网址进入 AI 应用的界面。如上图所示,这里访问的网址为 “192.168.10.131:5000”。
在与 AI 的聊天界面中,我们需要先给 AI 发一些提示,让 AI 反馈 JSON 指令,从而去控制机器人运动。下面是我们提供的提示,可以直接复制发送给 AI:
You are an assistant helping me with the simulator for robots.Here are some tips you can use to command the robot. {"T": "1", "type": type, "data": data} type: drive_on_heading back_up spin stop data: num you should return only json in code,without explanation for examples, "user": "move 2 units forward." "assistant": {"T": 1, "type": "drive_on_heading", "data": 2} "user": "move 2 units back." "assistant": {"T": 1, "type": "back_up", "data": 2} "user": "turn left 30 degrees." "assistant": {"T": 1, "type": "spin", "data": 30} "user": "stop." "assistant": {"T": 1, "type": "stop", "data": 0}
等待 1 分钟左右,AI 会反馈直走 2m 的 JSON 指令,如下图:
- type:机器人运动类型。driver_on_heading:前进;back_up:后退;spin:旋转;stop:停止。
- data:机器人运动的数值参数。前进或后退时,单位为 m;旋转时,单位为度。
接着,还需要启动机器人运动的相关接口,在 AI 反馈回 JSON 指令后,实际中的机器人才会进行相应地运动。打开一个新的 Docker 容器终端,运行以下指令:
ros2 run ugv_tools behavior_ctrl
运行完成后,未给机器人运动指令前不会有反馈出来。
示例:让机器人前进 1m。AI 应用会反馈前进 1m 的 JSON 指令,“ros2 run ugv_tools behavior_ctrl”这个指令会反馈出产品移动距离和现在距离等参数,完成 1m 的移动后机器人会停止。