热门标签 | 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;并完成了自己的机器人模型的建模。






推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讨论了在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下。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
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社区 版权所有