做网站用的浏览器有哪些,wordpress 关闭warning,做网站需要会写代码,网站做直播吗urdf文件很直白#xff0c;每个零件的/link /joint都要编写一遍#xff0c;每个零件数据都要自己算出来结果#xff0c;很麻烦#xff0c;但是用起来很简单。xacro写的模型文件可以把好多常量提前定义出来#xff0c;不同大小的机器人只要只要改一下常量…urdf文件很直白每个零件的/link /joint都要编写一遍每个零件数据都要自己算出来结果很麻烦但是用起来很简单。xacro写的模型文件可以把好多常量提前定义出来不同大小的机器人只要只要改一下常量机器人模型就可以重新生成代码可以复用编写起来简单多了但是编写launch启动文件麻烦一些。
urdf编写的小车模型文件
!-- base.urdf --
?xml version1.0 ?
robot namejtbot!-- 机器人底盘 --link namebase_linkvisualgeometrybox size0.46 0.46 0.11//geometrymaterial nameCyancolor rgba0 1.0 1.0 1.0//material/visual!-- 碰撞区域 --collisiongeometrybox size0.46 0.46 0.11//geometry/collisioninertialorigin rpy1.5707963267948966 0 1.5707963267948966 xyz0 0 0/mass value15/inertia ixx0.279625 ixy0.0 ixz0.0 iyy0.529 iyz0.0 izz0.279625//inertial/link!-- 机器人 Footprint --link namebase_footprint/!-- 底盘关节 --joint namebase_joint typefixedparent linkbase_link/child linkbase_footprint/origin rpy0 0 0 xyz0.0 0.0 -0.1325//jointlink nameleft_wheel_linkvisualorigin rpy1.5707963267948966 0 0 xyz0 0 0/geometrycylinder length0.06 radius0.0775//geometrymaterial nameGraycolor rgba0.5 0.5 0.5 1.0//material/visual!-- 碰撞区域 --collisionorigin rpy1.5707963267948966 0 0 xyz0 0 0/geometrycylinder length0.06 radius0.0775//geometry/collisioninertialorigin rpy1.5707963267948966 0 0 xyz0 0 0/mass value0.8/inertia ixx0.0014412499999999998 ixy0 ixz0 iyy0.0014412499999999998 iyz0 izz0.0024025//inertial/link!-- 轮子关节 --joint nameleft_wheel_joint typecontinuousparent linkbase_link/child linkleft_wheel_link/origin rpy0 0 0 xyz0.15 0.27 -0.055/axis xyz0 1 0//jointlink nameright_wheel_linkvisualorigin rpy1.5707963267948966 0 0 xyz0 0 0/geometrycylinder length0.06 radius0.0775//geometrymaterial nameGraycolor rgba0.5 0.5 0.5 1.0//material/visual!-- 碰撞区域 --collisionorigin rpy1.5707963267948966 0 0 xyz0 0 0/geometrycylinder length0.06 radius0.0775//geometry/collisioninertialorigin rpy1.5707963267948966 0 0 xyz0 0 0/mass value0.8/inertia ixx0.0014412499999999998 ixy0 ixz0 iyy0.0014412499999999998 iyz0 izz0.0024025//inertial/link!-- 轮子关节 --joint nameright_wheel_joint typecontinuousparent linkbase_link/child linkright_wheel_link/origin rpy0 0 0 xyz0.15 -0.27 -0.055/axis xyz0 1 0//joint!-- 支撑轮 --link namecaster_linkvisualgeometrysphere radius0.03875//geometrymaterial nameCyancolor rgba0 1.0 1.0 1.0//material/visual!-- 碰撞区域 --collisionorigin rpy0 0 0 xyz0 0 0/geometrysphere radius0.03875//geometry/collisioninertialmass value0.5/inertia ixx0.0003003125 ixy0.0 ixz0.0 iyy0.0003003125 iyz0.0 izz0.0003003125//inertial/link!-- 支撑轮gazebo颜色 --gazebo referencecaster_linkmaterialGazebo/Black/material/gazebo!-- 支撑轮gazebo摩擦力 --gazebo referencecaster_linkmu1 value0.0/mu2 value0.0/kp value1000000.0/kd value10.0//gazebo!-- 支撑轮关节 --joint namecaster_joint typefixedparent linkbase_link/child linkcaster_link/origin rpy0 0 0 xyz-0.205 0.0 -0.09375//joint!-- imu --link nameimu_linkvisualgeometrybox size0.06 0.03 0.03//geometry/visual!-- 碰撞区域 --collisiongeometrybox size0.06 0.03 0.03//geometry/collisioninertialorigin rpy1.5707963267948966 0 1.5707963267948966 xyz0 0 0/mass value0.1/inertia ixx0.0001666666666666667 ixy0.0 ixz0.0 iyy0.0001666666666666667 iyz0.0 izz0.0001666666666666667//inertial/link!-- imu关节 --joint nameimu_joint typefixedparent linkbase_link/child linkimu_link/origin xyz-0.05 0 -0.055//joint!-- imu仿真插件 --gazebo referenceimu_linksensor nameimu_sensor typeimuplugin filenamelibgazebo_ros_imu_sensor.so nameimu_pluginros!-- 命名空间 --!-- namespace/demo/namespace --remapping~/out:imu/remapping/ros!-- 初始方位_参考 --initial_orientation_as_referencefalse/initial_orientation_as_reference/pluginalways_ontrue/always_on!-- 更新频率 --update_rate100/update_ratevisualizetrue/visualizeimu!-- 角速度 --angular_velocityxnoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/xynoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/yznoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/z/angular_velocity!-- 线性加速度 --linear_accelerationxnoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/xynoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/yznoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/z/linear_acceleration/imu/sensor/gazebo!-- 差速驱动仿真插件 --gazeboplugin filenamelibgazebo_ros_diff_drive.so namediff_driveros!-- 命名空间 --!-- namespace/demo/namespace --/ros!-- 左右轮子 --left_jointleft_wheel_joint/left_jointright_jointright_wheel_joint/right_joint!-- 轮距 轮子直径 --wheel_separation0.52/wheel_separation!-- wheel_separation0.52/wheel_separation --wheel_diameter0.155/wheel_diameter!-- wheel_diameter0.155/wheel_diameter --!-- 最大扭矩 最大加速度 --max_wheel_torque20/max_wheel_torquemax_wheel_acceleration1.0/max_wheel_acceleration!-- 输出 --!-- 是否发布里程计 --publish_odomtrue/publish_odom!-- 是否发布里程计的tf开关 --publish_odom_tftrue/publish_odom_tf!-- 是否发布轮子的tf数据开关 --publish_wheel_tftrue/publish_wheel_tf!-- 里程计的framed ID最终体现在话题和TF上 --odometry_frameodom/odometry_frame!-- 机器人的基础frame的ID --robot_base_framebase_link/robot_base_frame/plugin/gazebo!-- 雷达 --link namelaservisualorigin rpy0 0 0 xyz0 0 0/geometrycylinder length0.04 radius0.04//geometry/visual!-- 惯性属性 --inertialorigin rpy0 0 0 xyz0 0 0/mass value0.125/inertia ixx0.001 ixy0 ixz0 iyy0.001 iyz0 izz0.001//inertial!-- 碰撞区域 --collisionorigin rpy0 0 0 xyz0 0 0/geometrycylinder length0.04 radius0.04//geometry/collision/link!-- 雷达关节 --joint namelaser_joint typefixedparent linkbase_link/child linklaser/origin rpy0 0 0 xyz0.16 0 0.078//jointgazebo referencelasersensor namelaser typerayalways_ontrue/always_onvisualizefalse/visualizeupdate_rate5/update_raterayscanhorizontalsamples360/samplesresolution1.000000/resolutionmin_angle0.000000/min_anglemax_angle6.280000/max_angle/horizontal/scanrangemin0.120000/minmax3.5/maxresolution0.015000/resolution/rangenoisetypegaussian/typemean0.0/meanstddev0.01/stddev/noise/rayplugin filenamelibgazebo_ros_ray_sensor.so namescanrosremapping~/out:scan/remapping/rosoutput_typesensor_msgs/LaserScan/output_typeframe_namelaser/frame_name/plugin/sensor/gazebo!-- 相机 --link namecamera_linkvisualorigin rpy0 0 0 xyz0 0 0/geometrybox size0.015 0.130 0.022//geometry/visual!-- 碰撞区域 --collisionorigin rpy0 0 0 xyz0 0 0/geometrybox size0.015 0.130 0.022//geometry/collision!-- 惯性属性 --inertialorigin rpy0 0 0 xyz0 0 0/mass value0.035/inertia ixx0.001 ixy0 ixz0 iyy0.001 iyz0 izz0.001//inertial/link!-- 相机关节 --joint namecamera_joint typefixedparent linkbase_link/child linkcamera_link/origin rpy0 0 0 xyz0.16 0 0.11//joint!-- 深度相机 --link namecamera_depth_frame/joint namecamera_depth_joint typefixedorigin rpy0 0 0 xyz0 0 0/parent linkcamera_link/child linkcamera_depth_frame//joint!-- 相机仿真 --gazebo referencecamera_depth_linksensor namedepth_camera typedepthvisualizetrue/visualizeupdate_rate30.0/update_ratecamera namecamerahorizontal_fov1.047198/horizontal_fovimagewidth640/widthheight480/heightformatR8G8B8/format/imageclipnear0.05/nearfar3/far/clip/cameraplugin filenamelibgazebo_ros_camera.so namedepth_camera_controllerbaseline0.2/baselinealwaysOntrue/alwaysOnupdateRate0.0/updateRateframe_namecamera_depth_frame/frame_namepointCloudCutoff0.5/pointCloudCutoffpointCloudCutoffMax3.0/pointCloudCutoffMaxdistortionK10/distortionK1distortionK20/distortionK2distortionK30/distortionK3distortionT10/distortionT1distortionT20/distortionT2CxPrime0/CxPrimeCx0/CxCy0/CyfocalLength0/focalLengthhackBaseline0/hackBaseline/plugin/sensor/gazebo
/robotxacro编写的小车模型文件
!-- base.urdf.xacro --
?xml version1.0?
robot namejtbotxmlns:xacrohttp://ros.org/wiki/xacro!-- 定义机器人常量 --!-- 底盘 长 宽 高 --xacro:property namebase_width value0.46/xacro:property namebase_length value0.46/xacro:property namebase_height value0.11/!-- 轮子半径 --xacro:property namewheel_radius value0.0775/!-- 轮子宽度 --xacro:property namewheel_width value0.06/!-- 轮子和底盘的间距 --xacro:property namewheel_ygap value0.01/!-- 轮子z轴偏移量 --xacro:property namewheel_zoff value0.055/!-- 轮子x轴偏移量 --xacro:property namewheel_xoff value0.15/!-- 支撑轮x轴偏移量 --xacro:property namecaster_xoff value0.205/!-- 定义长方形惯性属性宏 --xacro:macro namebox_inertia paramsm w h dinertialorigin xyz0 0 0 rpy${pi/2} 0 ${pi/2}/mass value${m}/inertia ixx${(m/12) * (h*h d*d)} ixy0.0 ixz0.0 iyy${(m/12) * (w*w d*d)} iyz0.0 izz${(m/12) * (w*w h*h)}//inertial/xacro:macro!-- 定义圆柱惯性属性宏 --xacro:macro namecylinder_inertia paramsm r hinertialorigin xyz0 0 0 rpy${pi/2} 0 0 /mass value${m}/inertia ixx${(m/12) * (3*r*r h*h)} ixy 0 ixz 0 iyy${(m/12) * (3*r*r h*h)} iyz 0 izz${(m/2) * (r*r)}//inertial/xacro:macro!-- 定义球体惯性属性宏 --xacro:macro namesphere_inertia paramsm rinertialmass value${m}/inertia ixx${(2/5) * m * (r*r)} ixy0.0 ixz0.0 iyy${(2/5) * m * (r*r)} iyz0.0 izz${(2/5) * m * (r*r)}//inertial/xacro:macro!-- 机器人底盘 --link namebase_linkvisualgeometrybox size${base_length} ${base_width} ${base_height}//geometrymaterial nameCyancolor rgba0 1.0 1.0 1.0//material/visual!-- 碰撞区域 --collisiongeometrybox size${base_length} ${base_width} ${base_height}//geometry/collision!-- 惯性特性 --xacro:box_inertia m15 w${base_width} d${base_length} h${base_height}//link!-- 机器人 Footprint --link namebase_footprint/!-- 底盘关节 --joint namebase_joint typefixedparent linkbase_link/child linkbase_footprint/origin xyz0.0 0.0 ${-(wheel_radiuswheel_zoff)} rpy0 0 0//joint!-- 创建轮子宏函数 --xacro:macro namewheel paramsprefix x_reflect y_reflectlink name${prefix}_linkvisualorigin xyz0 0 0 rpy${pi/2} 0 0/geometrycylinder radius${wheel_radius} length${wheel_width}//geometrymaterial nameGraycolor rgba0.5 0.5 0.5 1.0//material/visual!-- 碰撞区域 --collisionorigin xyz0 0 0 rpy${pi/2} 0 0/geometrycylinder radius${wheel_radius} length${wheel_width}//geometry/collision!-- 惯性属性 --xacro:cylinder_inertia m0.8 r${wheel_radius} h${wheel_width}//link!-- 轮子关节 --joint name${prefix}_joint typecontinuousparent linkbase_link/child link${prefix}_link/origin xyz${x_reflect*wheel_xoff} ${y_reflect*(base_width/2wheel_width/2wheel_ygap)} ${-wheel_zoff} rpy0 0 0/axis xyz0 1 0//joint/xacro:macro!-- 根据上面的宏函数实例化左右轮 --xacro:wheel prefixleft_wheel x_reflect1 y_reflect1 /xacro:wheel prefixright_wheel x_reflect1 y_reflect-1 /!-- 支撑轮 --link namecaster_linkvisualgeometrysphere radius${(wheel_radius/2)}//geometrymaterial nameCyancolor rgba0 1.0 1.0 1.0//material/visual!-- 碰撞区域 --collisionorigin xyz0 0 0 rpy0 0 0/geometrysphere radius${(wheel_radius/2)}//geometry/collision!-- 惯性属性 --xacro:sphere_inertia m0.5 r${(wheel_radius/2)}//link!-- 支撑轮gazebo颜色 --gazebo referencecaster_linkmaterialGazebo/Black/material/gazebo!-- 支撑轮gazebo摩擦力 --gazebo referencecaster_linkmu1 value0.0/mu2 value0.0/kp value1000000.0 /kd value10.0 //gazebo!-- 支撑轮关节 --joint namecaster_joint typefixedparent linkbase_link/child linkcaster_link/origin xyz${-caster_xoff} 0.0 ${-(base_heightwheel_radius)/2} rpy0 0 0//joint!-- imu --link nameimu_linkvisualgeometrybox size0.06 0.03 0.03//geometry/visual!-- 碰撞区域 --collisiongeometrybox size0.06 0.03 0.03//geometry/collision!-- 惯性属性 --xacro:box_inertia m0.1 w0.1 d0.1 h0.1//link!-- imu关节 --joint nameimu_joint typefixedparent linkbase_link/child linkimu_link/origin xyz-0.05 0 -0.055//joint!-- imu仿真插件 --gazebo referenceimu_linksensor nameimu_sensor typeimuplugin filenamelibgazebo_ros_imu_sensor.so nameimu_pluginros!-- 命名空间 --!-- namespace/demo/namespace --remapping~/out:imu/remapping/ros!-- 初始方位_参考 --initial_orientation_as_referencetrue/initial_orientation_as_reference/pluginalways_ontrue/always_on!-- 更新频率 --update_rate100/update_ratevisualizetrue/visualizeimu!-- 角速度 --angular_velocityxnoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/xynoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/yznoise typegaussianmean0.0/meanstddev2e-4/stddevbias_mean0.0000075/bias_meanbias_stddev0.0000008/bias_stddev/noise/z/angular_velocity!-- 线性加速度 --linear_accelerationxnoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/xynoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/yznoise typegaussianmean0.0/meanstddev1.7e-2/stddevbias_mean0.1/bias_meanbias_stddev0.001/bias_stddev/noise/z/linear_acceleration/imu/sensor/gazebo!-- 差速驱动仿真插件 --gazeboplugin namediff_drive filenamelibgazebo_ros_diff_drive.soros!-- 命名空间 --!-- namespace/demo/namespace --/ros!-- 左右轮子 --left_jointleft_wheel_joint/left_jointright_jointright_wheel_joint/right_joint!-- 轮距 轮子直径 --wheel_separation${base_widthwheel_width}/wheel_separation!-- wheel_separation0.52/wheel_separation --wheel_diameter${wheel_radius*2}/wheel_diameter!-- wheel_diameter0.155/wheel_diameter --!-- 最大扭矩 最大加速度 --max_wheel_torque20/max_wheel_torquemax_wheel_acceleration1.0/max_wheel_acceleration!-- 输出 --!-- 是否发布里程计 --publish_odomtrue/publish_odom!-- 是否发布里程计的tf开关 --publish_odom_tftrue/publish_odom_tf!-- 是否发布轮子的tf数据开关 --publish_wheel_tftrue/publish_wheel_tf!-- 里程计的framed ID最终体现在话题和TF上 --odometry_frameodom/odometry_frame!-- 机器人的基础frame的ID --robot_base_framebase_link/robot_base_frame/plugin/gazebo!-- 雷达 --link namelaservisualorigin xyz0 0 0 rpy0 0 0/geometrycylinder radius0.04 length0.04//geometry/visual!-- 惯性属性 --inertialorigin xyz0 0 0 rpy0 0 0/mass value0.125/inertia ixx0.001 ixy0 ixz0 iyy0.001 iyz0 izz0.001 //inertial!-- 碰撞区域 --collisionorigin xyz0 0 0 rpy0 0 0/geometrycylinder radius0.04 length0.04//geometry/collision/link!-- 雷达关节 --joint namelaser_joint typefixedparent linkbase_link/child linklaser/origin xyz0.16 0 0.078 rpy0 0 0//jointgazebo referencelasersensor namelaser typerayalways_ontrue/always_onvisualizefalse/visualizeupdate_rate5/update_raterayscanhorizontalsamples360/samplesresolution1.000000/resolutionmin_angle0.000000/min_anglemax_angle6.280000/max_angle/horizontal/scanrangemin0.120000/minmax3.5/maxresolution0.015000/resolution/rangenoisetypegaussian/typemean0.0/meanstddev0.01/stddev/noise/rayplugin namescan filenamelibgazebo_ros_ray_sensor.sorosremapping~/out:scan/remapping/rosoutput_typesensor_msgs/LaserScan/output_typeframe_namelaser/frame_name/plugin/sensor/gazebo!-- 相机 --link namecamera_linkvisualorigin xyz0 0 0 rpy0 0 0/geometrybox size0.015 0.130 0.022//geometry/visual!-- 碰撞区域 --collisionorigin xyz0 0 0 rpy0 0 0/geometrybox size0.015 0.130 0.022//geometry/collision!-- 惯性属性 --inertialorigin xyz0 0 0 rpy0 0 0/mass value0.035/inertia ixx0.001 ixy0 ixz0 iyy0.001 iyz0 izz0.001 //inertial/link!-- 相机关节 --joint namecamera_joint typefixedparent linkbase_link/child linkcamera_link/origin xyz0.16 0 0.11 rpy0 0 0//joint!-- 深度相机 --link namecamera_depth_frame/joint namecamera_depth_joint typefixedorigin xyz0 0 0 rpy0 0 0/parent linkcamera_link/child linkcamera_depth_frame//joint!-- 相机仿真 --gazebo referencecamera_depth_linksensor namedepth_camera typedepthvisualizetrue/visualizeupdate_rate30.0/update_ratecamera namecamerahorizontal_fov1.047198/horizontal_fovimagewidth640/widthheight480/heightformatR8G8B8/format/imageclipnear0.05/nearfar3/far/clip/cameraplugin namedepth_camera_controller filenamelibgazebo_ros_camera.sobaseline0.2/baselinealwaysOntrue/alwaysOnupdateRate0.0/updateRateframe_namecamera_depth_frame/frame_namepointCloudCutoff0.5/pointCloudCutoffpointCloudCutoffMax3.0/pointCloudCutoffMaxdistortionK10/distortionK1distortionK20/distortionK2distortionK30/distortionK3distortionT10/distortionT1distortionT20/distortionT2CxPrime0/CxPrimeCx0/CxCy0/CyfocalLength0/focalLengthhackBaseline0/hackBaseline/plugin/sensor/gazebo/robot
xacro模型文件需要转成urdf模型文件才能使用
方法1 提前转换
当前文件夹打开终端输入base.urdf.xacro base.urdf生成纯urdf文件。
方法2 在运行launch文件的时候自动转需要加入xacro解析步骤
package.xml文件内在test_depend前加入exec_dependxacro/exec_depend
launch文件编写
# 此launch文件是机器人仿真程序包含 gazebo启动机器人仿真生成机器人模型状态发布
import os
from launch import LaunchDescription
from launch.actions import ExecuteProcess
from launch_ros.actions import Node
from launch_ros.substitutions import FindPackageShare
from launch.substitutions import LaunchConfiguration
import xacrodef generate_launch_description():robot_name_in_model jtbot #机器人模型名字package_name jtbot_description #模型包名ld LaunchDescription()use_sim_time LaunchConfiguration(use_sim_time, defaulttrue)pkg_share FindPackageShare(packagepackage_name).find(package_name) gazebo_world_path os.path.join(pkg_share, world/jt.world) #世界仿真文件路径default_rviz_config_path os.path.join(pkg_share, rviz/mrviz2.rviz) #rviz配置文件路径urdf_xacro_file os.path.join(pkg_share, urdf/jtbot_base.urdf.xacro) #xacro模型文件路径#解析xacro模型文件doc xacro.parse(open(urdf_xacro_file))xacro.process_doc(doc)params {robot_description: doc.toxml()}# 开启ros Gazebo serverstart_gazebo_cmd ExecuteProcess(cmd[gazebo,--verbose, gazebo_world_path,-s, libgazebo_ros_init.so, -s, libgazebo_ros_factory.so, ],outputscreen)# Start Robot State publisherstart_robot_state_publisher_cmd Node(packagerobot_state_publisher,executablerobot_state_publisher,outputscreen,parameters[params,{use_sim_time: use_sim_time}]) # gazebo内生成机器人spawn_entity_cmd Node(packagegazebo_ros, executablespawn_entity.py,arguments[-entity, robot_name_in_model, -topic, robot_description], outputscreen)# Launch RVizstart_rviz_cmd Node(packagerviz2,executablerviz2,namerviz2,outputscreen,arguments[-d, default_rviz_config_path])ld.add_action(start_gazebo_cmd)ld.add_action(spawn_entity_cmd)ld.add_action(start_robot_state_publisher_cmd)ld.add_action(start_rviz_cmd)return ld