在Gazebo Garden中使创建好的机器人动起来

背景

系统

Ubuntu20.04

ROS版本

ROS2 Foxy
安装教程

Gazebo版本

Gazebo Garden
安装教程

在Gazebo中创建好一个机器人模型

创建教程

原版教程

Moving The Robot

移动机器人

在本教程中,我们将学习如何移动我们的机器人。我们将使用在“在Gazebo Garden中创建一个机器人”教程中构建的机器人。你可以从这里下载机器人。你也可以在这里找到本教程的成品世界描述文件。

什么是插件

为了让我们的机器人动起来,我们将使用 diff_drive 插件。但在此之前,让我们先回答一个问题:“什么是插件?”插件是作为共享库编译的代码块,并插入到模拟中。插件使我们能够控制模拟的许多方面,如世界、模型等。

Diff_drive 插件

diff_drive 插件可以帮助我们控制机器人,特别是可以进行差动驱动的机器人。让我们在机器人上设置该插件。打开 building_robot.sdf,并在 vehicle_blue 模型标签内添加以下代码:

<plugin
    filename="gz-sim-diff-drive-system"
    name="gz::sim::systems::DiffDrive">
    <left_joint>left_wheel_joint</left_joint>
    <right_joint>right_wheel_joint</right_joint>
    <wheel_separation>1.2</wheel_separation>
    <wheel_radius>0.4</wheel_radius>
    <odom_publish_frequency>1</odom_publish_frequency>
    <topic>cmd_vel</topic>
</plugin>

<plugin> 标签有两个属性,filename 表示库文件名,name 表示插件名。在<left_joint> <right_joint> 标签中,我们定义了连接机器人左右车轮和车身的关节,在我们的例子中是 left_wheel_jointright_wheel_joint<wheel_separation>表示两个车轮之间的距离。我们的机器人的左车轮在 y 轴上相对于底盘的位置是 0.6 米,右车轮在 y 轴上相对于底盘的位置是-0.6 米,因此轮距是 1.2 米。<wheel_radius>表示车轮的半径,它是在车轮链接的 <radius>标签下定义的。<odom_publish_frequency>设置了发布里程计数据的频率,发布到 /model/vehicle_blue/odometry 路径下。cmd_vel 是 DiffDrive 插件的输入 <topic>

话题和消息

现在我们的模型已经准备好了。我们只需要向它发送命令(消息)。这些消息将发布(发送)到上面定义的 cmd_vel 主题上。
topic只是为特定的一组消息或特定的服务定义的名称。我们的模型将订阅(监听)发送到 cmd_vel 主题上的消息。
启动机器人仿真世界:

gz sim building_robot.sdf

在另一个终端,让我们向我们的机器人发送一条消息:

gz topic -t "/cmd_vel" -m gz.msgs.Twist -p "linear: {x: 0.5}, angular: {z: 0.05}"

现在你应该看到你的机器人在仿真器中移动了。
注意: 别忘了在仿真器中按播放按钮启动仿真,不然机器人是不会有反应的。

该命令使用 -t 选项指定要发布到的主题。在 -m 之后,我们指定消息类型。我们的机器人期望 Twist 类型的消息,它由两个组件组成,线性和角度。在 -p 选项之后,我们指定消息的内容(值):线速度 x: 0.5 和角速度 z: 0.05。
提示:你可以使用这个命令来了解每个gz topic命令选项的作用:

gz topic -h

有关 Gazebo 中主题和消息的更多信息,请查看传输库教程

使用键盘移动机器人

我们将使用键盘按键来发送消息,而不是从终端发送消息。为此,我们将添加两个新的插件:KeyPublisherTriggeredPublisher

Key Publisher

KeyPublisher 是一个 gz-gui 插件,用于读取键盘按键并将其发送到默认主题 /keyboard/keypress 上。我们可以按以下方式尝试此插件:

  • 在一个终端中输入:
    gz sim building_robot.sdf
    
    在右上角点击插件下拉列表(垂直省略号),然后点击 Key Publisher
  • 在另一个终端中输入:
    gz topic -e -t /keyboard/keypress
    
    最后一个命令将显示发送到 /keyboard/keypress 主题的所有消息。

在 Gazebo 窗口中按不同的键,你应该会在运行 gz topic -e -t /keyboard/keypress 命令的终端上看到数据(数字)。
在这里插入图片描述
我们希望将这些按键映射为 Twist 类型的消息,并将其发布到我们的模型正在监听的 /cmd_vel 主题上。TriggeredPublisher 插件将执行此操作。

Triggered Publisher

TriggeredPublisher 插件根据用户指定的条件,在响应输入消息时在输出主题上发布用户指定的消息。让我们在<world>标签下添加以下代码:

<!-- Moving Forward-->
<plugin filename="gz-sim-triggered-publisher-system"
        name="gz::sim::systems::TriggeredPublisher">
    <input type="gz.msgs.Int32" topic="/keyboard/keypress">
        <match field="data">16777235</match>
    </input>
    <output type="gz.msgs.Twist" topic="/cmd_vel">
        linear: {x: 0.5}, angular: {z: 0.0}
    </output>
</plugin>

这段代码定义了触发发布插件。它接受类型为 gz.msgs.Int32/keyboard/keypress 主题上的消息,如果数据字段中的值与 16777235(向上箭头键)匹配,则在 cmd_vel 主题上输出一个 Twist 消息,其中 x 值为 0.5,z 值为 0.0。

现在启动 building_robot.sdf,然后添加 Key Publisher 插件,我们的机器人应该在我们按下向上箭头键 ↑ 时向前移动(确保你通过按下播放按钮启动仿真,以便在按下向上箭头键后看到机器人向前移动)。

接下来我们通过一个demo解释触发发布插件如何起作用。

通过方向键移动机器人

要查看按箭头键时在 /keyboard/keypress 主题上发送的值,可以使用 –echo-e 选项。

  • 在一个终端中运行模型:

    gz sim building_robot.sdf
    

    在右上角点击插件下拉列表(垂直省略号),然后点击 Key Publisher

  • 在另一个终端中运行以下命令:

    gz topic -e -t /keyboard/keypress
    

    开始按箭头键,看看它们给出的值:

    • Left ← : 16777234
    • Up ↑ : 16777235
    • Right → : 16777236
    • Down ↓ : 16777237

我们将为每个箭头键添加触发发布插件。例如,对于向下箭头:

<!-- Moving Backward-->
<plugin filename="gz-sim-triggered-publisher-system"
        name="gz::sim::systems::TriggeredPublisher">
    <input type="gz.msgs.Int32" topic="/keyboard/keypress">
        <match field="data">16777237</match>
    </input>
    <output type="gz.msgs.Twist" topic="/cmd_vel">
        linear: {x: -0.5}, angular: {z: 0.0}
    </output>
</plugin>

将每个箭头(按键)与所需的消息(移动)映射,就像我们对向后箭头所做的那样:

  • Left ➞ 16777234 ➞ linear: {x: 0.0}, angular: {z: 0.5}
  • Up ➞ 16777235 ➞ linear: {x: 0.5}, angular: {z: 0.0}
  • Right ➞ 16777236 ➞ linear: {x: 0.0}, angular: {z: -0.5}
  • Down ➞ 16777237 ➞ linear: {x: -0.5}, angular: {z: 0.0}

现在轮到你尝试使用不同的键来移动机器人了。
在下一个教程中,你将学习如何使用 SDF 创建自己的仿真世界。

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值