ROS2 入门应用 创建启动文件(Python)

ROS2 入门应用 创建启动文件(Python)

  • 1. 创建功能包
  • 2. 添加依赖关系
  • 3. 添加启动文件
  • 4. 创建启动文件
    • 4.1. Python
    • 4.2. XML
    • 4.3. YAML
  • 5. 编译和运行


1. 创建功能包

PythonXMLYAML编写的启动文件可以启动和停止不同的节点,以及触发和处理各种事件
提供这个框架的包是launch_ros,它在下面使用了非ROS特定的launch框架

那么就创建一个独立的py_launch_example 启动功能包

cd ~/ros2_ws/src
ros2 pkg create py_launch_example --build-type ament_python

在功能包中新建目录launch

cd ~/ros2_ws/src/py_launch_example
mkdir launch

2. 添加依赖关系

package.xml清单文件中,添加对依赖项的声明

<exec_depend>ros2launchexec_depend>

3. 添加启动文件

打开 setup.py 文件,添加所有launch启动文件:

import os                     # Add
from glob import glob         # Add
from setuptools import setup

package_name = 'py_launch_example'

setup(
    # Other parameters ...
    data_files=[
        # ... Other data files
        # Include all launch files.
        (os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*'))
    ]
)

4. 创建启动文件

进入launch文件夹,创建启动文件,启动两只海龟,并设置模仿运动

cd ~/ros2_ws/src/py_launch_example/launch

可以选择多种方式


4.1. Python

创建 turtlesim_mimic_launch.py 文件

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

启动文件应该定义generate_launch_description()函数
该函数返回一个launch. launchdescription(),以供ros2 launch使用


4.2. XML

创建 turtlesim_mimic_launch.xml 文件

<launch>
  <node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim1"/>
  <node pkg="turtlesim" exec="turtlesim_node" name="sim" namespace="turtlesim2"/>
  <node pkg="turtlesim" exec="mimic" name="mimic">
    <remap from="/input/pose" to="/turtlesim1/turtle1/pose"/>
    <remap from="/output/cmd_vel" to="/turtlesim2/turtle1/cmd_vel"/>
  node>
launch>

4.3. YAML

创建 turtlesim_mimic_launch.yaml 文件

launch:

- node:
    pkg: "turtlesim"
    exec: "turtlesim_node"
    name: "sim"
    namespace: "turtlesim1"

- node:
    pkg: "turtlesim"
    exec: "turtlesim_node"
    name: "sim"
    namespace: "turtlesim2"

- node:
    pkg: "turtlesim"
    exec: "mimic"
    name: "mimic"
    remap:
    -
        from: "/input/pose"
        to: "/turtlesim1/turtle1/pose"
    -
        from: "/output/cmd_vel"
        to: "/turtlesim2/turtle1/cmd_vel"

5. 编译和运行

进入工作空间根目录

cd ~/ros2_ws

编译:

colcon build --packages-select py_launch_example

现在可以打开一个新终端,启动海龟模仿运动启动文件,可以启动了两只海龟:

ros2 launch py_launch_example turtlesim_mimic_launch.py

再打开一个新终端,并在/turtlesim1/turtle1/cmd_vel主题上运行ros2 topic pub命令,让第一只海龟移动:

ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

会看到两只乌龟走相同路径

ROS2 入门应用 创建启动文件(Python)_第1张图片

打开一个新终端并运行rqt_graph,以更好地了解启动文件中节点之间的关系

rqt_graph

ROS2 入门应用 创建启动文件(Python)_第2张图片

终端命令ros2 topic pub将数据发布到左侧的/turtlesim1/turtle1/cmd_vel话题,/turtlesim1/sim节点订阅了该话题
模仿节点mimic订阅到/turtlesim1/turtle1/pose话题,并发布/turtlesim2/turtle1/cmd_vel话题,/turtlesim2/sim节点订阅了该话题
所以就呈现了两只乌龟走相同路径


谢谢

你可能感兴趣的:(ROS2,python,开发语言,ROS2)