shell文件内容
1.在执行roscore
创建master节点后,由于命令未执行完成,不会继续执行bash后续命令,解决方法:
在roscore
后添加&
:当要执行的命令以 & 结尾时,这个命令会在后台子 shell 执行,当前 shell 不会等待这个命令执行完成,可以继续执行下一个命令。
roscore&roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch
2.gnome-terminal
命令开启通信失败,可能是子shell的端口不一致,因此在roslaunch时不能使用&
3.改用;
,即roscore;roslaunch hector_quadrotor_demo outdoor_flight_gazebo.launch
尝试无效,与系统命令不同,ros相关命令必须先返回结果才能继续运行下一命令
4.先运行roscore
之后再创建两个终端分别运行和操控无人机
5.顺序运行,否则无法正常建立节点关系
6.rosnode kill -a
关闭quadrotor会导致后续重新launch出现问题,节点间关系不能正常建立,此时使用ps -ef | grep gazebo | awk '{print $2}' | xargs kill -9
直接kill所有关于gazebo的进程
(管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入;ps -ef
是linux里查看所有进程的命令;这时检索出的进程将作为下一条命令grep gazebo
的输入;awk '{print $2}'
选择返回的文本中的第二项PID;xargs kill -9
把前面命令的输出结果(PID)强行杀掉)
Qt内运行
1.system
指令直接运行roscore无效,需要先source /opt/ros/kinetic/setup.bash
,再添加一个shell文件,运行roscore,除roscore可以直接在qt内输出结果外,另外两个必须各自开启一个新终端避免地面站界面失去响应
2.将三个shell文件复制至qt项目的build目录,可以直接使用相对路径
3.keyboard.sh文件中的gnome-terminal -x bash -c "rosservice call /enable_motors "enable: true""
出现类型错误,将命令内的双引号改为单引号gnome-terminal -x bash -c "rosservice call /enable_motors 'enable: true' "
4.确保三个shell顺序运行,尝试Qt内设置等待时间,无效;解决方法:直接在shell中设置sleep时间,设置为roscore +0.5s quadrotor +9s keyboard