Launch
【0】python里Launch启动节点
在功能包新建文件夹launch,在launch文件夹下新建launch文件,例如:test.launch.py,在launch文件中编写python代码,代码模板如下:
import launch
import launch_ros
def generate_launch_description(): #严格执行的命名规范
'''
generate_launch_description 的 Docstring
'''
action_node_turlesim_node = launch_ros.actions.Node(
package='turtlesim', #功能包名称
executable='turtlesim_node',# 可执行文件名称
output='screen'
)
action_node_target_manager_node= launch_ros.actions.Node(
package='pid_control_py',
executable='target_manager_node',
output='log'
)
action_node_tturtle_control_node = launch_ros.actions.Node(
package='pid_control_py',
executable='turtle_control_node',
output='both'
)
return launch.launch_description([ #严格执行的命名规范
action_node_turlesim_node,
action_node_target_manager_node,
action_node_tturtle_control_node,
])
在setup.py中添加:
from glob import glob #声明
package_name = 'pid_control_py'
#setup(
# name=package_name,
# version='0.0.0',
# packages=[package_name],
# data_files=[
# ('share/ament_index/resource_index/packages',
# ['resource/' + package_name]),
# ('share/' + package_name, ['package.xml']),
('share/' + package_name+"/launch",glob('launch/*.launch.py')), #添加这一行 ,全局匹配launch文件夹下的所有launch文件
# ],
# install_requires=['setuptools'],
# zip_safe=True,
# maintainer='root',
# maintainer_email='root@todo.todo',
# description='TODO: Package description',
【1】python里Launch传递参数
在launch文件中,可以通过launch_ros.actions.Node的arguments参数传递参数,例如:
action_declare_arg_xxx = launch.actions.DeclareLaunchArgument("名字", default_value="默认值",description="描述")
action_node_turlesim_node = launch_ros.actions.Node(
package='turtlesim', #功能包名称
executable='turtlesim_node',# 可执行文件名称
output='screen',
parameters=[{'参数名字':launch.substitutions.LaunchConfiguration('名字',default_value='默认值')}] #传递参数
)
return launch.LaunchDescription([action_declare_arg_xxx, #严格执行的命名规范记得添加
action_node_turlesim_node])
调用launch文件时,可以通过--参数名:=参数值的方式传递参数,例如:
ros2 launch pid_control_py test.launch.py 参数名:=参数值
【2】Launch三大组件:动作,替换,条件
动作
动作1:包含其他Launch文件,例如:
from ament_index_python import get_package_share_directory
def generate_launch_description():
action_include_launch_file = launch.actions.IncludeLaunchDescription(
launch.launch_description_source.PythonLaunchDescriptionSouce(get_package_share_directory('pid_control_py'),'launch','test.launch.py')
)
动作2:打印信息,例如:
action_print = launch.actions.LogInfo(
"打印信息"
)
动作3:执行命令行,例如:ros2 node list
action_execute_command = launch.actions.ExecuteProcess(
cmd=['ros2','node','list']
)
动作4:定时器,例如:
action_timer = launch.actions.TimerAction(
period=1.0,
actions=[action_print]
)
替换
替换1:LaunchConfiguration,例如:
action_declare_arg_xxx = launch.actions.DeclareLaunchArgument("名字", default_value="默认值",description="描述") #声明
rqt = launch.substitutions.LaunchConfiguration('名字',default_value='默认值') #替换
条件
condition = launch.conditions.IfCondition(rqt),