Skip to content

Launch RVIZ and robot_description

ROS / ros eco / launch

Launch file template to load robot_description from xacro file and view in RVIZ

  • Set rviz config file path using PathJoinSubstitution
  • Set xacro file path using PathJoinSubstitution
  • Use command to run xacro
  • Use joint_state_publisher_gui to control joints
description.launch.py
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.substitutions import Command, PathJoinSubstitution
from launch_ros.actions import Node

PKG_DESCRIPTION = "m2wr_description"
PKG_BRINGUP = "robot_loc_bringup"
URDF_XACRO_FILE = "m2wr.xacro"
RVIZ_CONFIG = "rviz.rviz"

def generate_launch_description():
    ld =  LaunchDescription()

    config_file = PathJoinSubstitution([
        get_package_share_directory(PKG_BRINGUP),
        'config',
        RVIZ_CONFIG
    ])

    xacro_file = PathJoinSubstitution([
        get_package_share_directory(PKG_DESCRIPTION),
        'urdf',
        URDF_XACRO_FILE
    ])


    robot_description_config = Command(['xacro ', xacro_file])

    # Create a robot_state_publisher node
    params = {'robot_description': robot_description_config, 'use_sim_time': True}

    node_robot_state_publisher = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        output='screen',
        parameters=[params]
    )

    # ros2 run joint_state_publisher joint_state_publisher --ros-args --param zeros.wheel_right_joint:=0.0 --param zeros.wheel_left_joint:=1.0
    joint_state_publisher_node = Node(
        package='joint_state_publisher',
        executable='joint_state_publisher',
        output='screen',
        parameters=[params]
        )

    joint_state_publisher_gui_node = Node(
        package='joint_state_publisher_gui',
        executable='joint_state_publisher_gui',
        name="joint_state_gui",
        output='screen')

    # ros2 run rviz2 rviz2 -d  /workspace/src/turtlebot_bringup/config/config.rviz
    rviz_node = Node(
        package='rviz2',
        executable='rviz2',
        name='rviz2',
        output='screen',
        arguments=['-d', config_file]
    )

    ld.add_action(node_robot_state_publisher)
    # ld.add_action(joint_state_publisher_node)
    ld.add_action(joint_state_publisher_gui_node)
    ld.add_action(rviz_node)
    return ld

Install

install
sudo apt install ros-jazzy-joint-state-publisher-gui