自动 SSH 登录树莓派并启动 ROS2 功能 — auto_ros_multi_ssh.sh 全解析
·
自动 SSH 登录树莓派并启动 ROS2 功能 — auto_ros_multi_ssh.sh 全解析
一、项目简介
在进行 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 建图1 | rtabmap_localization.launch.py |
| 11 | 启动 RTAB-Map 建图2 | wheeltec_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 导航终端] 正在运行...
更多推荐

所有评论(0)