【ROS2】高级:模拟器-Webots-设置机器人模拟(高级)

目标:用障碍物避让节点扩展机器人模拟。

 教程级别:高级

 时间:20 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    •  1 更新 my_robot.urdf

    • 2 创建一个 ROS 节点以避免障碍物

    • 3 更新附加文件

    • 4 测试避障代码

  •  摘要

  •  下一步

 背景

在本教程中,您将扩展教程第一部分中创建的软件包:设置机器人模拟(基础)。目的是实现一个使用机器人距离传感器避开障碍物的 ROS 2 节点。本教程重点介绍使用具有 webots_ros2_driver 接口的机器人设备

 先决条件

这是教程第一部分的延续:设置机器人模拟(基础)。必须从第一部分开始设置自定义包和必要的文件。

本教程兼容 webots_ros2 版本 2023.1.0 和 Webots R2023b 以及即将发布的版本。

 任务

 1 更新 my_robot.urdf 

如设置机器人模拟(基础)中所述, webots_ros2_driver 包含可将大多数 Webots 设备直接与 ROS 2 连接的插件。这些插件可以使用机器人的 URDF 文件中的 <device> 标签加载。 reference 属性应与 Webots 设备的 name 参数匹配。所有现有接口及相应参数的列表可以在设备参考页面 https://github.com/cyberbotics/webots_ros2/wiki/References-Devices 上找到。对于未在 URDF 文件中配置的可用设备,接口将自动创建,并且 ROS 参数将使用默认值(例如 update rate 、 topic name 和 frame name )。

在 my_robot.urdf 中替换整个内容为:

Python:

<?xml version="1.0" ?>
<robot name="My robot">
    <!-- 定义机器人的名称为 "My robot" -->
    <webots>
        <!-- Webots 机器人仿真器相关配置 -->
        <device reference="ds0" type="DistanceSensor">
            <!-- 定义一个名为 ds0 的距离传感器设备 -->
            <ros>
                <!-- ROS 相关配置 -->
                <topicName>/left_sensor</topicName>
                <!-- 定义 ROS 话题名称为 /left_sensor -->
                <alwaysOn>true</alwaysOn>
                <!-- 设置传感器设备始终开启 -->
            </ros>
        </device>
        <device reference="ds1" type="DistanceSensor">
            <!-- 定义另一个名为 ds1 的距离传感器设备 -->
            <ros>
                <!-- ROS 相关配置 -->
                <topicName>/right_sensor</topicName>
                <!-- 定义 ROS 话题名称为 /right_sensor -->
                <alwaysOn>true</alwaysOn>
                <!-- 设置传感器设备始终开启 -->
            </ros>
        </device>
        <plugin type="my_package.my_robot_driver.MyRobotDriver" />
        <!-- 加载自定义插件 my_package.my_robot_driver.MyRobotDriver -->
    </webots>
</robot>

C++:

<?xml version="1.0" ?>
<robot name="My robot">
    <webots>
        <device reference="ds0" type="DistanceSensor">
            <ros>
                <topicName>/left_sensor</topicName>
                <alwaysOn>true</alwaysOn>
            </ros>
        </device>
        <device reference="ds1" type="DistanceSensor">
            <ros>
                <topicName>/right_sensor</topicName>
                <alwaysOn>true</alwaysOn>
            </ros>
        </device>
        <plugin type="my_robot_driver::MyRobotDriver" />
    </webots>
</robot>

除了您的自定义插件, webots_ros2_driver 将解析指向 DistanceSensor 节点的 <device> 标签,并使用 <ros> 标签中的标准参数来启用传感器并命名它们的主题。

2 创建一个 ROS 节点以避免障碍物

Python: 定义了一个名为ObstacleAvoider的类,继承自Node类。该类初始化时创建了两个订阅者,分别订阅left_sensorright_sensor话题,并定义了相应的回调函数。在回调函数中,根据传感器的距离值,发布控制机器人运动的Twist消息。主函数中,初始化rclpy,创建ObstacleAvoider节点对象,并进入循环等待消息。

机器人将使用标准的 ROS 节点来检测墙壁并发送电机命令以避开它。在 my_package/my_package/ 文件夹中,创建一个名为 obstacle_avoider.py 的文件,并使用以下代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值