1. 环境准备与基础概念在开始为无人机集成传感器之前我们需要确保PX4和Gazebo环境已经正确安装。这里我推荐使用Ubuntu 20.04 LTS系统因为它在ROS和PX4生态中兼容性最好。安装PX4开发环境时建议直接使用官方提供的脚本git clone https://github.com/PX4/PX4-Autopilot.git --recursive bash ./PX4-Autopilot/Tools/setup/ubuntu.sh安装完成后可以通过运行一个简单的四旋翼模型来测试环境是否正常make px4_sitl gazebo这个命令会启动一个默认的Iris无人机模型。如果你看到Gazebo界面弹出并且无人机稳定悬停在空中的场景说明基础环境已经就绪。传感器集成主要涉及三个关键组件激光雷达用于测距和障碍物检测双目相机提供深度感知能力下视摄像头则常用于视觉定位和降落辅助。在Gazebo中这些传感器都是通过SDFSimulation Description Format文件定义的这是一种基于XML的格式用于描述仿真环境中的所有元素。2. 激光雷达集成实战激光雷达是无人机避障和建图的核心传感器。在Gazebo中我们可以使用现成的RPLIDAR模型。首先需要在PX4的模型目录中创建自定义模型cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir iris_lidar cd iris_lidar创建一个名为model.config的文件内容如下?xml version1.0? model nameIris with RPLIDAR/name version1.0/version sdf version1.5iris_lidar.sdf/sdf description3DR Iris with RPLIDAR sensor/description /model然后创建主模型文件iris_lidar.sdf。这个文件需要继承基础Iris模型并添加激光雷达插件?xml version1.0? sdf version1.5 model nameiris_lidar include urimodel://iris/uri /include include urimodel://rplidar/uri pose0 0 0.1 0 0 0/pose /include joint namerplidar_joint typefixed childrplidar::link/child parentiris::base_link/parent /joint /model /sdf这里pose标签定义了激光雷达相对于无人机中心的位置x,y,z,roll,pitch,yaw。我通常会把雷达安装在顶部略高的位置避免螺旋桨遮挡扫描区域。3. 双目相机配置详解双目相机能提供丰富的环境深度信息是视觉SLAM的关键传感器。Gazebo中的双目相机实际上是通过两个单目相机加深度插件实现的。我们创建一个新的模型目录cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir stereo_camera cd stereo_cameramodel.config文件内容如下?xml version1.0? model nameStereo Camera/name version1.0/version sdf version1.5stereo_camera.sdf/sdf descriptionStereo camera pair for depth perception/description /model主模型文件stereo_camera.sdf的配置更为复杂需要定义两个相机及其之间的基线距离?xml version1.0? sdf version1.5 model namestereo_camera link namelink sensor typecamera nameleft_camera camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor sensor typecamera nameright_camera pose0.1 0 0 0 0 0/pose camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor /link /model /sdf这里的关键是pose标签中的0.1米基线距离这是双目视觉计算深度的基础。实际项目中这个值需要根据你选用的真实相机参数进行调整。4. 下视摄像头集成技巧下视摄像头通常用于精准降落和位置保持。与双目相机不同下视摄像头一般是单目配置相对简单。创建模型目录cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir down_camera cd down_cameramodel.config文件内容?xml version1.0? model nameDownward Camera/name version1.0/version sdf version1.5down_camera.sdf/sdf descriptionDownward facing camera for landing/description /model主模型文件down_camera.sdf需要特别注意相机的朝向?xml version1.0? sdf version1.5 model namedown_camera link namelink sensor typecamera namecamera pose0 0 0 0 1.57 0/pose camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor /link /model /sdf这里的pose中1.57弧度约90度表示相机朝下安装。在实际飞行中这种配置可以帮助无人机识别地面标记或降落平台。5. 传感器融合与最终集成现在我们已经准备好了所有传感器模型接下来需要将它们整合到一个无人机模型中。创建最终的融合模型cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir iris_fusion cd iris_fusionmodel.config文件内容?xml version1.0? model nameIris with Fusion Sensors/name version1.0/version sdf version1.5iris_fusion.sdf/sdf description3DR Iris with LIDAR, stereo and down cameras/description /model主模型文件iris_fusion.sdf将整合所有组件?xml version1.0? sdf version1.5 model nameiris_fusion include urimodel://iris/uri /include include urimodel://stereo_camera/uri pose0.1 0 0 0 0 0/pose /include include urimodel://rplidar/uri pose0 0 0.1 0 0 0/pose /include include urimodel://down_camera/uri pose0 0 -0.05 0 1.57 0/pose /include /model /sdf每个传感器的位置都需要仔细考虑避免相互遮挡和重心偏移。在我的项目中发现将双目相机前置、激光雷达顶部居中、下视摄像头底部略靠后是最佳布局。6. 启动文件修改与测试最后一步是修改启动文件来使用我们的新模型。编辑~/PX4-Autopilot/launch/mavros_posix_sitl.launch文件找到模型参数部分arg namevehicle defaultiris/ arg namemy_model defaultiris_fusion/ arg nameworld default$(find mavlink_sitl_gazebo)/worlds/empty.world/ arg namesdf default$(find mavlink_sitl_gazebo)/models/$(arg my_model)/$(arg my_model).sdf/启动仿真环境roslaunch px4 mavros_posix_sitl.launch测试传感器数据流使用rqt_image_view查看相机图像使用rostopic echo /laser/scan检查激光雷达数据使用rviz可视化所有传感器数据在集成过程中最常见的坑是传感器坐标系混乱。建议在第一次运行时先用rostopic list确认所有预期的话题都已经正确发布然后用rostopic hz检查数据频率是否符合预期。
PX4与Gazebo仿真进阶:为无人机集成激光雷达、双目与下视相机的实战指南
1. 环境准备与基础概念在开始为无人机集成传感器之前我们需要确保PX4和Gazebo环境已经正确安装。这里我推荐使用Ubuntu 20.04 LTS系统因为它在ROS和PX4生态中兼容性最好。安装PX4开发环境时建议直接使用官方提供的脚本git clone https://github.com/PX4/PX4-Autopilot.git --recursive bash ./PX4-Autopilot/Tools/setup/ubuntu.sh安装完成后可以通过运行一个简单的四旋翼模型来测试环境是否正常make px4_sitl gazebo这个命令会启动一个默认的Iris无人机模型。如果你看到Gazebo界面弹出并且无人机稳定悬停在空中的场景说明基础环境已经就绪。传感器集成主要涉及三个关键组件激光雷达用于测距和障碍物检测双目相机提供深度感知能力下视摄像头则常用于视觉定位和降落辅助。在Gazebo中这些传感器都是通过SDFSimulation Description Format文件定义的这是一种基于XML的格式用于描述仿真环境中的所有元素。2. 激光雷达集成实战激光雷达是无人机避障和建图的核心传感器。在Gazebo中我们可以使用现成的RPLIDAR模型。首先需要在PX4的模型目录中创建自定义模型cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir iris_lidar cd iris_lidar创建一个名为model.config的文件内容如下?xml version1.0? model nameIris with RPLIDAR/name version1.0/version sdf version1.5iris_lidar.sdf/sdf description3DR Iris with RPLIDAR sensor/description /model然后创建主模型文件iris_lidar.sdf。这个文件需要继承基础Iris模型并添加激光雷达插件?xml version1.0? sdf version1.5 model nameiris_lidar include urimodel://iris/uri /include include urimodel://rplidar/uri pose0 0 0.1 0 0 0/pose /include joint namerplidar_joint typefixed childrplidar::link/child parentiris::base_link/parent /joint /model /sdf这里pose标签定义了激光雷达相对于无人机中心的位置x,y,z,roll,pitch,yaw。我通常会把雷达安装在顶部略高的位置避免螺旋桨遮挡扫描区域。3. 双目相机配置详解双目相机能提供丰富的环境深度信息是视觉SLAM的关键传感器。Gazebo中的双目相机实际上是通过两个单目相机加深度插件实现的。我们创建一个新的模型目录cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir stereo_camera cd stereo_cameramodel.config文件内容如下?xml version1.0? model nameStereo Camera/name version1.0/version sdf version1.5stereo_camera.sdf/sdf descriptionStereo camera pair for depth perception/description /model主模型文件stereo_camera.sdf的配置更为复杂需要定义两个相机及其之间的基线距离?xml version1.0? sdf version1.5 model namestereo_camera link namelink sensor typecamera nameleft_camera camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor sensor typecamera nameright_camera pose0.1 0 0 0 0 0/pose camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor /link /model /sdf这里的关键是pose标签中的0.1米基线距离这是双目视觉计算深度的基础。实际项目中这个值需要根据你选用的真实相机参数进行调整。4. 下视摄像头集成技巧下视摄像头通常用于精准降落和位置保持。与双目相机不同下视摄像头一般是单目配置相对简单。创建模型目录cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir down_camera cd down_cameramodel.config文件内容?xml version1.0? model nameDownward Camera/name version1.0/version sdf version1.5down_camera.sdf/sdf descriptionDownward facing camera for landing/description /model主模型文件down_camera.sdf需要特别注意相机的朝向?xml version1.0? sdf version1.5 model namedown_camera link namelink sensor typecamera namecamera pose0 0 0 0 1.57 0/pose camera horizontal_fov1.047/horizontal_fov image width640/width height480/height /image /camera /sensor /link /model /sdf这里的pose中1.57弧度约90度表示相机朝下安装。在实际飞行中这种配置可以帮助无人机识别地面标记或降落平台。5. 传感器融合与最终集成现在我们已经准备好了所有传感器模型接下来需要将它们整合到一个无人机模型中。创建最终的融合模型cd ~/PX4-Autopilot/Tools/sitl_gazebo/models mkdir iris_fusion cd iris_fusionmodel.config文件内容?xml version1.0? model nameIris with Fusion Sensors/name version1.0/version sdf version1.5iris_fusion.sdf/sdf description3DR Iris with LIDAR, stereo and down cameras/description /model主模型文件iris_fusion.sdf将整合所有组件?xml version1.0? sdf version1.5 model nameiris_fusion include urimodel://iris/uri /include include urimodel://stereo_camera/uri pose0.1 0 0 0 0 0/pose /include include urimodel://rplidar/uri pose0 0 0.1 0 0 0/pose /include include urimodel://down_camera/uri pose0 0 -0.05 0 1.57 0/pose /include /model /sdf每个传感器的位置都需要仔细考虑避免相互遮挡和重心偏移。在我的项目中发现将双目相机前置、激光雷达顶部居中、下视摄像头底部略靠后是最佳布局。6. 启动文件修改与测试最后一步是修改启动文件来使用我们的新模型。编辑~/PX4-Autopilot/launch/mavros_posix_sitl.launch文件找到模型参数部分arg namevehicle defaultiris/ arg namemy_model defaultiris_fusion/ arg nameworld default$(find mavlink_sitl_gazebo)/worlds/empty.world/ arg namesdf default$(find mavlink_sitl_gazebo)/models/$(arg my_model)/$(arg my_model).sdf/启动仿真环境roslaunch px4 mavros_posix_sitl.launch测试传感器数据流使用rqt_image_view查看相机图像使用rostopic echo /laser/scan检查激光雷达数据使用rviz可视化所有传感器数据在集成过程中最常见的坑是传感器坐标系混乱。建议在第一次运行时先用rostopic list确认所有预期的话题都已经正确发布然后用rostopic hz检查数据频率是否符合预期。