2024-07-16T15:49:28.png
在执行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

发表评论