ros2 / ros2/launch

Default port and address of 'foxglove_bridge_launch.xml' not met when launching

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

@mjcarroll is already working on this.

Since Aug 8, 2024.

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

Description

Description

  • Version: ROS 2 Humble
  • Platform: Raspberry Pi 5 (using Ubuntu 22.04) connected to a PC (using Windows)

Steps To Reproduce
1°) On the one hand, by using the command line ros2 launch foxglove_bridge foxglove_bridge_launch.xml in the Ubuntu terminal, the address and the port are properly set judging by the terminal's feedback :

[INFO] [foxglove_bridge-1]: process started with pid [13913]
[foxglove_bridge-1] [INFO] [1721823866.109491784] [foxglove_bridge_component_manager]: Load Library: /opt/ros/humble/lib/libfoxglove_bridge_component.so
[foxglove_bridge-1] [INFO] [1721823866.120097007] [foxglove_bridge_component_manager]: Found class: rclcpp_components::NodeFactoryTemplate<foxglove_bridge::FoxgloveBridge>
[foxglove_bridge-1] [INFO] [1721823866.120203156] [foxglove_bridge_component_manager]: Instantiate class: rclcpp_components::NodeFactoryTemplate<foxglove_bridge::FoxgloveBridge>
[foxglove_bridge-1] [INFO] [1721823866.125399664] [foxglove_bridge]: Starting foxglove_bridge (humble, 0.7.7@) with WebSocket++/0.8.2
[foxglove_bridge-1] [INFO] [1721823866.126065432] [foxglove_bridge]: [WS] Server running without TLS
[foxglove_bridge-1] [INFO] [1721823866.126504308] [foxglove_bridge]: [WS] WebSocket server listening at ws://0.0.0.0:8765
[foxglove_bridge-1] [INFO] [1721823866.126538567] [foxglove_bridge]: [WS] WebSocket server run loop started

Therefore I can visualize things as expected in Foxglove Studio in the PC.

2°) On the other hand, I created the following launch file, which include the equivalent launch and other ROS2 functions:

from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription, ExecuteProcess
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_xml.launch_description_sources import XMLLaunchDescriptionSource
from launch_ros.actions import Node
import os

def generate_launch_description():
    # Include rosbridge websocket [launch file] :
    rosbridge_launch_path = os.path.join(get_package_share_directory('rosbridge_server'),
                                     'launch',
                                     'rosbridge_websocket_launch.xml')
    rosbridge_launch = IncludeLaunchDescription( XMLLaunchDescriptionSource(rosbridge_launch_path) )

    # Include foxglove bridge [launch file] :
    foxglove_bridge_launch_path = os.path.join(get_package_share_directory('foxglove_bridge'),
                                           'launch',
                                           'foxglove_bridge_launch.xml')
    foxglove_bridge_launch = IncludeLaunchDescription( XMLLaunchDescriptionSource(foxglove_bridge_launch_path) )

    # Include xsarm moveit [launch file] :
    xsarm_moveit_launch_path = os.path.join(get_package_share_directory('amlab_xsarm_moveit'),
                                            'launch',
                                            'xsarm_moveit.launch.py')
    xsarm_moveit_launch = IncludeLaunchDescription( PythonLaunchDescriptionSource(xsarm_moveit_launch_path),
        launch_arguments={'robot_model': 'wx250s', 'hardware_type': 'actual'}.items() )

    # Include ros2_service_wrapper.py [executable] :
    ros2_service_wrapper = ExecuteProcess( cmd=[ 'python3',
        os.path.join(get_package_share_directory('amlab_xsarm_moveit'), 'ros2_service_wrapper.py') ],
        output='screen')

    # Launch the whole :
    return LaunchDescription( [rosbridge_launch, foxglove_bridge_launch, xsarm_moveit_launch, ros2_service_wrapper] )


# Function to get packages paths :
def get_package_share_directory(package_name):
    from ament_index_python.packages import get_package_share_directory
    return get_package_share_directory(package_name)

In this way, the default address and port are not met as can be seen in the terminal feedback :
[foxglove_bridge-3] [INFO] [1721824501.660898719] [foxglove_bridge]: [WS] WebSocket server listening at ws://[::1]:9090
It should be ws://0.0.0.0:8765 instead of ws://[::1]:9090), so of course Foxglove Studio cannot get the data :(

3°) I can solve this by:
a) Specifying the address and the port as launch arguments in my launch file:

foxglove_bridge_launch = IncludeLaunchDescription( XMLLaunchDescriptionSource(foxglove_bridge_launch_path),
        launch_arguments={'port': '8765', 'address': '0.0.0.0'}.items() )

b) Inverting the order of rosbridge_launch and foxglove_bridge_launch in return LaunchDescription([...]).
By doing so I obtain ws://0.0.0.0:8765 as expected and Foxglove Studio works.

Expected Behavior
The result obtained at step 3°) should appear at the step 2°), since the port and the address are set by default to "8765" and "0.0.0.0" in foxglove_bridge_launch.xml, which is the file called by my launch code. What is the reason for this error?

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.