项目场景:
与上一篇文章相同,都是在运行bash文件时出现问题
在双击桌面图标后,.desktop可执行文件开始运行,在执行过程中出错。
问题描述
提示:这里描述项目中遇到的问题:
例如:,双击桌面图标后,.desktop可执行文件开始运行,在执行过程中,.sh文件中的python脚本运行出错,在python脚本中有引用的rclpy,出现本次错误、
下面是运行的python代码
import rclpy
from rclpy.node import Node
import os
def main():
# 初始化 ROS2
rclpy.init()
# 创建节点
node = rclpy.create_node("helloworld_py_node")
# 输出文本
node.get_logger().info("hello world!")
# 释放资源
rclpy.shutdown()
if __name__ == '__main__':
main()
# 初始化 ROS2
rclpy.init()
# 调用rclcpp的循环运行我们创建的second_node节点
rclpy.spin(Node("second_node"))
# 释放资源
rclpy.shutdown()
原因分析:
原因参考一位博主的博客
没有将内容source
解决方案:
具体代码如下:
gnome-terminal -- bash -c "cd /home/ros/tb3_ws/;source install/setup.bash;python3 src/test.py;sleep 5" & sleep 1
其中代码含义:
gnome-terminal: 打开一个新的终端窗口,几个launch文件就写几个gnome-terminal
-c: 后面写需要执行的命令,用分号 : 分隔相邻的命令
cd:后面加上你要执行的文件的具体路径
source install/setup.bash:在之后对环境进行source
python3 src/test.py:这句代码特殊性在于将src放到了具体的文件后面
第一个sleep:可以让窗口保持多长时间不关闭,碰到闪退的地方,可以查看错误
第二个sleep: 连续启动两个launch之间需要相隔一定时间,否则会相互抢占资源,导致其中一个roslaunch失败,报错
如果将其中代码写成这样cd /home/ros/tb3_ws/src;source install/setup.bash;python3 test.py;
同样会报这个错误。
因此最终写法为:
#!/bin/bash
gnome-terminal -- bash -c "cd /home/ros/tb3_ws/;source install/setup.bash;python3 src/test.py;sleep 5" & sleep 1
gnome-terminal -- bash -c "cd /home/ros/;source /opt/ros/humble/setup.bash;ros2 node list;sleep 5" & sleep 1
wait
exit 0
运行结果: