机器人系统ros2-开发学习实践10-从零开始构建视觉机器人模型(urdf)

61 篇文章 1 订阅
54 篇文章 48 订阅

在本教程中,我们将构建一个看起来像 ROS2 的机器人视觉模型。在后面的教程中,您将学习如何阐明模型、添加一些物理属性以及使用 xacro
生成更简洁的代码,但现在,我们将专注于获得正确的视觉几何。

在继续之前,请确保您已安装joint_state_publisher软件包。

joint_state_publisher是一个ROS包,它可以将关节状态发布到一个ROS主题上,以便其他节点可以订阅它。这个包通常用于机器人模拟,将机器人模型的关节状态发布到
ROS 环境中,让其他节点可以订阅并使用

安装joint_state_publisher

ros2 humble安装joint_state_publisher功能包

sudo apt install ros-humble-robot-state-publisher

安装urdf_tutorial

下载urdf_tutorial 示例工程源代码

cd ~/ros2_study
git clone -b ros2 https://github.com/ros/urdf_tutorial.git src/urdf_tutorial

在工作区的根目录中运行rosdep以检查是否缺少依赖项。

rosdep install -i --from-path src --rosdistro humble -y

仍然在工作区的根目录中构建您的包:

colcon build --packages-select urdf_tutorial

打开一个新终端,导航到工作区的根目录,然后获取安装文件:

. install/setup.bash

定义单个形状的

首先,我们将探索一个简单的形状。这就像您可以制作的 urdf 一样简单

<?xml version="1.0"?>
<robot name="myfirst">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>
</robot>

将 XML 翻译成英文,这是一个名为 的机器人myfirst,仅包含一个链接link (也称为零件),其视觉visual组件只是一个长 0.6 米、半径 0.2 米的圆柱体。

要检查模型,请启动文件display.launch.py:

ros2 launch urdf_tutorial display.launch.py model:=urdf/01-myfirst.urdf

display.launch.py 做了三件事:

  • 加载指定的模型并将其保存为robot_state_publisher节点的参数。

  • 运行节点来发布sensor_msgs/msg/JointState并进行转换

  • 使用配置文件启动 Rviz

启动后display.launch.py,RViz 应该会向您显示以下内容:

在这里插入图片描述

上面演示了单个形状的urdf 定义后的效果,接下来继续添加形状

多个形状

现在让我们看看如何添加多个形状/链接。

如果我们只是向 urdf 添加更多链接元素,解析器将不知道将它们放在哪里。所以,我们必须添加关节。

关节元件可以指柔性关节和非柔性关节。我们将从不灵活或固定的关节开始

新增一个形状,也就是新增一个零件,定义零件的名字以及大小

<link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
    </visual>
  </link>

然后定义这个新增的零件放在什么位置

  • 定义关节的名称 name="base_to_right_leg"
  • type="fixed" 类型为 固定关节
  • parent link="base_link" 就是依赖零件
  <joint name="base_to_right_leg" type="fixed">
    <parent link="base_link"/>
    <child link="right_leg"/>
  </joint>

这样就定义了两个零件形状的机器人,新的urdf 如下:

<?xml version="1.0"?>
<robot name="multipleshapes">
  <link name="base_link">
    <visual>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
    </visual>
  </link>

  <joint name="base_to_right_leg" type="fixed">
    <parent link="base_link"/>
    <child link="right_leg"/>
  </joint>

</robot>

注意我们如何定义 0.6mx 0.1mx 0.2m 的盒子

关节是根据父项和子项定义的。 URDF 最终是一种具有一个根链接的树结构。这意味着腿的位置取决于 base_link 的位置。

  • <joint name="base_to_right_leg" type="fixed">:定义了一个名为 “base_to_right_leg” 的关节,并指定了关节类型为 “fixed”。固定关节(fixed joint)意味着两个链接之间没有相对运动,即 “right_leg” 与 “base_link” 固定不动。
  • <parent link="base_link"/>:这行指定了父链接为 “base_link”。在URDF中,父链接是子链接附加的对象。
  • <child link="right_leg"/>:这行指定了子链接为 “right_leg”。在这种情况下,“right_leg” 将被固定到 “base_link” 上。

