一、项目简介

在进行 ROS2 开发与调试时,常常需要手动 SSH 登录到树莓派或机器人主控板,再逐个运行摄像头、雷达、导航、键盘控制等多个节点。
这样的过程繁琐、容易出错,也浪费时间。

为了解决这一问题,本文介绍一个自动化脚本:

auto_ros_multi_ssh.sh
它可以一键自动登录远程树莓派并执行多个 ROS2 节点命令,支持多任务并行执行,效率提升数倍!


二、脚本主要功能

功能编号功能说明对应 ROS2 命令
1启动摄像头wheeltec_camera.launch.py
2启动雷达wheeltec_lidar.launch.py
3启动底盘控制turn_on_wheeltec_robot.launch.py
4启动键盘控制teleop_twist_keyboard
5启动 gmapping 建图slam_gmapping.launch.py
6启动 Web 视频服务器web_video_server
7打开浏览器预览视频流http://192.168.0.100:8080
8启动 Nav2 导航系统wheeltec_nav2.launch.py
9启动 RRT 自主探索建图wheeltec_rrt_slam.launch.py
10启动 RTAB-Map 建图1rtabmap_localization.launch.py
11启动 RTAB-Map 建图2wheeltec_slam_rtab.launch.py

三、完整脚本内容

#!/bin/bash
# auto_ros_multi_ssh.sh
# 自动 SSH 登录树莓派并执行 ROS2 命令

# ========== 配置区域 ==========
PI_IP="192.168.0.100"
PI_USER="wheeltec"
PI_PASS="dongguan"

# 各功能对应的 ROS2 启动命令
CMD_CAMERA="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch turn_on_wheeltec_robot wheeltec_camera.launch.py"
CMD_LIDAR="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch turn_on_wheeltec_robot wheeltec_lidar.launch.py"
CMD_CHASSIS="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch.py"
CMD_KEYBOARD="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 run teleop_twist_keyboard teleop_twist_keyboard"
CMD_MAP="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch slam_gmapping slam_gmapping.launch.py"
CMD_CW="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 run web_video_server web_video_server"
CMD_WEB="xdg-open http://192.168.0.100:8080"
CMD_1="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch wheeltec_nav2 wheeltec_nav2.launch.py"
CMD_2="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch wheeltec_robot_rrt wheeltec_rrt_slam.launch.py"
CMD_3="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch wheeltec_robot_rtab rtabmap_localization.launch.py"
CMD_4="source /opt/ros/humble/setup.bash && source ~/wheeltec_ros2/install/setup.bash && ros2 launch wheeltec_robot_rtab wheeltec_slam_rtab.launch.py"

# ========== 菜单 ==========
echo "请选择要启动的功能(输入编号,用空格分隔):"
echo "1. 📷 启动摄像头"
echo "2. 🌪 启动雷达"
echo "3. 🚗 启动底盘控制"
echo "4. 🎹 启动键盘控制"
echo "5. 🗺 gmapping建图"
echo "6. 🌐 摄像头链接服务器"
echo "7. 🌐 WEB浏览器显示摄像头"
echo "8. 🗺 启动导航系统 (Nav2)"
echo "9. 🧭 RRT 自主探索建图"
echo "10. 🧠 RTAB-Map 建图1"
echo "11. 🧠 RTAB-Map 建图2"

read -p "请输入编号(例如:1 3 6): " choices

# ========== 函数 ==========
run_remote() {
  local title="$1"
  local cmd="$2"
  gnome-terminal -- bash -c "
    echo '正在连接 ${title}...';
    expect -c '
      spawn ssh -Y ${PI_USER}@${PI_IP}
      expect \"password:\"
      send \"${PI_PASS}\r\"
      expect \"\$ \"
      send \"${cmd}\r\"
      interact
    '
  "
}

# ========== 执行 ==========
for choice in $choices; do
  case $choice in
    1) run_remote "📷 摄像头" "$CMD_CAMERA" ;;
    2) run_remote "🌪 雷达" "$CMD_LIDAR" ;;
    3) run_remote "🚗 底盘控制" "$CMD_CHASSIS" ;;
    4) run_remote "🎹 键盘控制" "$CMD_KEYBOARD" ;;
    5) run_remote "🗺 gmapping建图" "$CMD_MAP" ;;
    6) run_remote "🌐 摄像头服务器" "$CMD_CW" ;;
    7) echo "正在打开浏览器..."; $CMD_WEB & ;;
    8) run_remote "🗺 Nav2 导航" "$CMD_1" ;;
    9) run_remote "🧭 RRT 自主探索" "$CMD_2" ;;
    10) run_remote "🧠 RTAB-Map 建图1" "$CMD_3" ;;
    11) run_remote "🧠 RTAB-Map 建图2" "$CMD_4" ;;
    *) echo "无效编号:$choice" ;;
  esac
done

四、脚本原理解析

部分功能说明
配置区设定树莓派 IP、用户名、密码以及各个 ROS2 命令
菜单区提示用户选择要启动的功能,可多选
run_remote() 函数使用 expect 自动输入密码并登录 SSH,随后执行 ROS2 命令
gnome-terminal每个任务独立开一个终端窗口并保持交互状态
🚀执行区根据输入编号执行对应命令,支持并行启动多个功能节点

五、使用方法

1️ 准备环境

确保你已在 Ubuntu PC 上安装以下工具:

sudo apt install expect gnome-terminal

并已配置 SSH 可连接至树莓派:

ssh wheeltec@192.168.0.100

2️ 赋予脚本可执行权限

chmod +x auto_ros_multi_ssh.sh

3️ 运行脚本

./auto_ros_multi_ssh.sh

4️ 按提示输入编号

示例:

请输入编号(例如:1 3 6): 1 2 3 4

系统将自动开启四个终端:

  • 📷 摄像头
  • 🌪 雷达
  • 🚗 底盘控制
  • 🎹 键盘控制

💡 六、脚本优化建议

优化点说明
使用 tmux可在单终端内开多个 pane,不依赖 GUI
使用 SSH 密钥登录免去 expect 输入密码
加入参数解析支持 --camera --lidar 等命令行参数
日志系统将每个节点的输出重定向到 log 文件中,方便调试

📸 七、运行示例

启动时界面:

请选择要启动的功能(输入编号,用空格分隔):
1. 📷 启动摄像头
2. 🌪 启动雷达
3. 🚗 启动底盘控制
4. 🎹 启动键盘控制
5. 🗺 gmapping建图
...
请输入编号(例如:1 3 6): 1 3 8

系统自动打开多个终端:

[📷 摄像头终端] 正在运行...
[🚗 底盘控制终端] 正在运行...
[🗺 Nav2 导航终端] 正在运行...

更多推荐