乐清建站公司哪家好,采集插件wordpress,网站备案背景布,百度首页网址机器人入门#xff08;四#xff09;—— 创建你的第一个虚拟小车 一、小车建立过程1.1 dd_robot.urdf —— 建立身体1.2 dd_robot2.urdf —— 添加轮子1.3 dd_robot3.urdf —— 添加万向轮1.4 dd_robot4.urdf —— 添加颜色1.5 dd_robot5.urdf —— 添加碰撞检测(Collision … 机器人入门四—— 创建你的第一个虚拟小车 一、小车建立过程1.1 dd_robot.urdf —— 建立身体1.2 dd_robot2.urdf —— 添加轮子1.3 dd_robot3.urdf —— 添加万向轮1.4 dd_robot4.urdf —— 添加颜色1.5 dd_robot5.urdf —— 添加碰撞检测(Collision Detection)1.6 使用gui模式转动小车车轮1.7 dd_robot6.urdf —— 添加惯性属性 二、Gazebo仿真实验2.1 环境预备与问题处理2.2 dd_robot.gazebo 三、其它仿真手段3.1 Matlab3.2 Stage3.3 Virtual Robot Experimentation Platform (V-REP) 四、六大关节种类无限旋转关节(continous)固定关节(fixed)有限旋转关节(revolute)滑动关节(prismatic)浮动关节(floating)平面关节(planar)总结 参考书籍为ROS Robotics By Example (Second Edition) —— Carol Fairchild Dr.Thomas L.Harman微信读书可免费阅读。
一、小车建立过程
首先在catkin_ws工作空间下使用catking_create_pkg建立package目录ros_robotics
programmerubuntu:~/catkin_ws/src$ catkin_create_pkg ros_robotics
Created file ros_robotics/package.xml
Created file ros_robotics/CMakeLists.txt
Successfully created files in /home/programmer/catkin_ws/src/ros_robotics. Please adjust the values in package.xml.然后使用catkin_make进行编译
programmerubuntu:~/catkin_ws/src$ cd ~/catkin_ws
programmerubuntu:~$ catkin_make再建立urdf目录用来存放描述机器人的文件
programmerubuntu:~/catkin_ws/src/ros_robotics$ cd ~/catkin_ws/src/ros_robotics
programmerubuntu:~/catkin_ws/src/ros_robotics$ mkdir urdf
programmerubuntu:~/catkin_ws/src/ros_robotics$ cd urdf本节的代码文件都可以直接从github下载不想阅读源码可通过该链接下载 ROS-Robotics-By-Example-2nd-Edition/Chapter2_code/ros_robotics/urdf/如果不想下载全部只下载指定的文件内容看这篇文章《如何从 GitHub 上下载指定项目的单个文件或文件夹》。
1.1 dd_robot.urdf —— 建立身体
并在urdf目录下建立一份dd_robot.urdf文件但记得拷贝进去时内容里不要有中文经实践中文不在其支持的字符范围内解析会出错内容为
?xml version1.0?
robot namedd_robot!-- Base Link --link namebase_linkvisual!--放置的位置在(x,y,z) (0,0,0)处摆放方式有roll(滚动), pitch(俯仰), yaw(偏向)--origin xyz0 0 0 rpy0 0 0 /geometry!--形状是box长宽高是0.5 0.5 0.25单位m--box size0.5 0.5 0.25//geometry/visual/link/robot然后前往ros_robotics目录下建立一个子目录launch并在此目录下建立一份ddrobot_rviz.launch文件
programmerubuntu:~/catkin_ws/src/ros_robotics/urdf$ cd ..
programmerubuntu:~/catkin_ws/src/ros_robotics$ mkdir launch
programmerubuntu:~/catkin_ws/src/ros_robotics$ vim ddrobot_rviz.launch!--ddrobot_rviz.launch--
launch!-- values passed by command line input --arg namemodel /arg namegui defaultFalse /!-- set these parameters on Parameter Server --param namerobot_description textfile$(find ros_robotics)/urdf/$(arg model)/param nameuse_gui value$(arg gui)/!-- Start 3 nodes: joint_state_publisher,robot_state_publisher and rviz --node namejoint_state_publisherpkgjoint_state_publishertypejoint_state_publisher /node namerobot_state_publisherpkgrobot_state_publishertypestate_publisher /node namerviz pkgrviz typervizargs-d $(find ros_robotics)/urdf.rvizrequiredtrue /
/launch然后在终端执行以下命令就会弹出一个rviz窗口
$ roslaunch ros_robotics ddrobot_rviz.launch model:dd_robot.urdf点击Displays工具栏右下角的Add添加组件并编辑Fixed Frame为base_link 然后就有 1.2 dd_robot2.urdf —— 添加轮子
然后添加轮子仿照dd_robot.urdf在相同目录下建立第二份文件dd_robot2.urdf在dd_robot.urdf文件的基础上加了两个轮子具体内容为
?xml version1.0?
!--dd_robot2.urdf--
robot namedd_robot!-- Old Content --!-- Base Link --link namebase_linkvisualorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometry/visual/link!-- New Content --!-- Right Wheel --link nameright_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/visual/linkjoint namejoint_right_wheel typecontinuousparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint!-- Left Wheel --link nameleft_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/visual/linkjoint namejoint_left_wheel typecontinuousparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint/robot保存好后关闭上一个rviz窗口执行
$ roslaunch ros_robotics ddrobot_rviz.launch model:dd_robot2.urdf就会看到红色轴是X轴绿色轴是Y轴蓝色轴是Z轴。TF - ROS Wiki
1.3 dd_robot3.urdf —— 添加万向轮
再建一份dd_robot3.urdf文件在底部添加一个万向轮
?xml version1.0?
!--dd_robot3.urdf--
robot namedd_robot!-- Base Link --link namebase_linkvisualorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometry/visual!-- New Content --!-- Caster --visual namecasterorigin xyz0.2 0 -0.125 rpy0 0 0 /geometrysphere radius0.05 //geometry/visual/link!-- Right Wheel --link nameright_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/visual/linkjoint namejoint_right_wheel typecontinuousparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint!-- Left Wheel --link nameleft_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/visual/linkjoint namejoint_left_wheel typecontinuousparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint/robotdd_robot3.urdf效果图
1.4 dd_robot4.urdf —— 添加颜色
新建一份dd_robot4.urdf修改各模块颜色可以看到left wheel只简单引用了一个material标签也产生了效果所以这个标签可以一次定义全局起效定义位置不影响其生效的先后关系定义在文件末尾也一样rgba属性值里的a代表alpha表示透明度1不透明0透明。
?xml version1.0?
!--dd_robot4.urdf--
robot namedd_robot!-- Base Link --link namebase_linkvisualorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometry!-- New Content --material namebluecolor rgba0 0.5 1 1//material/visual!-- Caster --visual namecasterorigin xyz0.2 0 -0.125 rpy0 0 0 /geometrysphere radius0.05 //geometry/visual/link!-- Right Wheel --link nameright_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry!-- New Content --material nameblackcolor rgba0.05 0.05 0.05 1//material/visual/linkjoint namejoint_right_wheel typecontinuousparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint!-- Left Wheel --link nameleft_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry!-- New Content --material nameblack//visual/linkjoint namejoint_left_wheel typecontinuousparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint/robot1.5 dd_robot5.urdf —— 添加碰撞检测(Collision Detection)
给各个link添加collision属性用来之后在Gazebo中进行碰撞检测
?xml version1.0?
!--dd_robot5.urdf--
robot namedd_robot!-- Base Link --link namebase_linkvisual!-- Base collision --collisionorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometry/collisionmaterial namebluecolor rgba0 0.5 1 1//material/visual!-- Caster --visual namecaster!-- Caster collision --collisionorigin xyz0.2 0 -0.125 rpy0 0 0 /geometrysphere radius0.05 //geometry/collision/visual/link!-- Right Wheel --link nameright_wheelvisualcollisionorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/collisionmaterial nameblackcolor rgba0.05 0.05 0.05 1//material/visual/linkjoint namejoint_right_wheel typecontinuousparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint!-- Left Wheel --link nameleft_wheelvisualcollisionorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/collisionmaterial nameblack//visual/linkjoint namejoint_left_wheel typecontinuousparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /axis xyz0 1 0 //joint/robot1.6 使用gui模式转动小车车轮
提前安装gui相关ros包
sudo apt update
#sudo apt install ros-your_ros_version-joint-state-publisher-gui我的ros_version是kinetic根据版本决定
sudo apt install ros-kinetic-joint-state-publisher-gui然后执行
roslaunch ros_robotics ddrobot_rviz.launch model:dd_robot5.urdf gui:True效果如图random随机赋予旋转角度center是位置归零按键
1.7 dd_robot6.urdf —— 添加惯性属性
给物体添加了inertia惯性属性
?xml version1.0?
robot namedd_robot!-- Base Link --link namebase_linkvisualorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometrymaterial namebluecolor rgba0 0.5 1 1//material/visual!-- Base collision, mass and inertia --collisionorigin xyz0 0 0 rpy0 0 0 /geometrybox size0.5 0.5 0.25//geometry/collisioninertialmass value5/inertia ixx0.13 ixy0.0 ixz0.0 iyy0.21 iyz0.0 izz0.13//inertial!-- Caster --visual namecasterorigin xyz0.2 0 -0.125 rpy0 0 0 /geometrysphere radius0.05 //geometry/visual!-- Caster collision, mass and inertia --collisionorigin xyz0.2 0 -0.125 rpy0 0 0 /geometrysphere radius0.05 //geometry/collisioninertialmass value0.5/inertia ixx0.0001 ixy0.0 ixz0.0 iyy0.0001 iyz0.0 izz0.0001//inertial/link!-- Right Wheel --link nameright_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometrymaterial namedarkgraycolor rgba.2 .2 .2 1//material/visual!-- Right Wheel collision, mass and inertia --collisionorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/collisioninertialmass value0.5/inertia ixx0.01 ixy0.0 ixz0.0 iyy0.005 iyz0.0 izz0.005//inertial/link!-- Right Wheel joint --joint namejoint_right_wheel typecontinuousparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 / axis xyz0 1 0 //joint!-- Left Wheel --link nameleft_wheelvisualorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometrymaterial namedarkgraycolor rgba.2 .2 .2 1//material/visual!-- Left Wheel collision, mass and inertia --collisionorigin xyz0 0 0 rpy1.570795 0 0 /geometrycylinder length0.1 radius0.2 //geometry/collisioninertialmass value0.5/inertia ixx0.01 ixy0.0 ixz0.0 iyy0.005 iyz0.0 izz0.005//inertial/link!-- Left Wheel joint --joint namejoint_left_wheel typecontinuousparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 / axis xyz0 1 0 //joint/robot二、Gazebo仿真实验
2.1 环境预备与问题处理
在使用下面的命令运行gazebo时我遇到了一个错误可能你也会遇到一个什么都没有的empty_world也还是需要阳光和大地就像我的世界初始化一样。
$ roslaunch gazebo_ros empty_world.launchError [parser.cc:581] Unable to find uri[model://sun]
Error [parser.cc:581] Unable to find uri[model://ground_plane]解决方案Unable to find uri[model://sun]、uri[model://ground_plane] 错误解决只要下载好对应的model包并放到指定位置即可这里有两个下载源gazebo_models - gitee和gazebo_models - github使用DownGit工具从github上下载指定内容会比全部下载更快些我这里暂时只需要下载这两个。另外如果遇到Gazebo闪退请看控制台打印的信息是否与该文章说明内容相同《VMware: vmw_ioctl_command error Invalid argument解决办法》若不同请找其它解决方案记得source文件起效。
2.2 dd_robot.gazebo
文件后缀从.urdf变成了.gazebo文件内容不贴了以免文章过于冗长请从github上下载下载地址请往上翻阅有些属性被替换成了gazebo中特有的。 书本上使用以下命令判断是否能从urdf格式转换成sdf格式
$ gzsdf –p dd_robot.gazebo但我的机器上出现了以下错误查看专栏《ROS采坑记录》下的文章原因是 gzsdf 在 gazebo3后的版本取消了啊妸荷甘与神农同学于老龙吉。
gzsdf: command not found用以下命令替代执行后会打印出很长的一段内容没报错就先不管它。
gz sdf -p dd_robot.gazebo 在launch目录下建立一份ddrobot_gazebo.launch文件内容为
launch!-- We resume the logic in gazebo_ros packageempty_world.launch,changing only the name of theworld to be launched --include file$(findgazebo_ros)/launch/empty_world.launcharg nameworld_namevalue$(find ros_robotics)/worlds/ddrobot.world/arg namepaused defaultfalse/arg nameuse_sim_time defaulttrue/arg namegui defaulttrue/arg nameheadless defaultfalse/arg namedebug defaultfalse//include!-- Spawn dd_robot into Gazebo --node namespawn_urdf pkggazebo_rostypespawn_model outputscreenargs-file$(find ros_robotics)/urdf/dd_robot.gazebo-urdf -model ddrobot //launch在launch的同级目录下建立一个worlds目录不清楚具体目录和文件结构可以看书本发布在github上的源码。并在worlds目录下建立一份ddrobot.world文件内容为
?xml version1.0 ?
sdf version1.4world namedefaultincludeurimodel://ground_plane/uri/includeincludeurimodel://sun/uri/includeincludeurimodel://construction_cone/urinameconstruction_cone/namepose-3.0 0 0 0 0 0/pose/includeincludeurimodel://construction_cone/urinameconstruction_cone/namepose3.0 0 0 0 0 0/pose/include/world
/sdf然后执行以下命令效果如下。有model少的话按之前的方法去下载。
$ roslaunch ros_robotics ddrobot_gazebo.launch三、其它仿真手段
3.1 Matlab
除了GazeboMatlab Simulink通过 Robotics System Toolbox的加持也支持对ROS进行仿真见 Robot Operating System (ROS) Support from ROS ToolboxMatlab也提供了例子见 Get Started with ROS - MathWorks
3.2 Stage
Stage是一个针对移动机器人与传感器的开源2D仿真器见 The Player Project - Free Software tools for robot and sensor applications
3.3 Virtual Robot Experimentation Platform (V-REP)
虚拟机器人实验平台商用由Coppelia Robotics公司开发V-REP官网。
四、六大关节种类
在上面的例子中只用到了一种Continous的连接关节但这不是所有还有其它5种将以代码动图形式分别展示效果。 【ROS URDF模型中的6种joint类型】
无限旋转关节(continous)
首先是我们在上文已经见过的continous关节
固定关节(fixed)
配图配上关节的动图
有限旋转关节(revolute)
找到之前的dd_robot5.urdf文件并复制一份命名为dd_robot5_revolute.urdf并做出如下修改 ...joint namejoint_right_wheel typerevoluteparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /!--New content--limit effort30 velocity1.0 lower-1.00 upper1.00 /axis xyz0 1 0 //joint...joint namejoint_left_wheel typerevoluteparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /!--New content--limit effort30 velocity1.0 lower-1.00 upper1.00 /axis xyz0 1 0 //joint...然后执行
roslaunch ros_robotics ddrobot_rviz.launch model:dd_robot5_revolute.urdf gui:True效果如下
滑动关节(prismatic)
也称平移关节找到之前的dd_robot5.urdf文件并复制一份命名为dd_robot5_prismatic.urdf并做出如下修改看上去和revolute关节一样但它们的lower和upper的单位一个是角度一个是距离。 ...joint namejoint_right_wheel typerevoluteparent linkbase_link/child linkright_wheel/origin xyz0 -0.30 0 rpy0 0 0 /!--New content--limit effort30 velocity1.0 lower-3 upper3 /axis xyz0 1 0 //joint...joint namejoint_left_wheel typerevoluteparent linkbase_link/child linkleft_wheel/origin xyz0 0.30 0 rpy0 0 0 /!--New content--limit effort30 velocity1.0 lower-3 upper3 /axis xyz0 1 0 //joint...然后执行
roslaunch ros_robotics ddrobot_rviz.launch model:dd_robot5_prismatic.urdf gui:True效果如下看上去有些不伦不类但只是效果演示但你要真说它是不伦不类还有点牵强谁规定汽车轮子不能横移的呢
浮动关节(floating)
//TODO
平面关节(planar)
//TODO
总结
名称说明固定关节(Fixed)//TODO有限旋转关节(Revolute)//TODO无限旋转关节(Continous)//TODO滑动关节(Prismatic)//TODO浮动关节(Float)//TODO平面关节(Planar)//TODO