5.6.6 乌龟护航实现(Python)

1.编写 launch 文件

功能包 py05_exercise 的 launch 目录下新建文件exer02_turte_escort.launch.xml,并编辑文件,输入如下内容:

<launch>
    <!-- 乌龟准备 -->
    <node pkg="turtlesim" exec="turtlesim_node" name="t1" />
    <node pkg="py05_exercise" exec="exer01_tf_spawn_py" name="t2" />
    <node pkg="py05_exercise" exec="exer01_tf_spawn_py" name="t3" >
        <param name="turtle_name" value="turtle3"/>
        <param name="x" value="2.0"/>
        <param name="y" value="8.0"/>
    </node>
    <node pkg="py05_exercise" exec="exer01_tf_spawn_py" name="t4" >
        <param name="turtle_name" value="turtle4"/>
        <param name="x" value="8.0"/>
        <param name="y" value="2.0"/>
    </node>
    <!-- 发布坐标变换 -->
    <node pkg="py05_exercise" exec="exer02_tf_broadcaster_py" name="tf_broadcaster1_py">
    </node>
    <node pkg="py05_exercise" exec="exer02_tf_broadcaster_py" name="tf_broadcaster2_py">
        <param name="turtle_name" value="turtle2" />
    </node>
    <node pkg="py05_exercise" exec="exer02_tf_broadcaster_py" name="tf_broadcaster3_py">
        <param name="turtle_name" value="turtle3" />
    </node>
    <node pkg="py05_exercise" exec="exer02_tf_broadcaster_py" name="tf_broadcaster4_py">
        <param name="turtle_name" value="turtle4" />
    </node>
    <!-- 发布乌龟目标坐标 -->
    <node pkg="tf2_ros" exec="static_transform_publisher" name="goal_tf1" args="--x -1 --frame-id turtle1 --child-frame-id goal1"/>
    <node pkg="tf2_ros" exec="static_transform_publisher" name="goal_tf2" args="--y 1 --frame-id turtle1 --child-frame-id goal2"/>
    <node pkg="tf2_ros" exec="static_transform_publisher" name="goal_tf3" args="--y -1 --frame-id turtle1 --child-frame-id goal3"/>
    <!-- 监听坐标变换 -->
    <node pkg="py05_exercise" exec="exer03_tf_listener_py" name="tf_listener_py1">
        <param name="target_frame" value="turtle2" />
        <param name="source_frame" value="goal1" />
    </node>
    <node pkg="py05_exercise" exec="exer03_tf_listener_py" name="tf_listener_py2">
        <param name="target_frame" value="turtle3" />
        <param name="source_frame" value="goal2" />
    </node>
    <node pkg="py05_exercise" exec="exer03_tf_listener_py" name="tf_listener_py3">
        <param name="target_frame" value="turtle4" />
        <param name="source_frame" value="goal3" />
    </node>
</launch>

2.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select py05_exercise

3.执行

当前工作空间下启动终端,输入如下命令运行launch文件:

. install/setup.bash 
ros2 launch py05_exercise exer02_turtle_escort.launch.xml

此时窗口中会新生成三只乌龟,向原生乌龟 turtle1 运动,并会组成固定队形。

再新建终端,启动 turtlesim 键盘控制节点:

ros2 run turtlesim turtle_teleop_key

该终端下可以通过键盘控制 turtle1 运动,并且护航的乌龟会按照特定队形跟随 turtle1 运动。最终的运行结果与演示案例类似。

results matching ""

    No results matching ""