一、gazebo自带插件介绍
gazebo自带的插件可分为4类,分别是
控制器插件(Controller Plugins):这些插件用于添加和控制模型的运动。
传感器插件(Sensor Plugins):Gazebo 支持各种传感器模拟,如摄像头、激光雷达、IMU 等。这些传感器通常由插件驱动。
用户界面插件(User Interface Plugins):这些插件用于自定义 Gazebo 仿真的用户界面。
世界插件(World Plugins):这些插件可以添加到仿真世界中,用于实现全局的行为和效果。
gazebo 11安装时会自动安装相应的插件,gazebo插件so库的目录路径如下:
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins
这些插件共有74个,包括常见的基本插件如差速驱动的插件libDiffDrivePlugin.so
,手柄控制的插件libJoyPlugin.so
,还有一些第三方插件如libLedPlugin.so
。
具体插件清单如下:
libActorPlugin.so: 用于模拟角色或演员,通常用于虚拟场景中的人物。
libActuatorPlugin.so: 用于模拟各种类型的执行器或致动器。
libAmbientOcclusionVisualPlugin.so: 用于增强环境光遮蔽的可视效果。
libArduCopterPlugin.so: 用于模拟 ArduCopter 多旋翼飞行器的行为。
libArrangePlugin.so: 用于安排和排列物体或元素的插件。
libAttachLightPlugin.so: 用于将光源附加到物体上,改善物体的照明效果。
libBlinkVisualPlugin.so: 用于模拟物体的闪烁或闪光效果。
libBreakableJointPlugin.so: 用于模拟可以断裂的关节。
libBuoyancyPlugin.so: 用于模拟物体在液体中的浮力和浮动。
libCameraPlugin.so: 用于模拟相机传感器,实现视觉数据的仿真。
libCartDemoPlugin.so: 用于演示购物车或运输车辆的仿真。
libCessnaGUIPlugin.so: 用于 Cessna 飞机的用户界面。
libCessnaPlugin.so: 用于模拟 Cess不na 飞机。
libContactPlugin.so: 用于处理物体之间的碰撞和接触。
libContainPlugin.so: 用于模拟容器和容纳物体的插件。
libDepthCameraPlugin.so: 用于模拟深度相机传感器。
libDiffDrivePlugin.so: 用于模拟差动驱动机器人的运动和控制。
libElevatorPlugin.so: 用于模拟电梯或升降机的行为。
libFiducialCameraPlugin.so: 用于模拟基准相机传感器。
libFlashLightPlugin.so: 用于模拟闪光灯或探照灯的光照效果。
libFollowerPlugin.so: 用于模拟跟随物体或路径的仿真。
libForceTorquePlugin.so: 用于模拟力和扭矩传感器。
libGimbalSmall2dPlugin.so: 用于模拟双轴云台的行为。
libGpuRayPlugin.so: 用于模拟使用 GPU 进行激光线束的仿真。
libGravityCompensationPlugin.so: 用于模拟重力补偿控制。
libHarnessPlugin.so: 用于模拟各种类型的齿轮和支撑装置。
libHeightmapLODPlugin.so: 用于模拟高程图的级别细节。
libHydraDemoPlugin.so: 用于演示 Hydra 设备的仿真。
libHydraPlugin.so: 用于模拟 Hydra 设备的行为。
libImuSensorPlugin.so: 用于模拟惯性测量单元 (IMU) 传感器。
libInitialVelocityPlugin.so: 用于模拟物体的初始速度。
libJointControlPlugin.so: 用于控制物体的关节和连接。
libJointTrajectoryPlugin.so: 用于模拟物体的关节轨迹。
libJoyPlugin.so: 用于处理游戏手柄或遥控器输入的仿真。
libKeyboardGUIPlugin.so: 用于模拟键盘输入的用户界面。
libKeysToCmdVelPlugin.so: 用于将键盘输入映射到速度命令。
libKeysToJointsPlugin.so: 用于将键盘输入映射到关节命令。
libLedPlugin.so: 用于模拟 LED 灯或指示灯的效果。
libLensFlareSensorPlugin.so: 用于模拟透镜耀斑传感器。
libLiftDragPlugin.so: 用于模拟升力和阻力。
libLinearBatteryConsumerPlugin.so: 用于模拟线性电池的消耗。
libLinearBatteryPlugin.so: 用于模拟线性电池。
libLinkPlot3DPlugin.so: 用于模拟三维连接图。
libLookAtDemoPlugin.so: 用于演示注视目标的仿真。
libMisalignmentPlugin.so: 用于模拟连接的误差或不精确性。
libModelPropShop.so: 用于创建和管理物体属性的插件。
libMudPlugin.so: 用于模拟泥浆和泥土效果的插件。
libPlaneDemoPlugin.so: 用于演示飞机的仿真。
libPressurePlugin.so: 用于模拟气压传感器。
libRandomVelocityPlugin.so: 用于模拟物体的随机速度。
libRayPlugin.so: 用于模拟射线传感器。
libRaySensorNoisePlugin.so: 用于模拟射线传感器的噪声效果。
libReflectancePlugin.so: 用于模拟反射性传感器。
libRegionEventBoxPlugin.so: 用于创建事件触发区域的插件。
libRestUiPlugin.so: 用于用户界面的休息和复位。
libRestWebPlugin.so: 用于创建 Web 用户界面的插件。
libRubblePlugin.so: 用于模拟碎石和碎片效果的插件。
libShaderParamVisualPlugin.so: 用于控制着色器参数的可视效果。
libSimEventsPlugin.so: 用于模拟事件和事件触发。
libSimpleTrackedVehiclePlugin.so: 用于模拟简单的履带式车辆。
libSkidSteerDrivePlugin.so: 用于模拟斜摩擦驱动机器人的运动和控制。
libSonarPlugin.so: 用于模拟声纳传感器。
libSphereAtlasDemoPlugin.so: 用于演示球体图集的仿真。
libStaticMapPlugin.so: 用于模拟静态地图的插件。
libStopWorldPlugin.so: 用于停止仿真世界的插件。
libTimerGUIPlugin.so: 用于创建计时器用户界面的插件。
libTouchPlugin.so: 用于模拟触摸传感器。
libTrackedVehiclePlugin.so: 用于模拟履带式车辆。
libTransporterPlugin.so: 用于模拟运输设备的插件。
libVariableGearboxPlugin.so: 用于模拟可变变速器的插件。
libVehiclePlugin.so: 用于模拟车辆的插件。
libWheelSlipPlugin.so: 用于模拟车轮打滑的效果。
libWheelTrackedVehiclePlugin.so: 用于模拟车轮履带式车辆的插件。
libWindPlugin.so: 用于模拟风力和风向的插件。
二、world场景中测试插件
gazbeo提供world
场景文件可以测试这些插件的功能,world
场景文件目录路径如下:
/usr/share/gazebo-11/worlds
world
场景清单如下:
actor_bvh.world nested_model.world
actor.world nested_multilink_shape.world
animated_box.world openal.world
animation_tension.world ortho.world
attach_lights.world osrf_elevator.world
blank.world pioneer2dx_camera.world
blink_visual.world pioneer2dx_laser_camera.world
cafe.world pioneer2dx_laser.world
camera_intrinsics.world pioneer2dx.world
camera.world plane_demo.world
cart_demo.world plane_propeller_demo.world
cessna_demo.world plot3d.world
collision_zero.world plugin.world
contact.world point_light_shadows_demo.world
contain_plugin_demo.world polyline.world
contain_plugin_moving_demo.world population.world
deform_visual.world pr2.world
depth_camera2.world presentation.world
depth_camera.world pressure_sensor.world
elevator.world profiler.world
empty_1_0.world projector.world
empty_bullet.world random_velocity.world
empty_sky.world ray_cpu.world
empty.world ray_noise_plugin.world
everything.world reflectance.world
fiducial.world road_textures.world
flash_light_plugin_demo.world road.world
flocking.world robocup09_spl_field.world
force_torque_demo.world robocup14_spl_field.world
friction_demo.world robocup_3Dsim.world
friction_pyramid.world rubble.world
fuel_models.world seesaw.world
gravity_compensation.world shapes_bitmask.world
gripper.world shapes_layers.world
harness.world shapes_shininess.world
heightmap_dem.world shapes.world
heightmap.world sim_events.world
hydra_demo.world simple_arm_teleop.world
imu_demo.world simple_arm.world
initial_velocity.world simple_gripper.world
init_joint_control.world single_rotor_demo.world
iris_arducopter_demo.world sonar_demo.world
joint_damping_demo.world sphere_atlas_demo.world
joint_friction_demo.world spotlight_shadows_demo.world
joints.world ssao_plugin.world
joy_demo.world stacks.world
keys_to_cmd_vel.world static_map_plugin.world
led_plugin_demo.world timer_gui.world
lensflare_plugin.world torsional_friction_demo.world
lensflare_wideangle_cam.world touch_plugin_demo.world
lift_drag_demo.world tracked_vehicle_simple.world
lights.world tracked_vehicle_wheeled.world
linear_battery_demo.world transporter.world
logical_camera.world trigger.world
lookat_demo.world twin_rotor_demo.world
magnetometer.world underwater.world
mass_on_rails.world variable_gearbox_plugin.world
misalignment_plugin_demo.world willowgarage.world
mud_bitmask.world wind_demo.world
mud.world wireless_sensors.world
multilink_shape.world zephyr_demo.world
加载附带行人插件world
场景文件:
cd /usr/share/gazebo-11/worlds
gazebo actor_bvh.world
三、Gazebo插件源码
Gazebo 11插件的源码可以从gazebo的整个工程目录中寻找,以下为gazebo 11自带的插件源码地址。
https://github.com/gazebosim/gazebo-classic/tree/gazebo11/plugins
三、ROS自带的gazebo插件
ROS自带gazebo的插件,可通过下列命令查看
ls /opt/ros/melodic/lib/libgazebo_ros_*
libgazebo_ros_api_plugin.so
libgazebo_ros_block_laser.so
libgazebo_ros_bumper.so
libgazebo_ros_camera.so
libgazebo_ros_camera_utils.so
libgazebo_ros_control.so
libgazebo_ros_depth_camera.so
libgazebo_ros_diff_drive.so
libgazebo_ros_elevator.so
libgazebo_ros_f3d.so
libgazebo_ros_force.so
libgazebo_ros_ft_sensor.so
libgazebo_ros_gpu_laser.so
libgazebo_ros_hand_of_god.so
libgazebo_ros_harness.so
libgazebo_ros_imu_sensor.so
libgazebo_ros_imu.so
libgazebo_ros_joint_pose_trajectory.so
libgazebo_ros_joint_state_publisher.so
libgazebo_ros_laser.so
libgazebo_ros_multicamera.so
libgazebo_ros_openni_kinect.so
libgazebo_ros_p3d.so
libgazebo_ros_paths_plugin.so
libgazebo_ros_planar_move.so
libgazebo_ros_projector.so
libgazebo_ros_prosilica.so
libgazebo_ros_range.so
libgazebo_ros_skid_steer_drive.so
libgazebo_ros_template.so
libgazebo_ros_tricycle_drive.so
libgazebo_ros_triggered_camera.so
libgazebo_ros_triggered_multicamera.so
libgazebo_ros_utils.so
libgazebo_ros_vacuum_gripper.so
libgazebo_ros_video.so
libgazebo_ros_wheel_slip.so
- vision_reconfigure:用于重新配置视觉传感器,允许在运行时更改传感器参数。
- gazebo_ros_utils:提供一些常用的ROS与Gazebo通信功能,用于简化ROS节点与Gazebo的交互。
- gazebo_ros_camera_utils:包含有关Gazebo相机传感器的实用工具和功能。
- gazebo_ros_camera:用于在Gazebo中模拟相机传感器,可用于生成图像数据。
- gazebo_ros_triggered_camera:模拟可触发的相机传感器,以便在需要时捕获图像。
- gazebo_ros_multicamera:允许在Gazebo中模拟多个相机传感器,用于多视角或多摄像头系统。
- MultiCameraPlugin:用于配置和管理多摄像头系统的插件。
- gazebo_ros_triggered_multicamera:模拟可触发的多摄像头系统,可按需捕获图像。
- gazebo_ros_depth_camera:用于模拟深度相机传感器,可生成深度图像。
- gazebo_ros_openni_kinect:模拟Microsoft Kinect传感器,可用于深度和RGB图像捕获。
- gazebo_ros_laser:用于模拟激光雷达传感器,可生成激光扫描数据。
- gazebo_ros_gpu_laser: 用于模拟GPU加速的激光雷达传感器,提供更高的性能。
- gazebo_ros_block_laser:模拟块式激光雷达传感器,可用于生成离散障碍物信息。
- gazebo_ros_p3d:用于模拟3D位置和姿态传感器,可用于获取机器人在空间中的位置和方向。
- gazebo_ros_imu:模拟惯性测量单元(IMU)传感器,用于获取机器人的加速度和角速度数据。
- gazebo_ros_imu_sensor:提供IMU传感器的功能,用于模拟姿态和运动。
- gazebo_ros_f3d:用于模拟3D力传感器,可测量物体对机器人的力。
- gazebo_ros_ft_sensor:提供力和扭矩传感器的功能,用于模拟机器人的触觉。
- gazebo_ros_bumper:用于模拟机器人的碰撞传感器,可检测碰撞事件。
- gazebo_ros_hand_of_god:允许用户通过手动干预将物体移动到新位置的插件。
- gazebo_ros_template:用于创建自定义插件的模板,可根据需要定制。
- gazebo_ros_projector: 用于模拟投影仪,可在Gazebo仿真中投射图像或光束。
- gazebo_ros_prosilica: 用于模拟Prosilica相机,支持高性能相机图像捕获。
- gazebo_ros_force: 提供力和扭矩控制,允许用户对物体施加力和扭矩。
- gazebo_ros_joint_state_publisher: 用于发布机器人模型的关节状态信息到ROS,以供其他节点使用。
- gazebo_ros_joint_pose_trajectory: 允许用户通过ROS消息控制机器人关节的位置轨迹。
- gazebo_ros_diff_drive: 用于模拟差动驱动机器人,提供ROS接口以控制差分驱动。
- gazebo_ros_tricycle_drive: 用于模拟三轮车型机器人,可控制三轮车的运动。
- gazebo_ros_skid_steer_drive: 用于模拟滑移驱动机器人,支持滑移运动的控制。
- gazebo_ros_video: 用于模拟视频流传感器,可用于在Gazebo中生成模拟视频流。
- gazebo_ros_planar_move: 允许用户通过ROS消息控制模型的平面运动,用于控制机器人的平移。
- gazebo_ros_range: 用于模拟测距传感器,可测量物体与传感器之间的距离。
- gazebo_ros_vacuum_gripper: 用于模拟真空夹具或夹爪,可用于机器人的物体抓取和释放。
- gazebo_ros_elevator: 电梯插件,可以控制电梯门开关和电梯上下运动。(gazebo>6.0)
- gazebo_ros_harness: 插件用于模拟物体上的绳索、链条或绳索的行为。它允许你将绳索连接到物体上,并模拟受重力和其他物理效应的影响。这对于模拟吊索、绳索、吊车等应用非常有用。(gazebo>7.3)
- gazebo_ros_wheel_slip: 插件用于模拟轮胎的打滑行为。它是用于在模拟中实现轮胎与地面之间的附着和打滑行为的插件。轮胎与地面之间的附着和打滑是模拟车辆和机器人移动时至关重要的因素。这个插件允许模拟不同地面条件下的车辆轮胎行为,包括附着和打滑。(gazebo>9.5)
四、ROS插件源码
ROS的Gazebo插件源码也在github上开源了,以下是ROS的Gazebo插件源码开源地址:
https://github.com/ros-simulation/gazebo_ros_pkgs/tree/noetic-devel/gazebo_plugins/src
五、Gazebo和ROS插件的区别
这两个目录下的插件来自不同的源和版本:
-
/usr/lib/x86_64-linux-gnu/gazebo-11/plugins:
- 这些插件是直接与 Gazebo 仿真引擎捆绑在一起的。
- 位于系统的 Gazebo 11 安装目录,提供了 Gazebo 本身的核心功能。
- 这些插件与特定版本的 Gazebo 直接关联,因此它们可能包含与 Gazebo 11 版本的兼容性。
-
/opt/ros/melodic/lib/libgazebo_ros_*:
- 这些插件是由 ROS Noetic 版本的
gazebo_ros_pkgs
包提供的。 - 针对 ROS Noetic 中的 Gazebo 版本编译和优化的插件。
- 这些插件通常用于与 ROS 集成,提供 ROS 接口以及其他 ROS 相关功能。
- 这些插件是由 ROS Noetic 版本的
区别主要在于它们的关联版本和提供的功能。/opt/ros/melodic/lib/libgazebo_ros_*
是 ROS 对 Gazebo 的封装,以提供 ROS 用户友好的接口和功能,而 /usr/lib/x86_64-linux-gnu/gazebo-11/plugins
包含 Gazebo 自身的核心插件,用于支持 Gazebo 的基本功能,不包含ROS接口。