如何将启动文件ros1转换为ros2



我用XML格式编写了以下启动文件,在ros1中运行良好,但是我无法在ros2中启动它。

<launch>
<arg
name="model" />
<param
name="robot_description"
textfile="$(find mobile_robot)/urdf/mobile_robot.urdf" />
<node
name="joint_state_publisher_gui"
pkg="joint_state_publisher_gui"
type="joint_state_publisher_gui" />
<node
name="robot_state_publisher"
pkg="robot_state_publisher"
type="robot_state_publisher" />
<node
name="rviz"
pkg="rviz"
type="rviz"
args="-d $(find mobile_robot)/urdf.rviz" />
</launch>

您应该查看有关转换启动文件的官方文档。tl;dr版本为:"type"标签改为"exec","ns"标签改为"namespace"。也没有全局参数,并且textfile参数类型已被删除(两者都与您的代码相关)。最后,rviz不是ros2包;现在是rviz2

我还建议你在以后的文章中对你的启动文件进行格式化,这并没有遵循ros格式标准,而且相当难以阅读。

你可以这样写,

import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.actions import Node
def generate_launch_description():
use_sim_time = LaunchConfiguration('use_sim_time', default='true')
urdf = os.path.join(
get_package_share_directory('mobile_robot'),
'urdf',
'mobile_robot.urdf')

rviz = os.path.join(
get_package_share_directory('mobile_robot'), 'urdf.rviz')          
return LaunchDescription([
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(pkg_gazebo_ros, 'launch', 'gzserver.launch.py')
),
launch_arguments={'world': world}.items(),
),
IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(pkg_gazebo_ros, 'launch', 'gzclient.launch.py')
),
),

Node(
package='robot_state_publisher',
executable='robot_state_publisher',
name='robot_state_publisher',
output='screen',
parameters=[{'use_sim_time': use_sim_time}],
arguments=[urdf]),

Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz],
output='screen'),
])

最新更新