在一个真实的机器人上编程很让我们更好的理解机器人的控制方式,因为真实的机器人会给我们反馈。但是在没有真实机器人供我们实践的时候,ROS的仿真功能是一个不错的选择。

ROS通过URDF(UnifiedRobot Description Format) 就是描述机器人硬件尺寸布局.

一,软件环境

OS:Ubuntu 14.04

ROS:Indigo Full package

二,智能车尺寸数据

因为建立的是一个非常简单的机器人,所以我们尽量使用简单的元素:使用长方体代替车模,使用圆柱代替车轮,具体尺寸如下:

准备:

1.创建Rospackage命名为smartcar

catkin_create_pkgsmartcar  std_msgs rospy roscpp urdf

2.建立文件夹launch和urdf分别用来存放.launch文件和.urdf文件

三、建立urdf文件

在smartcar文件夹下建立urdf文件夹,创建智能车的描述文件smartcar.urdf,描述代码如下:

[html] view plaincopy
  1. <?xml version="1.0"?>
  2. <robot name="smartcar">
  3. <link name="base_link">
  4. <visual>
  5. <geometry>
  6. <box size="0.25 .16 .05"/>
  7. </geometry>
  8. <origin rpy="0 0 1.57075" xyz="0 0 0"/>
  9. <material name="blue">
  10. <color rgba="0 0 .8 1"/>
  11. </material>
  12. </visual>
  13. </link>
  14. <link name="right_front_wheel">
  15. <visual>
  16. <geometry>
  17. <cylinder length=".02" radius="0.025"/>
  18. </geometry>
  19. <material name="black">
  20. <color rgba="0 0 0 1"/>
  21. </material>
  22. </visual>
  23. </link>
  24. <joint name="right_front_wheel_joint" type="continuous">
  25. <axis xyz="0 0 1"/>
  26. <parent link="base_link"/>
  27. <child link="right_front_wheel"/>
  28. <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>
  29. <limit effort="100" velocity="100"/>
  30. <joint_properties damping="0.0" friction="0.0"/>
  31. </joint>
  32. <link name="right_back_wheel">
  33. <visual>
  34. <geometry>
  35. <cylinder length=".02" radius="0.025"/>
  36. </geometry>
  37. <material name="black">
  38. <color rgba="0 0 0 1"/>
  39. </material>
  40. </visual>
  41. </link>
  42. <joint name="right_back_wheel_joint" type="continuous">
  43. <axis xyz="0 0 1"/>
  44. <parent link="base_link"/>
  45. <child link="right_back_wheel"/>
  46. <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
  47. <limit effort="100" velocity="100"/>
  48. <joint_properties damping="0.0" friction="0.0"/>
  49. </joint>
  50. <link name="left_front_wheel">
  51. <visual>
  52. <geometry>
  53. <cylinder length=".02" radius="0.025"/>
  54. </geometry>
  55. <material name="black">
  56. <color rgba="0 0 0 1"/>
  57. </material>
  58. </visual>
  59. </link>
  60. <joint name="left_front_wheel_joint" type="continuous">
  61. <axis xyz="0 0 1"/>
  62. <parent link="base_link"/>
  63. <child link="left_front_wheel"/>
  64. <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
  65. <limit effort="100" velocity="100"/>
  66. <joint_properties damping="0.0" friction="0.0"/>
  67. </joint>
  68. <link name="left_back_wheel">
  69. <visual>
  70. <geometry>
  71. <cylinder length=".02" radius="0.025"/>
  72. </geometry>
  73. <material name="black">
  74. <color rgba="0 0 0 1"/>
  75. </material>
  76. </visual>
  77. </link>
  78. <joint name="left_back_wheel_joint" type="continuous">
  79. <axis xyz="0 0 1"/>
  80. <parent link="base_link"/>
  81. <child link="left_back_wheel"/>
  82. <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
  83. <limit effort="100" velocity="100"/>
  84. <joint_properties damping="0.0" friction="0.0"/>
  85. </joint>
  86. <link name="head">
  87. <visual>
  88. <geometry>
  89. <box size=".02 .03 .03"/>
  90. </geometry>
  91. <material name="white">
  92. <color rgba="1 1 1 1"/>
  93. </material>
  94. </visual>
  95. </link>
  96. <joint name="tobox" type="fixed">
  97. <parent link="base_link"/>
  98. <child link="head"/>
  99. <origin xyz="0 0.08 0.025"/>
  100. </joint>
  101. </robot>

该文件可以帮助启动RViz来观察机器人。其中有三个node,一个是rviz,另外两个joint_state_publisher robot_state_publisher是必须的node。

第一个输入参数 model 就是要启动的urdf文件路径。

第二个输入参数 gui 指定是否启用关节转动控制面板窗口。

四,创建display.launch文件

[html] view plaincopy
  1. <launch>
  2. <arg name="model" />
  3. <arg name="gui" default="False" />
  4. <param name="robot_description" textfile="($find smartcar)/urdf/smartcar.urdf)" />
  5. <param name="use_gui" value="$(arg gui)"/>
  6. <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  7. <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  8. <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" required="true" />
  9. </launch>