定义好之后我们重新走一遍上面的流程,编译-运行-看效果

在这里插入图片描述

  • 注意我们如何定义 0.6mx 0.1mx 0.2m 的盒子

  • 关节是根据父项和子项定义的。 URDF 最终是一种具有一个根链接的树结构。这意味着腿的位置取决于 base_link 的位置。

  • 两个形状相互重叠,因为它们具有相同的起源。如果我们希望它们不重叠,我们必须定义更多的原点。

调整附加零件的坐标位置以及方向

新增的零件在侧面连接到他躯干的上半部分。这就是我们指定 JOINT 的起源的地方。另外,它不会附着在腿的中间,而是附着在上部,因此我们也必须偏移腿的原点。我们还旋转腿,使其直立。

修改这个零件的定义,新的定义如下:

修改前:

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
    </visual>
  </link>

修改后:

  <link name="right_leg">
    <visual>
      <geometry>
        <box size="0.6 0.1 0.2"/>
      </geometry>
      <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>
    </visual>
  </link>

新增了这行: <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>

  • <origin rpy="0 1.57075 0" xyz="0 0 -0.3"/>:这行定义了部件的原点相对于父链接的位置和方向。
    rpy=“0 1.57075 0”:这表示围绕x、y、z轴的旋转(Roll, Pitch, Yaw),单位是弧度。这里的设置意味着围绕y轴旋转约90度(π/2 或 1.57075 弧度)。
    xyz=“0 0 -0.3”:这定义了部件的位移,沿着z轴向下移动0.3米。

让我们再来观察一下现在机器人形状在Rviz 里是一个怎么样的形态。

老套路,编译-运行

在这里插入图片描述

再定义关节位置属性

新增的关节urdf表示如下:

 <joint name="base_to_right_leg" type="fixed">
    <parent link="base_link"/>
    <child link="right_leg"/>
    <origin xyz="0 -0.22 0.25"/>
  </joint>

:这行定义了关节的原点相对于父链接(“base_link”)的位置。
xyz=“0 -0.22 0.25”:这表示关节的位置位于父链接的原点之上,在y轴方向上偏移-0.22米(向左),在z轴方向上偏移0.25米(向上)。

新增效果如下:

在这里插入图片描述

回顾:在这里我们定义了一个机器人的机身,又定义了它的一条右腿,左腿比机身高一点。接下来 自己尝试着定义机器人的左腿,这样更能加深自己的理解和印象。

  • 31
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学习AI人工智能技术并从零开始开发XR-ROS SLAM自主导航机器人是一个需要坚持和耐心的过程。首先,需要了解人工智能、机器学习和深度学习的基本概念。在学习这些概念的同时,也要掌握编程基础知识,例如Python语言和ROS机器人操作系统)的使用。 接下来,了解SLAM(Simultaneous Localization and Mapping)技术,它是机器人导航领域的重要技术。SLAM可以帮助机器人同时实现对环境的感知与建图,并维持其在环境中的定位。 要开始开发XR-ROS SLAM自主导航机器人,首先需要选择合适的硬件平台,如使用激光传感器进行环境感知和定位。 然后,利用ROS开发平台,学习创建机器人模型、建立地图等基本操作。可以使用RViz等图形化工具帮助可视化机器人的运动和建图过程。 在完成这些基本操作后,可以开始学习SLAM算法,如ORB-SLAM、LSD-SLAM等。通过理解算法的原理和实现,可以将其应用到XR-ROS SLAM自主导航机器人开发中。 在开发过程中需要不断学习实践,将SLAM算法与机器人的传感器数据进行融合,优化机器人的导航能力。同时,将机器学习和深度学习的技术应用到机器人的决策和路径规划中,提高机器人的智能水平。 最后,要持续关注和学习最新的研究和技术进展,不断提升自己的技术水平。通过不断实践和探索,才能在AI人工智能技术中从零开始学会XR-ROS SLAM自主导航机器人开发

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海聊智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值