热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:《ROS理论与实践》学习笔记URDF机器人建模

篇首语:本文由编程笔记#小编为大家整理,主要介绍了《ROS理论与实践》学习笔记URDF机器人建模相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了《ROS理论与实践》学习笔记URDF机器人建模相关的知识,希望对你有一定的参考价值。








《ROS理论与实践》学习笔记(四)URDF机器人建模


  • 课程内容
    • 1.URDF建模方法
    • 2.机器人建模功能包创建
    • 3.检查urdf模型结构

  • 本讲作业
    • 创建一个自己的机器人模型

  • 结语


在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第五讲:URDF机器人建模 。主要学习了ROS的URDF建模方法。




课程内容

1.URDF建模方法



  1. 描述机器人某个刚体部分的外观和物理属性

  2. 描述两个link之间的关系,包括关节运动的位置和速度限制

关节类型描述
continuous旋转关节 ,可绕单轴无限旋转
rebolute旋转关节,有旋转角度极限
prismatic滑动关节,右位置极限
planar平面关节,允许在平面正交方向上平移或旋转
floating浮动关节,允许平移、旋转运动
fixed固定关节


  1. 机器人模型顶层标签

    <robot name&#61;"xxx">
    <link> ... link>
    <link> ... link>
    <joint> ... joint>
    <joint> ... joint>
    robot>


2.机器人建模功能包创建

$ catkin_create_pkg mybot_description urdf xacro

文件夹名称功能
urdf存放机器人模型的urdf或xacro文件
meshes放置urdf中引用的模型渲染文件
launch保存相关启动文件
config保存rviz的配置文件

3.检查urdf模型结构

$ urdf_to_graphiz mybot_base.urdf



本讲作业

创建一个自己的机器人模型

urdf模型文件如下&#xff1a;


<robot name&#61;"mybot">
<link name&#61;"base_link">
<visual>
<origin xyz&#61;" 0 0 0" rpy&#61;"0 0 0" />
<geometry>
<cylinder length&#61;"0.05" radius&#61;"0.20"/>
geometry>
<material name&#61;"yellow">
<color rgba&#61;"1 0.4 0 1"/>
material>
visual>
link>
<joint name&#61;"left_motor_joint" type&#61;"fixed">
<origin xyz&#61;"-0.1 0.11 0" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"left_motor_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"left_motor_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>

geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"left_wheel_joint" type&#61;"continuous">
<origin xyz&#61;"0 0.1025 0" rpy&#61;"0 0 0"/>
<parent link&#61;"left_motor_link"/>
<child link&#61;"left_wheel_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"left_wheel_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>

geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"right_motor_joint" type&#61;"fixed">
<origin xyz&#61;"-0.1 -0.11 0" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"right_motor_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"right_motor_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>

geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"right_wheel_joint" type&#61;"continuous">
<origin xyz&#61;"0 -0.1025 0" rpy&#61;"0 0 0"/>
<parent link&#61;"right_motor_link"/>
<child link&#61;"right_wheel_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"right_wheel_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"1.5707 0 0" />
<geometry>

geometry>
<material name&#61;"white">
<color rgba&#61;"1 1 1 0.9"/>
material>
visual>
link>
<joint name&#61;"front_caster_joint" type&#61;"continuous">
<origin xyz&#61;"0.18 0 -0.025" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"front_caster_link"/>
<axis xyz&#61;"0 1 0"/>
joint>
<link name&#61;"front_caster_link">
<visual>
<origin xyz&#61;"0 0 -0.025" rpy&#61;"1.5707 0 0"/>
<geometry>

geometry>
<material name&#61;"black">
<color rgba&#61;"0 0 0 0.95"/>
material>
visual>
link>
<link name&#61;"camera_link">
<visual>
<origin xyz&#61;" 0 0 0 " rpy&#61;"0 0 0" />
<geometry>
<box size&#61;"0.03 0.04 0.04" />
geometry>
<material name&#61;"black">
<color rgba&#61;"0 0 0 0.95"/>
material>
visual>
link>
<joint name&#61;"camera_joint" type&#61;"fixed">
<origin xyz&#61;"0.17 0 0.025" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"camera_link"/>
joint>
<link name&#61;"kinect_link">
<visual>
<origin xyz&#61;"0 0 0" rpy&#61;"0 0 1.5708"/>
<geometry>
<mesh filename&#61;"package://mybot_description/meshes/kinect.dae" />
geometry>
visual>
link>
<joint name&#61;"kinect_joint" type&#61;"fixed">
<origin xyz&#61;"0.11 0 0.06" rpy&#61;"0 0 0"/>
<parent link&#61;"base_link"/>
<child link&#61;"kinect_link"/>
joint>
robot>

launch文件代码如下&#xff1a;

<launch>
<param name&#61;"robot_description" textfile&#61;"$(find mybot_description)/urdf/mybot_all.urdf" />

<param name&#61;"use_gui" value&#61;"true"/>


<node name&#61;"joint_state_publisher" pkg&#61;"joint_state_publisher" type&#61;"joint_state_publisher" />


<node name&#61;"robot_state_publisher" pkg&#61;"robot_state_publisher" type&#61;"state_publisher" />


<node name&#61;"rviz" pkg&#61;"rviz" type&#61;"rviz" args&#61;"-d $(find mybot_description)/config/mybot_urdf.rviz" required&#61;"true" />
launch>

运行效果&#xff1a;

$ roslaunch mybot_description display_mybot_all_urdf.launch

在这里插入图片描述




结语

本讲主要学习了urdf的建模方法&#xff0c;并完成了自己的机器人模型的建模。






推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
author-avatar
倔强的石头二虎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有