gnome-terminal -t "title-name" -x bash -c "sh ./run.sh;exec bash;"
-t 为打开终端的标题,便于区分。 -x 后面的为要在打开的终端中执行的命令,根据需要自己修改就行了。 最后的exec bash;是让打开的终端在执行完脚本后不关闭。
gnome-terminal -t "roscore" -x ssh [email protected] #roscore
gnome-terminal -t "base_control" -- pi #roslaunch base_control base_control.launch
gnome-terminal -t "vision" -x pi # roslaunch robot_vision robot_camera.launch
gnome-terminal -t "slam" -x pi # roslaunch robot_navigation robot_slam_laser.launch
gnome-terminal -t "/battery" -x pi #rostopic echo /battery
gnome-terminal -t "/odom" -x pi #rostopic echo /odom
gnome-terminal -t "keyboard" -x pi #rosrun teleop_twist_keyboard teleop_twist_keyboard.py
/opt/ros/kinetic/bin/roscore
解决思路:写一个脚本打开一个个窗口,ssh到树莓派,执行树莓派保存的相应的脚本
遇到的一些问题:
-
用gnome-terminal新建窗口以后,无法先ssh等连接好了以后再执行上面的指令。执行的指令都在本机执行,没有很好的解决办法。替代方案是执行树莓派上提前写好的脚本,而不是传指令给树莓派
-
在Ubuntu 当中 执行脚本默认的使用的是dash,而非bash,执行能力较弱,有些指令可能执行失败,所以脚本前面需要添加#!/bin/bash
-
远程ssh执行树莓派的命令时,并没有打开一个bash,而是在后台运行,在./.bashrc里设置的环境变量是没有的,在执行ros相关命令之前之前先source一下
-
1
-
4
在电脑ubuntu端执行一个脚本,这个脚本会ssh到树莓派执行树莓派对应模块的各个启动脚本
roscore.sh
#!/bin/bash
. /opt/ros/kinetic/setup.bash # 这里遇到的问题是,source无法在脚本当中运行,用. 来代替,注意后面的空格
. /home/nanorobot/catkin_ws/devel/setup.bash
roscore
base_control.sh
#!/bin/bash
. /opt/ros/kinetic/setup.bash # 这里遇到的问题是,source无法在脚本当中运行,用. 来代替,注意后面的空格
. /home/nanorobot/catkin_ws/devel/setup.bash
roslaunch base_control base_control.launch
robot_vision.sh
#!/bin/bash
echo "To see more information/quit, run in native environment."
echo "Launching robot_vision..."
export BASE_TYPE=NanoCar # 后述问题的解决办法
. /opt/ros/kinetic/setup.bash
. /home/nanorobot/catkin_ws/devel/setup.bash
roslaunch robot_vision robot_camera.launch
# 这里遇到了另一个问题,在ubuntu执行ssh附带脚本的时候,报出以下错误信息
Invalid <arg> tag: environment variable 'BASE_TYPE' is not set.
Arg xml is <arg default="$(env BASE_TYPE)" name="base_type"/>
The traceback for the exception was written to the log file
# 但是在树莓派端直接执行就没有问题,应该还是环境变量的问题,可是BASE_TYPE应该不是可以source的环境变量,也没有找到很好的方法,试过了远程执行BASE_TYPE="NanoCar",或者是放到脚本当中,都不行
# 最后的解决方法是把robot_camera.launch当中的<arg default="$(env BASE_TYPE)" name="base_type"/>
# 改成了<arg default="NanoCar" name="base_type"/>,原文件备份到了robot_camera.launch.original
# 更新: 找到了解决方法
roscore.sh
#!/bin/bash
. /opt/ros/kinetic/setup.bash # 这里遇到的问题是,source无法在脚本当中运行,用. 来代替,注意后面的空格
. /home/nanorobot/catkin_ws/devel/setup.bash
roslaunch robot_navigation robot_slam_laser.launch
# 这里也是遇到了basetype的问题,修改源文件并备份