ros2 / ros2/launch

[QST] Emit events through multiple launches.

Open
#668 1 comment 0 reactions 1 assignee View on GitHub

@methylDragon is already working on this.

Since Nov 17, 2022.

Dominant language
Python
Stars
155
Forks
182
Avg merge
2d 14h
Merged PRs (30d)
6

Description

Bug report

Required Info:

  • Operating System:
    • Ubuntu22.04
  • Installation type:
    • binary
  • Version or commit hash:
    • apt-newest
  • DDS implementation:
    • rmw_fastrtps_cpp
  • Client library (if applicable):
    • rclcpp and ros2launch
Steps to reproduce issue

the drive_base_node can be seen in https://github.com/micro-ROS/system_modes/blob/master/system_modes_examples/src/drive_base.cpp and adding initial configuration

with

// driver->set_parameter(rclcpp::Parameter("action", "move"));
  driver->trigger_transition(lifecycle_msgs::msg::Transition::TRANSITION_CONFIGURE);

first launch drive_base.launch.py

def generate_launch_description():
    return launch.LaunchDescription([
        launch_ros.actions.LifecycleNode(
            package='sm_guardian',
            executable='drive_base_node',
            name='drive_base',
            namespace='',
            output='screen')
    ])

then launch activate_drive.launch.py

import os

import launch
from launch import LaunchIntrospector

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.actions import EmitEvent
from launch.actions import LogInfo
from launch.actions import RegisterEventHandler
from launch_ros.actions import Node
from launch_ros.actions import LifecycleNode
from launch_ros.actions import SetParameter
from launch_ros.events.lifecycle import ChangeState
from launch_ros.event_handlers import OnStateTransition

import lifecycle_msgs.msg

def generate_launch_description():

    # Set LOG format
    # os.environ['RCUTILS_CONSOLE_OUTPUT_FORMAT'] = '{time}: [{name}] [{severity}]\t{message}'

    # Launch Description
    ld = launch.LaunchDescription()


    drive_base_node = LifecycleNode(
            package='sm_guardian',
            executable='drive_base_node',
            name='drive_base',
            namespace='',
            output='screen')

    drive_base_executable = 'drive_base_node'

    # Make the drive_base node take the 'configure' transition
    drive_base_configure_trans_event = EmitEvent(
        event=ChangeState(
            lifecycle_node_matcher = launch.events.process.matches_executable(drive_base_executable),
            transition_id = lifecycle_msgs.msg.Transition.TRANSITION_CONFIGURE,
        )
    )

    # drive_base_set_param = SetParameter('drive_base', )

    # Make the drive_base node take the 'activate' transition
    drive_base_activate_trans_event = EmitEvent(
        event = ChangeState(
            lifecycle_node_matcher = launch.events.process.matches_executable(drive_base_executable),
            transition_id = lifecycle_msgs.msg.Transition.TRANSITION_ACTIVATE,
         )
    )

    # Add the actions to the launch description.
    # The order they are added reflects the order in which they will be executed.
    # ld.add_action(drive_base_node)
    ld.add_action(drive_base_activate_trans_event)

    return ld

Expected behavior

the drive_base_node can be activated after the events emitted in activate_drive.launch.py

Actual behavior

the state cannote be activated after launching activate_drive.launch.py

Additional information

actually I do not know if it's a bug report or feature request.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.