鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    问下ros2下launch.py文件的一些问题

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    ros2 launch文件 ros2-humble
    3
    7
    873
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 14452065981
      Larmes de caramel
      最后由 编辑

      最近在测试ros2的节点的开机自启和节点挂掉后自动重启,接触到了launch文件。现在就是问下使用launch.xml文件格式可用respawn ='true'设置自动重启,现在看ros2更推荐使用.py格式进行配置,问下.py下的节点重启是什么关键字。

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @1445206598
        最后由 编辑

        @1445206598
        在ROS 2中,用于启动和管理节点的.launch文件已经被.launch.py文件取代。在.launch.py文件中,可以使用Python代码编写更灵活和复杂的启动配置。如果你想实现节点的自动重启,你可以在.launch.py文件中使用launch.actions.RegisteredProcess来达到这个目的。

        以下是一个使用.launch.py文件实现节点自动重启的示例代码:

        from launch import LaunchDescription
        from launch.actions import DeclareLaunchArgument, LogInfo
        from launch.conditions import IfCondition
        from launch.substitutions import LaunchConfiguration
        from launch_ros.actions import Node
        from launch.actions import RegisterEventHandler
        from launch.event_handlers import OnProcessExit
        
        def generate_launch_description():
            return LaunchDescription([
                DeclareLaunchArgument('node_name', default_value='my_node', description='Name of the ROS node'),
                Node(
                    package='your_package',
                    executable='your_node_executable',
                    name=LaunchConfiguration('node_name'),
                    output='screen',
                    emulate_tty=True,
                ),
                RegisterEventHandler(
                    event_handler=OnProcessExit(
                        target_action=Node(
                            package='your_package',
                            executable='your_node_executable',
                            name=LaunchConfiguration('node_name'),
                        ),
                        on_exit=[
                            LogInfo(
                                condition=IfCondition(LaunchConfiguration('node_name')),
                                msg='Process for node has exited, restarting...',
                            ),
                        ],
                    ),
                ),
            ])
        

        在这个示例中,我们使用了launch_ros.actions.Node来启动节点,并且使用launch.actions.RegisterEventHandler来注册一个处理器,当节点退出时,它会触发一个事件,在事件处理中我们可以实现自动重启逻辑。

        请注意,上述代码只是一个示例,你需要将其修改以适应你的节点和包的配置。你需要替换'your_package'和'your_node_executable'为你实际的包名和节点可执行文件名。

        总结一下,对于ROS 2中节点的自动重启,推荐使用.launch.py文件并结合launch.actions.RegisteredProcess来实现。这种方式提供了更大的灵活性和控制权,允许你在节点退出时执行自定义的逻辑。

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        14452065981 2 条回复 最后回复 回复 引用 0
        • 14452065981
          Larmes de caramel @小鱼
          最后由 编辑

          @小鱼 好的谢谢,再请教一下像emulate_tty、output这些参数,是否有对应的文档解释其含义,一般配置节点除了设置包名、可执行程序还有哪些需要设置

          1 条回复 最后回复 回复 引用 0
          • 14452065981
            Larmes de caramel @小鱼
            最后由 编辑

            @小鱼 问下就是这个使用launch文件启动发现同一个节点cpu占用很高这个情况是正常的吗

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 小鱼小
              小鱼 技术大佬 @1445206598
              最后由 编辑

              @1445206598 详细说说

              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

              14452065981 1 条回复 最后回复 回复 引用 0
              • 14452065981
                Larmes de caramel @小鱼
                最后由 编辑

                @小鱼 这个问题已解决。

                1 1 条回复 最后回复 回复 引用 0
                • 1
                  1024130476 @1445206598
                  最后由 编辑

                  @1445206598 请问是怎么解决的啊,我也遇到了这个问题

                  1 条回复 最后回复 回复 引用 0
                  • 第一个帖子
                    最后一个帖子
                  皖ICP备16016415号-7
                  Powered by NodeBB | 鱼香ROS