一键创建ros2功能包的launch文件
为了方便一键创建所有的功能包下的launch文件,写了一个脚本文件
其是放在工作空间下运行,例如放在dev_ws下
- 脚本会遍历工作空间下的所有功能包
- 会在对应功能包下创建一个launch文件夹
- 在对应的launch文件夹下创建与功能包相同名字的.launch.py文件
- 添加功能包下的所有cpp文件对应的节点
ps:
- 本脚本只针对cpp的功能包,cmakelists.txt没有对应修改,需要手动修改
package="{package_name}",
executable="{cpp_file_name.replace('.cpp', '')}",
name="{cpp_file_name.replace('.cpp', '_node')}"
- 上面的一部分是需要根据实际情况进行修改,executable可执行文件名,name节点名
- 该脚本只进行了简单的创建,后续根据需求可自主开发,有问题大家可以一起交流
import os
def create_launch_files():
# 获取当前脚本所在的目录
script_folder = os.path.dirname(__file__)
src_folder = os.path.join(script_folder, "src")
# 获取src文件夹下的所有子目录(功能包)
packages = [d for d in os.listdir(src_folder) if os.path.isdir(os.path.join(src_folder, d))]
for package_name in packages:
package_folder = os.path.join(src_folder, package_name)
cpp_files = [f for f in os.listdir(os.path.join(package_folder, "src")) if f.endswith(".cpp")]
if cpp_files:
# 假设cpp文件列表中的第一个文件是主文件,以简化处理
cpp_file_name = cpp_files[0]
launch_folder_path = os.path.join(package_folder, "launch")
# 如果不存在,创建launch文件夹
os.makedirs(launch_folder_path, exist_ok=True)
# 创建launch文件内容
launch_content = f"""
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
node_dict = []
# 节点1
test_node = Node(
package="{package_name}",
executable="{cpp_file_name.replace('.cpp', '')}",
name="{cpp_file_name.replace('.cpp', '_node')}"
)
node_dict.append(test_node)
return LaunchDescription(node_dict)
"""
# 写入launch文件
launch_file_path = os.path.join(launch_folder_path, f"{cpp_file_name.replace('.cpp', '')}.launch.py")
with open(launch_file_path, "w") as launch_file:
launch_file.write(launch_content)
print(f"已为 {package_name} 创建 launch 文件: {launch_file_path}")
else:
print(f"错误:在 {package_folder} 中未找到 cpp 文件")
if __name__ == "__main__":
create_launch_files()