当前位置: 首页 > 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([

    ])
http://www.dtcms.com/a/92022.html

相关文章:

  • 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)
  • tar包部署rabbitMQ
  • 进阶版孟德尔随机化方法!遗传变异聚类+异质性检验,避免水平多效性带来的假阳性结果(PCMR)
  • C++ 命名空间
  • 【neo4j数据导出并在其他电脑导入】
  • SQL问题分析与诊断(8)——前提
  • 动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析
  • 登山第二十一梯:点云补全——零样本、跨激光分布的“泥瓦匠”
  • 计算机二级(C语言)考试高频考点总汇(一)—— C语言通识、数据类型和运算符、位运算、进制转换、进制转换方法
  • LabVIEW柔性机械臂减振控制系统
  • LeetCode算法题(Go语言实现)_12