access做网站,友情链接qq群,展馆设计公司排名,游戏推广员是违法的吗文章目录 前言一、在 ROS 中自定义机器人的3D模型1. 在 rviz 里查看3D模型2. xacro 二、Gazebo1. urdf 集成 gazebo2. 综合应用1). 运动控制及里程计2). 雷达仿真3). 摄像头信息仿真4). kinect 深度相机仿真5). 点云 前言
本文为11 月 25 日 ROS 学习笔记——3D 建模与仿真分为两个章节
在 ROS 中自定义机器人的3D模型Gazebo 一、在 ROS 中自定义机器人的3D模型
robot nameRobot1link namebase_linkvisualgeometrybox size0.2 .3 .1 //geometryorigin rpy0 0 0 xyz0 0 0.05 /material namewhitecolor rgba1 1 1 1 //material/visual/linklink namewheel_1visualgeometrycylinder length0.05 radius0.05 //geometryorigin rpy0 1.5 0 xyz0.1 0.1 0 /material nameblackcolor rgba0 0 0 1 //material/visual/linklink namewheel_2visualgeometrycylinder length0.05 radius0.05 //geometryorigin rpy0 1.5 0 xyz-0.1 0.1 0 /material nameblack //visual/linklink namewheel_3visualgeometrycylinder length0.05 radius0.05 //geometryorigin rpy0 1.5 0 xyz0.1 -0.1 0 /material nameblack //visual/linklink namewheel_4visualgeometrycylinder length0.05 radius0.05 //geometryorigin rpy0 1.5 0 xyz-0.1 -0.1 0 /material nameblack //visual/linkjoint namebase_to_wheel1 typefixedparent linkbase_link /child linkwheel_1 /origin xyz0 0 0 //jointjoint namebase_to_wheel2 typefixedparent linkbase_link /child linkwheel_2 /origin xyz0 0 0 //jointjoint namebase_to_wheel3 typefixedparent linkbase_link /child linkwheel_3 /origin xyz0 0 0 //jointjoint namebase_to_wheel4 typefixedparent linkbase_link /child linkwheel_4 /origin xyz0 0 0 //joint
/robot检查书写的语法是否正确和配置是否有误
check_urdf robot1.urdf robot name is: Robot1---------- Successfully Parsed XML ---------------root Link: base_link has 4 child(ren)child(1): wheel_1child(2): wheel_2child(3): wheel_3child(4): wheel_4以图形的方式来查看
urdf_to_graphiz robot1.urdf Created file Robot1.gvCreated file Robot1.pdfevince Robot1.pdf1. 在 rviz 里查看3D模型
创建 .launch 文件
launcharg namemodel /arg namegui defaultFalse /param namerobot_description textfile$(arg model) /param nameuse_gui value$(arg gui) /node namejoint_state_publisher pkgjoint_state_publisher typejoint_state_publisher /node namerobot_state_publisher pkgrobot_state_publisher typerobot_state_publisher /
/launch启动命令
roslaunch robot1_description display.launch model:$(rospack find robot1_description)/urdf/robot1.urdf添加一些组件
/jointlink namearm_base
visual
geometry
box size0.1 .1 .1/
/geometry
origin rpy0 0 0 xyz0 0 0.1/
material namewhite
color rgba1 1 1 1/
/material
/visualcollision
geometry
box size0.1 .1 .1/
/geometry
/collisioninertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/linkjoint namebase_to_arm_base typecontinuous
parent linkbase_link/
child linkarm_base/
axis xyz0 0 1/
origin xyz0 0 0/
/jointlink namearm_1
visual
geometry
box size0.05 .05 0.5/
/geometry
origin rpy0 0 0 xyz0 0 0.25/
material namewhite
color rgba1 1 1 1/
/material
/visual
collision
geometry
box size0.05 .05 0.5/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/linkjoint namearm_1_to_arm_base typerevolute
parent linkarm_base/
child linkarm_1/
axis xyz1 0 0/
origin xyz0 0 0.15/
limit effort 1000.0 lower-1.0 upper1.0 velocity0.5/
/joint
link namearm_2
visual
geometry
box size0.05 0.05 0.5/
/geometry
origin rpy0 0 0 xyz0.06 0 0.15/
material namewhite
color rgba1 1 1 1/
/material
/visual
collision
geometry
box size0.05 .05 0.5/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/link
joint namearm_2_to_arm_1 typerevolute
parent linkarm_1/
child linkarm_2/
axis xyz1 0 0/
origin xyz0.0 0 0.45/
limit effort 1000.0 lower-2.5 upper2.5 velocity0.5/
/joint
joint nameleft_gripper_joint typerevolute
axis xyz0 0 1/
limit effort1000.0 lower0.0 upper0.548 velocity0.5/
origin rpy0 -1.57 0 xyz0.06 0 0.4/
parent linkarm_2/
child linkleft_gripper/
/joint
link nameleft_gripper
visual
origin rpy0 0 0 xyz0 0 0/
geometry
mesh filenamepackage://pr2_description/meshes/gripper_v0/l_finger.dae/
/geometry
/visual
collision
geometry
box size0.1 .1 .1/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/link
joint nameleft_tip_joint typefixed
parent linkleft_gripper/
child linkleft_tip/
/joint
link nameleft_tip
visual
origin rpy0.0 0 0 xyz0.09137 0.00495 0/
geometry
mesh filenamepackage://pr2_description/meshes/gripper_v0/l_finger_tip.dae/
/geometry
/visual
collision
geometry
box size0.1 .1 .1/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/link
joint nameright_gripper_joint typerevolute
axis xyz0 0 -1/
limit effort1000.0 lower0.0 upper0.548 velocity0.5/
origin rpy0 -1.57 0 xyz0.06 0 0.4/
parent linkarm_2/
child linkright_gripper/
/joint
link nameright_gripper
visual
origin rpy-3.1415 0 0 xyz0 0 0/
geometry
mesh filenamepackage://pr2_description/meshes/gripper_v0/l_finger.dae/
/geometry
/visual
collision
geometry
box size0.1 .1 .1/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/link
joint nameright_tip_joint typefixed
parent linkright_gripper/
child linkright_tip/
/joint
link nameright_tip
visual
origin rpy-3.1415 0 0 xyz0.09137 0.00495 0/
geometry
mesh filenamepackage://pr2_description/meshes/gripper_v0/l_finger_tip.dae/
/geometry
/visual
collision
geometry
box size0.1 .1 .1/
/geometry
/collision
inertial
mass value1/
inertia ixx1.0 ixy0.0 ixz0.0 iyy1.0 iyz0.0 izz1.0/
/inertial
/link旋转关节
joint namearm_1_to_arm_base typerevoluteparent linkarm_base/child linkarm_1/axis xyz1 0 0/origin xyz0 0 0.15/limit effort 1000.0 lower-1.0 upper1.0 velocity0.5/
/joint2. xacro
Xacro 可帮助我们压缩 URDF 文件的大小 增加文件的可读性和可维护性。它还允许我们创建模型并复用这些模型以创建相同的结构如更多的手臂和腿.
使用 xacro 声明常量避免在很多行重复定义同一个 数值
xacro:property namelength_wheel value0.05 /
xacro:property nameradius_wheel value0.05 /使用常量
${name_of_variable}:
cylinder length${length_wheel} radius${radius_wheel} /将 .xacro 转换为 .urdf
rosrun xacro xacro demo01_helloworld.urdf.xacrorobot namemycarlink nameleft_wheelvisualgeometrycylinder length0.0015 radius0.0325//geometryorigin rpy1.57079635 0 0 xyz0 0 0/material namewheel_colorcolor rgba0 0 0 0.3//material/visual/link!-- 3-2.joint --joint nameleft2link typecontinuousparent linkbase_link/child linkleft_wheel/!-- x 无偏移y 车体半径z z 车体高度 / 2 离地间距 - 车轮半径--origin rpy0 0 0 xyz0 0.1 -0.0225/axis xyz0 1 0//jointlink nameright_wheelvisualgeometrycylinder length0.0015 radius0.0325//geometryorigin rpy1.57079635 0 0 xyz0 0 0/material namewheel_colorcolor rgba0 0 0 0.3//material/visual/link!-- 3-2.joint --joint nameright2link typecontinuousparent linkbase_link/child linkright_wheel/!-- x 无偏移y 车体半径z z 车体高度 / 2 离地间距 - 车轮半径--origin rpy0 0 0 xyz0 -0.1 -0.0225/axis xyz0 1 0//joint/robotrosrun xacro xacro demo01_helloworld.urdf.xacro demo01_helloworld.urdf属性与运算
xacro:property namePI value3.1415927 /
xacro:property nameradius value0.03 /!-- 属性调用 --
myUsePropertyxxx name${PI} /
myUsePropertyxxx name${radius} /rosrun xacro xacro demo02_field.urdf.xacrorobot namemycar!-- 属性调用 --myUsePropertyxxx name3.1415927/myUsePropertyxxx name0.03/!-- 数学运算 --/robot!-- 数学运算 --
myUsePropertyyy result${PI / 2} /rosrun xacro xacro demo02_field.urdf.xacrorobot namemycar!-- 属性调用 --myUsePropertyxxx name3.1415927/myUsePropertyxxx name0.03/!-- 数学运算 --myUsePropertyyy result1.57079635//robot宏
!-- 宏定义 --
xacro:macro namegetSum paramsnum1 num2result value${num1 num2} /
/xacro:macro!-- 宏调用 --
xacro:getSum num11 num25 / rosrun xacro xacro demo03_macro.urdf.xacro
robot namemycarresult value6/
/robot
文件包含
xacro:include filenamedemo02_field.urdf.xacro /
xacro:include filenamedemo03_macro.urdf.xacro /rosrun xacro xacro demo04_sum.urdf.xacrorobot namemycar!-- 属性调用 --myUsePropertyxxx name3.1415927/myUsePropertyxxx name0.03/!-- 数学运算 --myUsePropertyyy result1.57079635/result value6//robotxacro 集成 rviz
param namerobot_description command$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/demo05_car_base.urdf.xacro /控制移动机器人做圆周运动
launch!-- 载入 urdf 至参数服务器 --!-- param namerobot_description textfile$(find urdf01_rviz)/urdf/xacro/demo05_car_base.urdf / --param namerobot_description command$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.urdf.xacro /!-- 启动 rviz --node pkgrviz typerviz namerviz args-d $(find urdf01_rviz)/config/show_mycar.rviz /!-- 添加关节状态发布节点 --node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher /!-- 机器人状态发布节点 --node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher /!-- 集成 arbotix 运动控制节点 --node pkgarbotix_python typearbotix_driver namedriver outputscreenrosparam commandload file$(find urdf01_rviz)/config/control.yaml /param namesim valuetrue //node
/launchrostopic pub -r 10 /cmd_vel geometry_msgs/Twist linear:x: 1.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 1.0二、Gazebo
1. urdf 集成 gazebo
创建机器人模型
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创建 .launch 文件
launch!-- 载入 urdf 至参数服务器 --param namerobot_description textfile$(find urdf02_gazebo)/urdf/demo01_helloworld.urdf /!-- 启动 Gazebo --include file$(find gazebo_ros)/launch/empty_world.launch /!-- 添加机器人模型 --node pkggazebo_ros typespawn_model namespawn_model args-urdf -model mycar -param robot_description /
/launch仿真环境集成
launch!-- 载入 urdf 至参数服务器 --param namerobot_description command$(find xacro)/xacro $(find urdf02_gazebo)/urdf/car.urdf.xacro /!-- 启动 Gazebo --include file$(find gazebo_ros)/launch/empty_world.launcharg nameworld_name value${find urdf02_gazebo}/worlds/box_house.world //include!-- 添加机器人模型 --node pkggazebo_ros typespawn_model namespawn_model args-urdf -model mycar -param robot_description /
/launch2. 综合应用
1). 运动控制及里程计
在 gazebo 中运动控制
robot namemy_car_move xmlns:xacrohttp://wiki.ros.org/xacro!-- 传动实现:用于连接控制器与关节 --xacro:macro namejoint_trans paramsjoint_name!-- Transmission is important to link the joints and the controller --transmission name${joint_name}_transtypetransmission_interface/SimpleTransmission/typejoint name${joint_name}hardwareInterfacehardware_interface/VelocityJointInterface/hardwareInterface/jointactuator name${joint_name}_motorhardwareInterfacehardware_interface/VelocityJointInterface/hardwareInterfacemechanicalReduction1/mechanicalReduction/actuator/transmission/xacro:macro!-- 每一个驱动轮都需要配置传动装置 --xacro:joint_trans joint_namebase_l_wheel_joint /xacro:joint_trans joint_namebase_r_wheel_joint /!-- 控制器 --gazeboplugin namedifferential_drive_controller filenamelibgazebo_ros_diff_drive.sorosDebugLevelDebug/rosDebugLevelpublishWheelTFtrue/publishWheelTFrobotNamespace//robotNamespacepublishTf1/publishTfpublishWheelJointStatetrue/publishWheelJointStatealwaysOntrue/alwaysOnupdateRate100.0/updateRatelegacyModetrue/legacyModeleftJointbase_l_wheel_joint/leftJoint !-- 左轮 --rightJointbase_r_wheel_joint/rightJoint !-- 右轮 --wheelSeparation${base_radius * 2}/wheelSeparation !-- 车轮间距 --wheelDiameter${wheel_radius * 2}/wheelDiameter !-- 车轮直径 --broadcastTF1/broadcastTFwheelTorque30/wheelTorquewheelAcceleration1.8/wheelAccelerationcommandTopiccmd_vel/commandTopic !-- 运动控制话题 --odometryFrameodom/odometryFrame odometryTopicodom/odometryTopic !-- 里程计话题 --robotBaseFramebase_footprint/robotBaseFrame !-- 根坐标系 --/plugin/gazebo/robotrostopic pub -r 10 /cmd_vel geometry_msgs/Twist linear:x: 1.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 1.0在 rviz 中查看里程计消息
launch!-- 启动 rviz --node pkgrviz typerviz namerviz args-d $(find urdf01_rviz)/config/show_mycar.rviz /!-- 添加关节状态发布节点 --!-- node pkgjoint_state_publisher typejoint_state_publisher namejoint_state_publisher / --!-- 机器人状态发布节点 --node pkgrobot_state_publisher typerobot_state_publisher namerobot_state_publisher //launch2). 雷达仿真
robot namemy_sensors xmlns:xacrohttp://wiki.ros.org/xacro!-- 雷达 --gazebo referencelasersensor typeray namerplidarpose0 0 0 0 0 0/posevisualizetrue/visualizeupdate_rate5.5/update_raterayscanhorizontalsamples360/samplesresolution1/resolutionmin_angle-3/min_anglemax_angle3/max_angle/horizontal/scanrangemin0.10/minmax30.0/maxresolution0.01/resolution/rangenoisetypegaussian/typemean0.0/meanstddev0.01/stddev/noise/rayplugin namegazebo_rplidar filenamelibgazebo_ros_laser.sotopicName/scan/topicNameframeNamelaser/frameName/plugin/sensor/gazebo/robot3). 摄像头信息仿真
robot namemy_sensors xmlns:xacrohttp://wiki.ros.org/xacro!-- 被引用的link --gazebo referencecamera!-- 类型设置为 camara --sensor typecamera namecamera_nodeupdate_rate30.0/update_rate !-- 更新频率 --!-- 摄像头基本信息设置 --camera nameheadhorizontal_fov1.3962634/horizontal_fovimagewidth1280/widthheight720/heightformatR8G8B8/format/imageclipnear0.02/nearfar300/far/clipnoisetypegaussian/typemean0.0/meanstddev0.007/stddev/noise/camera!-- 核心插件 --plugin namegazebo_camera filenamelibgazebo_ros_camera.soalwaysOntrue/alwaysOnupdateRate0.0/updateRatecameraName/camera/cameraNameimageTopicNameimage_raw/imageTopicNamecameraInfoTopicNamecamera_info/cameraInfoTopicNameframeNamecamera/frameNamehackBaseline0.07/hackBaselinedistortionK10.0/distortionK1distortionK20.0/distortionK2distortionK30.0/distortionK3distortionT10.0/distortionT1distortionT20.0/distortionT2/plugin/sensor/gazebo/robot4). kinect 深度相机仿真
robot namemy_sensors xmlns:xacrohttp://wiki.ros.org/xacrogazebo referencesupport sensor typedepth namecameraalways_ontrue/always_onupdate_rate20.0/update_ratecamerahorizontal_fov${60.0*PI/180.0}/horizontal_fovimageformatR8G8B8/formatwidth640/widthheight480/height/imageclipnear0.05/nearfar8.0/far/clip/cameraplugin namekinect_camera_controller filenamelibgazebo_ros_openni_kinect.socameraNamecamera/cameraNamealwaysOntrue/alwaysOnupdateRate10/updateRateimageTopicNamergb/image_raw/imageTopicNamedepthImageTopicNamedepth/image_raw/depthImageTopicNamepointCloudTopicNamedepth/points/pointCloudTopicNamecameraInfoTopicNamergb/camera_info/cameraInfoTopicNamedepthImageCameraInfoTopicNamedepth/camera_info/depthImageCameraInfoTopicNameframeNamesupport/frameNamebaseline0.1/baselinedistortion_k10.0/distortion_k1distortion_k20.0/distortion_k2distortion_k30.0/distortion_k3distortion_t10.0/distortion_t1distortion_t20.0/distortion_t2pointCloudCutoff0.4/pointCloudCutoff/plugin/sensor/gazebo/robot 5). 点云
修改配置文件的 FrameName 标签并添加坐标变换关系
frameNamesupport_depth/frameName!-- 点云坐标系到 kinect 连杆坐标系的变换 --
node pkgtf2_ros namestatic_transform_publisher typestatic_transform_publisher args0 0 0 -1.57 0 -1.57 /support /support_depth /