郑州个人网站制作公司,wordpress newsletter 插件,个人网站模板html代码,2016个人做淘宝客网站文章结构 URDF与Gazebo基本集成流程创建功能包编写URDF或Xacro文件启动 Gazebo 并显示机器人模型 URDF集成Gazebo相关设置collisioninertial颜色设置 URDF集成Gazebo实操编写封装惯性矩阵算法的 xacro 文件复制相关 xacro 文件#xff0c;并设置 collision inertial 以及 colo… 文章结构 URDF与Gazebo基本集成流程创建功能包编写URDF或Xacro文件启动 Gazebo 并显示机器人模型 URDF集成Gazebo相关设置collisioninertial颜色设置 URDF集成Gazebo实操编写封装惯性矩阵算法的 xacro 文件复制相关 xacro 文件并设置 collision inertial 以及 color 等参数在 launch 文件中启动 gazebo 并添加机器人模型 URDF与Gazebo基本集成流程
URDF 与 Gazebo 集成流程与 Rviz 实现类似主要步骤如下:
创建功能包
创建功能包导入依赖项urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins
编写URDF或Xacro文件
robot namemycarlink namebase_linkvisualgeometrybox size0.5 0.2 0.1 //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameyellowcolor rgba0.5 0.3 0.0 1 //material/visualcollisiongeometrybox size0.5 0.2 0.1 //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 //collisioninertialorigin xyz0 0 0 /mass value6 /inertia ixx1 ixy0 ixz0 iyy1 iyz0 izz1 //inertial/linkgazebo referencebase_linkmaterialGazebo/Red/material/gazebo
/robot注意 当 URDF 需要与 Gazebo 集成时和 Rviz 有明显区别: 必须使用 collision 标签因为既然是仿真环境那么必然涉及到碰撞检测collision 提供碰撞检测的依据。 必须使用 inertial 标签此标签标注了当前机器人某个刚体部分的惯性矩阵用于一些力学相关的仿真计算。 颜色设置也需要重新使用 gazebo 标签标注因为之前的颜色设置为了方便调试包含透明度仿真环境下没有此选项。而且如果没设置的话Gazebo环境里头是看不到机器人的 气急败坏
启动 Gazebo 并显示机器人模型
launch文件实现
launch!-- 将 Urdf 文件的内容加载到参数服务器 --param namerobot_description textfile$(find URDF_Gazebo)/urdf/demo01.urdf /!-- 启动 gazebo 的仿真环境当前环境为空环境 --include file$(find gazebo_ros)/launch/empty_world.launch /!-- 在 Gazebo 中加载一个机器人模型该功能由 gazebo_ros 下的 spawn_model 提供:-urdf 加载的是 urdf 文件-model mycar 模型名称是 mycar-param robot_description 从参数 robot_description 中载入模型-x 模型载入的 x 坐标-y 模型载入的 y 坐标-z 模型载入的 z 坐标
--node pkggazebo_ros typespawn_model namemodel args-urdf -model mycar -param robot_description /
/launch实现效果 URDF集成Gazebo相关设置
较之于 rvizgazebo在集成 URDF 时需要做些许修改比如:必须添加 collision 碰撞属性相关参数、必须添加 inertial 惯性矩阵相关参数另外如果直接移植 Rviz 中机器人的颜色设置是没有显示的颜色设置也必须做相应的变更。
collision
如果机器人link是标准的几何体形状和link的 visual 属性设置一致即可。
inertial
惯性矩阵的设置需要结合link的质量与外形参数动态生成标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现)
球体惯性矩阵
xacro:macro namesphere_inertial_matrix paramsm rinertialmass value${m} /inertia ixx${2*m*r*r/5} ixy0 ixz0iyy${2*m*r*r/5} iyz0 izz${2*m*r*r/5} //inertial
/xacro:macro圆柱惯性矩阵
xacro:macro namecylinder_inertial_matrix paramsm r hinertialmass value${m} /inertia ixx${m*(3*r*rh*h)/12} ixy 0 ixz 0iyy${m*(3*r*rh*h)/12} iyz 0izz${m*r*r/2} / /inertial
/xacro:macro立方体惯性矩阵
xacro:macro nameBox_inertial_matrix paramsm l w hinertialmass value${m} /inertia ixx${m*(h*h l*l)/12} ixy 0 ixz 0iyy${m*(w*w l*l)/12} iyz 0izz${m*(w*w h*h)/12} //inertial
/xacro:macro需要注意的是原则上除了 base_footprint 外机器人的每个刚体部分都需要设置惯性矩阵且惯性矩阵必须经计算得出如果随意定义刚体部分的惯性矩阵那么可能会导致机器人在 Gazebo 中出现抖动移动等现象。
颜色设置
在 gazebo 中显示 link 的颜色必须要使用指定的标签
gazebo referencelink节点名称materialGazebo/Blue/material
/gazeboURDF集成Gazebo实操
需求描述 将之前的机器人模型(xacro版)显示在 gazebo 中
编写封装惯性矩阵算法的 xacro 文件
head.xacro
robot namebase xmlns:xacrohttp://wiki.ros.org/xacro!-- Macro for inertia matrix --xacro:macro namesphere_inertial_matrix paramsm rinertialmass value${m} /inertia ixx${2*m*r*r/5} ixy0 ixz0iyy${2*m*r*r/5} iyz0 izz${2*m*r*r/5} //inertial/xacro:macroxacro:macro namecylinder_inertial_matrix paramsm r hinertialmass value${m} /inertia ixx${m*(3*r*rh*h)/12} ixy 0 ixz 0iyy${m*(3*r*rh*h)/12} iyz 0izz${m*r*r/2} / /inertial/xacro:macroxacro:macro nameBox_inertial_matrix paramsm l w hinertialmass value${m} /inertia ixx${m*(h*h l*l)/12} ixy 0 ixz 0iyy${m*(w*w l*l)/12} iyz 0izz${m*(w*w h*h)/12} //inertial/xacro:macro
/robot复制相关 xacro 文件并设置 collision inertial 以及 color 等参数
底盘Xacro文件demo05_car_base.urdf.xacro
!--使用 xacro 优化 URDF 版的小车底盘实现实现思路:1.将一些常量、变量封装为 xacro:property比如:PI 值、小车底盘半径、离地间距、车轮半径、宽度 ....2.使用 宏 封装驱动轮以及支撑轮实现调用相关宏生成驱动轮与支撑轮--
!-- 根标签必须声明 xmlns:xacro --
robot namemycar xmlns:xacrohttp://www.ros.org/wiki/xacro!-- 封装变量、常量 --!-- PI 值设置精度需要高一些否则后续车轮翻转量计算时可能会出现肉眼不能察觉的车轮倾斜从而导致模型抖动 --xacro:property namePI value3.1415926/!-- 宏:黑色设置 --material nameblackcolor rgba0.0 0.0 0.0 1.0 //material!-- 底盘属性 --xacro:property namebase_footprint_radius value0.001 / !-- base_footprint 半径 --xacro:property namebase_link_radius value0.1 / !-- base_link 半径 --xacro:property namebase_length value0.08 / !-- base_link 长 --xacro:property nameearth_space value0.015 / !-- 离地间距 --xacro:property namebase_link_m value0.5 / !-- 质量 --!-- 底盘 --link namebase_footprintvisualgeometrysphere radius${base_footprint_radius} //geometry/visual/linklink namebase_linkvisualgeometrycylinder radius${base_link_radius} length${base_length} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameyellowcolor rgba0.5 0.3 0.0 0.5 //material/visualcollisiongeometrycylinder radius${base_link_radius} length${base_length} //geometryorigin xyz0 0 0 rpy0 0 0 //collisionxacro:cylinder_inertial_matrix m${base_link_m} r${base_link_radius} h${base_length} //linkjoint namebase_link2base_footprint typefixedparent linkbase_footprint /child linkbase_link /origin xyz0 0 ${earth_space base_length / 2 } //jointgazebo referencebase_linkmaterialGazebo/Yellow/material/gazebo!-- 驱动轮 --!-- 驱动轮属性 --xacro:property namewheel_radius value0.0325 /!-- 半径 --xacro:property namewheel_length value0.015 /!-- 宽度 --xacro:property namewheel_m value0.05 / !-- 质量 --!-- 驱动轮宏实现 --xacro:macro nameadd_wheels paramsname flaglink name${name}_wheelvisualgeometrycylinder radius${wheel_radius} length${wheel_length} //geometryorigin xyz0.0 0.0 0.0 rpy${PI / 2} 0.0 0.0 /material nameblack //visualcollisiongeometrycylinder radius${wheel_radius} length${wheel_length} //geometryorigin xyz0.0 0.0 0.0 rpy${PI / 2} 0.0 0.0 //collisionxacro:cylinder_inertial_matrix m${wheel_m} r${wheel_radius} h${wheel_length} //linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz0 ${flag * base_link_radius} ${-(earth_space base_length / 2 - wheel_radius) } /axis xyz0 1 0 //jointgazebo reference${name}_wheelmaterialGazebo/Red/material/gazebo/xacro:macroxacro:add_wheels nameleft flag1 /xacro:add_wheels nameright flag-1 /!-- 支撑轮 --!-- 支撑轮属性 --xacro:property namesupport_wheel_radius value0.0075 / !-- 支撑轮半径 --xacro:property namesupport_wheel_m value0.03 / !-- 质量 --!-- 支撑轮宏 --xacro:macro nameadd_support_wheel paramsname flag link name${name}_wheelvisualgeometrysphere radius${support_wheel_radius} //geometryorigin xyz0 0 0 rpy0 0 0 /material nameblack //visualcollisiongeometrysphere radius${support_wheel_radius} //geometryorigin xyz0 0 0 rpy0 0 0 //collisionxacro:sphere_inertial_matrix m${support_wheel_m} r${support_wheel_radius} //linkjoint name${name}_wheel2base_link typecontinuousparent linkbase_link /child link${name}_wheel /origin xyz${flag * (base_link_radius - support_wheel_radius)} 0 ${-(base_length / 2 earth_space / 2)} /axis xyz1 1 1 //jointgazebo reference${name}_wheelmaterialGazebo/Red/material/gazebo/xacro:macroxacro:add_support_wheel namefront flag1 /xacro:add_support_wheel nameback flag-1 //robot摄像头Xacro文件demo06_car_camera.urdf.xacro
!-- 摄像头相关的 xacro 文件 --
robot namemycar xmlns:xacrohttp://wiki.ros.org/xacro!-- 摄像头属性 --xacro:property namecamera_length value0.01 / !-- 摄像头长度(x) --xacro:property namecamera_width value0.025 / !-- 摄像头宽度(y) --xacro:property namecamera_height value0.025 / !-- 摄像头高度(z) --xacro:property namecamera_x value0.08 / !-- 摄像头安装的x坐标 --xacro:property namecamera_y value0.0 / !-- 摄像头安装的y坐标 --xacro:property namecamera_z value${base_length / 2 camera_height / 2} / !-- 摄像头安装的z坐标:底盘高度 / 2 摄像头高度 / 2 --xacro:property namecamera_m value0.01 / !-- 摄像头质量 --!-- 摄像头关节以及link --link namecameravisualgeometrybox size${camera_length} ${camera_width} ${camera_height} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameblack //visualcollisiongeometrybox size${camera_length} ${camera_width} ${camera_height} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 //collisionxacro:Box_inertial_matrix m${camera_m} l${camera_length} w${camera_width} h${camera_height} //linkjoint namecamera2base_link typefixedparent linkbase_link /child linkcamera /origin xyz${camera_x} ${camera_y} ${camera_z} //jointgazebo referencecameramaterialGazebo/Blue/material/gazebo
/robot雷达Xacro文件demo07_car_laser.urdf.xacro
!--小车底盘添加雷达
--
robot namemycar xmlns:xacrohttp://wiki.ros.org/xacro!-- 雷达支架 --xacro:property namesupport_length value0.15 / !-- 支架长度 --xacro:property namesupport_radius value0.01 / !-- 支架半径 --xacro:property namesupport_x value0.0 / !-- 支架安装的x坐标 --xacro:property namesupport_y value0.0 / !-- 支架安装的y坐标 --xacro:property namesupport_z value${base_length / 2 support_length / 2} / !-- 支架安装的z坐标:底盘高度 / 2 支架高度 / 2 --xacro:property namesupport_m value0.02 / !-- 支架质量 --link namesupportvisualgeometrycylinder radius${support_radius} length${support_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameredcolor rgba0.8 0.2 0.0 0.8 //material/visualcollisiongeometrycylinder radius${support_radius} length${support_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 //collisionxacro:cylinder_inertial_matrix m${support_m} r${support_radius} h${support_length} //linkjoint namesupport2base_link typefixedparent linkbase_link /child linksupport /origin xyz${support_x} ${support_y} ${support_z} //jointgazebo referencesupportmaterialGazebo/White/material/gazebo!-- 雷达属性 --xacro:property namelaser_length value0.05 / !-- 雷达长度 --xacro:property namelaser_radius value0.03 / !-- 雷达半径 --xacro:property namelaser_x value0.0 / !-- 雷达安装的x坐标 --xacro:property namelaser_y value0.0 / !-- 雷达安装的y坐标 --xacro:property namelaser_z value${support_length / 2 laser_length / 2} / !-- 雷达安装的z坐标:支架高度 / 2 雷达高度 / 2 --xacro:property namelaser_m value0.1 / !-- 雷达质量 --!-- 雷达关节以及link --link namelaservisualgeometrycylinder radius${laser_radius} length${laser_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 /material nameblack //visualcollisiongeometrycylinder radius${laser_radius} length${laser_length} //geometryorigin xyz0.0 0.0 0.0 rpy0.0 0.0 0.0 //collisionxacro:cylinder_inertial_matrix m${laser_m} r${laser_radius} h${laser_length} //linkjoint namelaser2support typefixedparent linksupport /child linklaser /origin xyz${laser_x} ${laser_y} ${laser_z} //jointgazebo referencelasermaterialGazebo/Black/material/gazebo
/robot组合底盘、摄像头与雷达的 Xacro 文件car.urdf.xacro
!-- 组合小车底盘与摄像头 --
robot namemycar xmlns:xacrohttp://wiki.ros.org/xacroxacro:include filenamemy_head.urdf.xacro /xacro:include filenamedemo05_car_base.urdf.xacro/xacro:include filenamedemo06_car_camera.urdf.xacro/xacro:include filenamedemo07_car_laser.urdf.xacro/
/robot在 launch 文件中启动 gazebo 并添加机器人模型
launch文件
launch!-- 将 Urdf 文件的内容加载到参数服务器 --param namerobot_description command$(find xacro)/xacro $(find URDF_Gazebo)/urdf/xacro/car.urdf.xacro /!-- 启动 gazebo --include file$(find gazebo_ros)/launch/empty_world.launch /!-- 在 gazebo 中显示机器人模型 --node pkggazebo_ros typespawn_model namemodel args-urdf -model mycar -param robot_description /
/launch实现效果