当前位置: 首页 > news >正文

ROS2 humble .launch.py启动文件编写

.launch.py启动文件编写

  • 启动节点
  • 最终一个完整的模版

多个节点要启动的时候,ros2 run的效率太低,所以使用了launch来启动。如果我都是只用Python脚本写的代码去控制机器人,好像也不需要去运行功能包的节点,也就不需要launch了。

启动节点

.launch文件中的运行节点的基础写法

<launch>
	<node pkg='xxx' type='xxx' name='xxx'>
	<node pkg='xxx' type='xxx' name='xxx'>
</launch>

.launch.py也一样有这样的,终端中运行功能包是这样的:

ros2 run pkg_name executable
# 比如启动rviz2是ros2 run rviz2 rviz2

启动时包括功能包名和可执行文件的名字,这样.launch.py中的Node就是按照这种形式写了功能包的名和可执行文件的名就能运行节点了。
generate_launch_description()是固定写法,LaunchDescription返回的是节点

from launch_ros.actions import Node

def generate_launch_description():
	robot_description_value=xxx
	default_rviz_config_path=xxx

	# 因为已经引入Node了,直接写actions_pkg1_node = Node()这样就行
	actions_pkg1_node = launch_ros.actions.Node(
		package='pkg1',
		executable='xxx',
		name='pkg1'
	)

	actions_robot_state_publisher = launch_ros.actions.Node(
		package='robot_state_publisher',
		executable='robot_state_publisher'
		parameters=[{'robot_description':robot_description_value}],
		name='robot_state_publisher'
		# 相当于下面这条命令
		# ros2 run robot_state_publisher robot_state_publisher --ros-args -p xx:=xxxvalue
	)
	
	actions_rviz_node = launch_ros.actions.Node(
		package='rviz2',
		executable='rviz2'
		arguments=['-d', default_rviz_config_path]
		name='rviz2'
		# ros2 run rviz2 rviz2 -d xxx
	)
	
   	return LaunchDescription([
		actions_pkg1_node,
		actions_pkg2_node,
		actions_rviz2_node
	])

最终一个完整的模版

from launch import LaunchDescription
from launch_ros.actions import Node
# 封装终端指令相关类
from launch.actions import ExecuteProcess
from launch.substitutions import FindExecutable
# 参数的声明与获取
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
# 文件包含相关
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
# 分组相关
from launch_ros.actions import PushRosNamespace
from launch.actions import GroupAction
# 事件相关
from launch.event_handlers import OnProcessStart, OnProcessExit
from launch.actions import ExecuteProcess, RegisterEventHandler, LogInfo
# 获取功能包下的shared目录路径
from ament_index_python.packages import get_package_share_directory


def generate_launch_description():
	

    return launch.LaunchDescription([

    ])

相关文章:

  • QML输入控件: Dial(1)
  • OLED 播放 GIF图片 Adruino
  • QT高效文件I/O编程--实用指南与最佳实践
  • 基于Spring Boot的网上购物商城系统的设计与实现(LW+源码+讲解)
  • c++:封装红黑树实现map与set
  • NVM安装速通使用手册(Windows版)NVM管理node版本命令手册 NVM使用手册
  • openmmlab介绍 一下
  • 大模型在原发性肺脓肿预测及治疗方案制定中的应用研究
  • Nuxt出现Error: Failed to download template from registry
  • 347 前k个高频元素
  • cli命令编写
  • OpenGL(三)管线介绍和三角形绘制
  • C++特殊类的设计
  • 二叉树相关算法实现:判断子树与单值二叉树
  • 线程未关闭导致资源泄漏
  • Halcon找圆心
  • c++some
  • 如何为你的github开源项目选择合适的开源协议?
  • Go 1.24 新特性解析:泛型类型别名、弱指针与终结器改进
  • HTTP抓包Websocket抓包(Fiddler)
  • 泽连斯基与埃尔多安会面,称已决定派遣代表团前往伊斯坦布尔
  • 华东政法与复旦上医签署合作框架协议,医学与法学如何交叉融合?
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 中巴续签双边本币互换协议,进一步深化金融战略合作
  • 广东省原省长卢瑞华逝世,享年88岁
  • 这个“超强致癌细菌”,宝宝感染率高达40%,预防却很简单