在执行ros程序时经常要进入工作空间,设置环境变量或者编译运行多条指令,如果每次打开终端逐条粘贴运行很麻烦,可以利用bash xxx.sh文件来批量执行sh中的指令,tmux可以后台打开多个终端窗口并执行。下面举个例子
一.示例操作流程需要执行的7条指令
如果修改了程序,则每次都需要手动粘贴这7条指令才行。
1.编译工作空间:
cd ~/ros2_ws
colcon build
2.设置环境变量:
source ~/ros2_ws/install/local_setup.bash
3.启动Turtlesim节点并添加第二个乌龟:
ros2 run turtlesim turtlesim_node
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: 'turtle2'}" #也可用rqt
4.运行你的圆形和矩形轨迹程序:
ros2 run turtlesim_circle turtlesim_circle
ros2 run turtlesim_square turtlesim_square
二.利用tmux批量执行命令
为了简化操作,可以使用脚本文件批量执行这些命令。这样可以避免手动逐条输入命令,提升效率。以下是一个示例脚本,可以帮助你自动化这些步骤。
1.创建批处理脚本
在你的工作空间目录(例如 ~/ros2_ws)中创建一个名为 run_turtlesim.sh 的脚本文件:
touch run_turtlesim.sh
chmod +x run_turtlesim.sh
编辑这个脚本文件,添加以下内容:
#!/bin/bash
# 设置环境变量
source /opt/ros/rolling/setup.bash
source ~/ros2_ws/install/local_setup.bash
# 编译工作空间
cd ~/ros2_ws
colcon build
# 启动tmux会话
tmux new-session -d -s turtlesim_session
# 在第一个窗口启动Turtlesim节点
tmux send-keys -t turtlesim_session "ros2 run turtlesim turtlesim_node" C-m
# 等待几秒以确保turtlesim_node已启动
sleep 2
# 添加第二个乌龟
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: 'turtle2'}"
# 竖直分屏
tmux split-window -h
# 在第二个窗口运行圆形轨迹程序
tmux send-keys -t turtlesim_session:0.1 "ros2 run turtlesim_circle turtlesim_circle" C-m
# 水平分屏
tmux split-window -v
# 在第三个窗口运行矩形轨迹程序
tmux send-keys -t turtlesim_session:0.2 "ros2 run turtlesim_square turtlesim_square" C-m
# 选择第一个窗格
tmux select-pane -t 0
# 启动tmux会话
tmux attach-session -t turtlesim_session
2.运行脚本
在终端中执行脚本:
bash run_turtlesim.sh
3.关闭后台脚本
新建kill_turtlesim.sh:
touch kill_turtlesim.sh
chmod +x kill_turtlesim.sh
nano kill_turtlesim.sh
kill_turtlesim.sh内容
tmux kill-session -t turtlesim_session
使用方法:在终端中执行脚本:
bash run_turtlesim.sh
这样,脚本会自动执行所有步骤,包括编译、设置环境、启动turtlesim_node、添加turtle2以及分别运行圆形和矩形轨迹程序。每个程序都会在一个新终端中运行,你可以同时观察两个乌龟的轨迹。
三. 查看、重连、关闭tmux对话
如果你关闭了终端窗口,稍后可以通过以下步骤重新连接到已经存在的 tmux 会话:
查看当前的 tmux 会话:
tmux ls
这将列出所有当前正在运行的 tmux 会话。例如,输出可能是:
turtlesim_session: 3 windows (created Thu Jul 15 12:34:56 2024) [80x24]
重新连接到会话:
tmux attach-session -t turtlesim_session
这样,你就可以重新连接到名为 turtlesim_session 的会话,并继续观察和控制那些正在运行的程序。
tmux 使用指南
以下是一些 tmux 的常用命令,可以帮助你更有效地使用 tmux:
创建新的会话:tmux new -s
列出所有会话:tmux ls
连接到一个会话:tmux attach -t
分离当前会话:Ctrl-b d(按下 Ctrl-b 后松开,然后按 d)
在会话中创建新窗口:Ctrl-b c
在窗口之间切换:Ctrl-b n(下一窗口)或 Ctrl-b p(上一窗口)
关闭当前窗口:exit 或 Ctrl-d
杀死会话:tmux kill-session -t