Ubuntu下Qt配置shell启动并启动ros hector_quadrotor

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值