Skip to content

Latest commit

 

History

History
105 lines (67 loc) · 3.69 KB

一个脚本运行所有功能.md

File metadata and controls

105 lines (67 loc) · 3.69 KB
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到树莓派,执行树莓派保存的相应的脚本

遇到的一些问题:

  1. 用gnome-terminal新建窗口以后,无法先ssh等连接好了以后再执行上面的指令。执行的指令都在本机执行,没有很好的解决办法。替代方案是执行树莓派上提前写好的脚本,而不是传指令给树莓派

  2. 在Ubuntu 当中 执行脚本默认的使用的是dash,而非bash,执行能力较弱,有些指令可能执行失败,所以脚本前面需要添加#!/bin/bash

  3. 远程ssh执行树莓派的命令时,并没有打开一个bash,而是在后台运行,在./.bashrc里设置的环境变量是没有的,在执行ros相关命令之前之前先source一下

  4. 1

  5. 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的问题,修改源文件并备份

ssh环境变量的变化