link可以指定许多属性:

  • <inertial>    定义惯性
  • <visual>     定义一个link的外观,大小,颜色和材质纹理贴图
  • <collision>定义碰撞检测属性

我们详细看一下<visual>的定义:

  • <geometry> 定义了几何形状为一个立方体,三个参数分别为长宽高,单位是米(m). 这里我们指定下层小车板子的板的尺寸。<geometry>可以有好几个选项:<box> 立方体  <cylinder>圆柱体  <sphere>球体
  • <material> 指定颜色rgb和透明度a.  它们取值范围都是[0,1] 区间。

使用下面命令启动RViz来查看我们刚刚完成的机器人模型:

运行

roslaunch smartcar display.launch gui:=true

参考:

1.Learning ROS for Robotics Peogramming

2.ROS探索总结(五)——创建简单的机器人模型smartcar

3.ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用

使用URDF创建机器人3D仿真模型相关推荐

  1. ROS学习:创建机器人的urdf

    ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化_Hi, Robotics-CSDN博客_urdf可视化 1 创建工作空间 mkdir -p ~/catkin_ws/sr ...

  2. Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型

    Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型 Building a Visual Robot Model with URDF from Scratc ...

  3. ROS机器人Diego 1#制作(十六)创建机器人的urdf模型描述文件

    更多创客作品,请关注笔者网站园丁鸟,搜集全球极具创意,且有价值的创客作品 由于后续要做机械臂的控制,会用到机器人的urdf描述文件,moveit需要根据urdf中的数据进行机械臂的路径规划,这里介绍一 ...

  4. ROS学习笔记6 URDF建立机器人模型(以双轮差速小车为例)

    URDF建立机器人模型 一.准备工作 一.搭建小车底盘模型 1.小车底盘 2.左右驱动轮 3.前后万向轮 4.launch启动文件 5.效果展示 二.摄像头仿真模型 1.添加摄像头模型 2.launc ...

  5. 自动驾驶系列(六)创建简单小车仿真模型

    一.创建机器人模型描述包 cd ~/catkin_ws/src/ catkin_create_pkg smartcar_description urdf mkdir urdf cd urdf gedi ...

  6. 不需要支撑结构的3D打印技术:多轴机器人3D打印系统

    为期五天的世界上最大的计算机图形和交互技术会议-SIGGRAPH 2018将于下周在温哥华启动.来自世界各地的许多研究团队在会上展示他们的最新项目成果,包括3D形状.增强现实.拓扑优化和3D扫描.今年 ...

  7. Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#

    游戏开发变得容易了.使用Unity学习C#并创建您自己的3D平台! 你会学到什么 学习现代通用编程语言C#. 了解Unity中3D开发的功能 发展强大的可转移的解决问题的技能 了解游戏开发过程 了解面 ...

  8. Maya创建科幻3D动画循环场景视频教程

    Maya创建科幻3D动画循环场景视频教程 Skillshare – Create a Sci-Fi 3D Animation Loop in Autodesk Maya 持续时间3h 27m 包括项目 ...

  9. 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...

最新文章

  1. 从今天开始,我就要潜心研究软件开发技术了,不在被名利所困
  2. 谨慎能捕千秋蝉(二)——CSRF
  3. 【arduino】在Arduino上运行FreeRTOS操作系统,freeRTOS入门教程helloword
  4. linux 5005端口,Linux配置防火墙端口 8080端口
  5. Android sharedPreference设置缓存时间
  6. spark学习-Spark的groupByKey
  7. mysql使用substring_index达到splite功能
  8. wince -- 线程中SetEvent及WaitForSingleObject用法
  9. 深度学习 —— 使用 gensim 实现 word2vec
  10. C++智能指针的几种用法
  11. 快手小程序预下单 tp6 demo
  12. 用Qt实现一个桌面弹幕程序(六)-- -- 桌面客户端实现②
  13. SOFA Weekly | Committer 聊天室、SOFAJRaft 本周发布、新手任务
  14. 阿里云服务器怎么样?详细介绍
  15. CC3200学习系列--芯片简介
  16. 【ESP32系列开发】ESP32-PICO-D4 使用双核
  17. c excel连接mysql数据库_C语言连接Excel数据库
  18. 魅族18s有没有广告
  19. 飘窗到底实不实用?是留着还是砸了?
  20. 最近很火的斗鱼大王卡动态线路免流系统搭建教程联通电信必免

热门文章

  1. 用Vue+Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)
  2. [CodeFestival 2017J]MST
  3. debugger小解
  4. 杭电多校3-Hdu6797 Tokitsukaze and Rescue
  5. C\C++中函数参数的三种传递方式
  6. 提高用户体验--子非鱼,须知鱼之乐
  7. 我写的破代码将被保存1000年?GitHub启动代码永久存储计划
  8. 谈谈目前工作的收获和不足
  9. 微信小程序视频点播在线视频学习系统 毕业设计 课程设计(5)视频播放页面
  10. windows中ip地址存放的位置,及修改