本仓库包含三个主要目录:
flexmind-ros1-release-1.0.0:ROS1 后端(机器人控制、硬件、传感、交互)hmi:人机界面相关发布物(Node.js 中间层 + 前端静态构建)docs:项目文档(PDF 等)
本文档提供一套完整的前后端部署流程(Ubuntu 20.04 + ROS Noetic)。
dual_arm:双臂机器人相关开源项目:https://github.com/huayan-robotics/dual_arm
运行链路如下:
- 前端(
hmi/dist构建产物)访问 Node API:http://<服务器IP>:3001 - 前端直接连接 rosbridge:
ws://<服务器IP>:9090 - Node 服务调用 rosbridge(默认也是
ws://<服务器IP>:9090) - ROS1 后端同时提供:
- rosbridge websocket:
9090 - web_video_server:
8080
- rosbridge websocket:
注意:当前 dist 构建产物中,前端 API 地址是固定逻辑 http://${window.location.hostname}:3001,不是相对路径。
FlexMind/
├─ docs/
│ └─ FlexMind数据采集平台V1.0.pdf
├─ hmi/
│ ├─ dist/
│ │ ├─ dist.zip
│ │ └─ README.md
│ └─ flexmind-node/
│ ├─ flexmind-node.zip
│ └─ README.md
├─ flexmind-ros1-release-1.0.0/
│ ├─ build.sh
│ ├─ run.sh
│ ├─ requirements.txt
│ ├─ docs/
│ └─ src/
└─ README.md
- Ubuntu 20.04
- ROS Noetic
- Python 3.8(venv)
- Node.js >= 18,npm >= 9
至少确认以下端口可访问:
3001:Node API/Socket 服务9090:rosbridge websocket(前端直连)8080:web_video_server(视频流)80:如使用 Nginx 托管前端
flexmind-ros1-release-1.0.0/build.sh 默认使用:
~/fleximind-ros1/venv38/bin/python建议将 ROS 工作目录命名为 /home/robot/fleximind-ros1,否则需手动修改 build.sh 中的 Python 路径。
以下步骤在目标机器人主机执行。
cd /home/robot
cp -r /path/to/FlexMind/flexmind-ros1-release-1.0.0 ./fleximind-ros1
cd /home/robot/fleximind-ros1sudo apt update
sudo apt install -y ros-noetic-desktop
sudo apt install -y ros-noetic-rosbridge-suite
sudo apt install -y ros-noetic-web-video-server
sudo apt install -y ros-noetic-ddynamic-reconfigure
sudo apt install -y ros-noetic-librealsense2
sudo apt install -y ros-noetic-realsense2-camera
sudo apt install -y \
libgflags-dev ros-noetic-image-geometry ros-noetic-camera-info-manager \
ros-noetic-image-transport-plugins ros-noetic-compressed-image-transport \
ros-noetic-image-transport ros-noetic-image-publisher libgoogle-glog-dev \
libusb-1.0-0-dev libeigen3-dev ros-noetic-diagnostic-updater \
ros-noetic-diagnostic-msgs libdw-dev libxml2-dev libxslt-dev \
python3-venv zip说明:zip 用于 Node 回放文件导出接口(/playback_files/export_file)。
cd /home/robot/fleximind-ros1
python3 -m venv venv38 --system-site-packages --symlinks
source venv38/bin/activate
pip install --upgrade pip
pip install -r src/fleximind_remote/src/fleximind_remote/requirements.txt
pip install src/fleximind_remote/src/fleximind_remote/third_party/DynamixelSDK/python
pip install -r requirements.txtcd /home/robot/fleximind-ros1
source /opt/ros/noetic/setup.bash
./build.sh
# 如需全量清理后重编译
# ./build.sh -ccd /home/robot/fleximind-ros1
./run.shrun.sh 会执行:
source venv38/bin/activatesource /opt/ros/noetic/setup.bashsource devel/setup.shroslaunch fleximind_bringup bringup.launch
bringup.launch 会包含交互、相机、硬件监控、传感、远程控制、夹爪、机器人等模块,并启动 rosbridge(9090)与 web_video_server(8080)。
sudo mkdir -p /opt/flexmind
sudo unzip /path/to/FlexMind/hmi/flexmind-node/flexmind-node.zip -d /opt/flexmind/flexmind-node
cd /opt/flexmind/flexmind-node
npm install可通过导出环境变量启动,示例:
export NODE_ENV=production
export PORT=3001
export ROSBRIDGE_URL=ws://127.0.0.1:9090
export CORS_ORIGIN=http://<服务器IP>:3001
export SOCKETIO_CORS_ORIGIN=*
npm run start可选变量(来自 config/default.js):
PORT(默认3001)ROSBRIDGE_URL(默认ws://<本机IP>:9090)CORS_ORIGIN(默认http://<本机IP>:5174)SOCKETIO_CORS_ORIGIN(默认*)FRONTEND_PORT、ROSBRIDGE_PORT
curl http://127.0.0.1:3001/health
curl http://127.0.0.1:3001/ros/health将前端静态文件复制到 Node 的 public 目录:
sudo unzip /path/to/FlexMind/hmi/dist/dist.zip -d /opt/flexmind/frontend
sudo rm -rf /opt/flexmind/flexmind-node/public/*
sudo cp -a /opt/flexmind/frontend/dist/. /opt/flexmind/flexmind-node/public/然后启动 Node(见第 5 章),浏览器访问:
http://<服务器IP>:3001
sudo apt install -y nginx
sudo mkdir -p /opt/flexmind/frontend
sudo unzip /path/to/FlexMind/hmi/dist/dist.zip -d /opt/flexmind/frontendNginx 配置示例(/etc/nginx/sites-available/flexmind.conf):
server {
listen 80;
server_name _;
root /opt/flexmind/frontend/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}启用配置:
sudo ln -sf /etc/nginx/sites-available/flexmind.conf /etc/nginx/sites-enabled/flexmind.conf
sudo nginx -t
sudo systemctl reload nginx注意:即使前端由 Nginx 的 80 端口托管,当前构建产物仍会请求 http://<host>:3001 与 ws://<host>:9090。因此 3001 和 9090 仍需对浏览器可达。
项目已提供:
flexmind-ros1-release-1.0.0/docs/fleximind-ros1.serviceflexmind-ros1-release-1.0.0/docs/hotpot.service
安装示例:
cd /home/robot/fleximind-ros1
sudo cp ./docs/fleximind-ros1.service /etc/systemd/system/
sudo cp ./docs/hotpot.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable fleximind-ros1.service
sudo systemctl restart fleximind-ros1.service
sudo systemctl enable hotpot.service
sudo systemctl restart hotpot.service新建 /etc/systemd/system/flexmind-node.service:
[Unit]
Description=FlexMind Node Service
After=network.target
[Service]
Type=simple
User=robot
WorkingDirectory=/opt/flexmind/flexmind-node
Environment=NODE_ENV=production
Environment=PORT=3001
Environment=ROSBRIDGE_URL=ws://127.0.0.1:9090
Environment=CORS_ORIGIN=http://<服务器IP>:3001
ExecStart=/usr/bin/node src/index.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target启用:
sudo systemctl daemon-reload
sudo systemctl enable flexmind-node.service
sudo systemctl restart flexmind-node.servicess -lntp | egrep '3001|8080|9090'预期看到:
- Node 监听
0.0.0.0:3001 - rosbridge 监听
0.0.0.0:9090(或空地址绑定全网卡) - web_video_server 监听
0.0.0.0:8080
curl http://127.0.0.1:3001/health
curl http://127.0.0.1:3001/ros/health- 打开
http://<服务器IP>:3001(或 Nginx 模式下http://<服务器IP>) - 页面能正常加载
- 实时状态可刷新(依赖
ws://<服务器IP>:9090可连通)
优先排查:
- 浏览器是否能访问
ws://<服务器IP>:9090 - Node 是否正常连接 rosbridge(看 Node 日志)
- 防火墙是否拦截
3001/9090
/playback_files/export_file 依赖系统 zip 命令,确认已安装:
which zip修改 build.sh 中 -DPYTHON_EXECUTABLE 路径,指向实际 venv38/bin/python。
- 本项目版权归华沿机器人所有。
- 未经授权请勿分发商用。