一、基础平台搭建

Ubuntu20.04+ROS noetic +PX4(1.14版本)
参考本篇博文:Ubuntu20.04下PX4开发环境搭建(v1.14.0)
注意:Ubuntu20.04默认的Gazebo版本是11,适用于PX4的1.14版本。如果是想要用PX4的1.10版本请使用Ubuntu18.04(适配Gazebo9.0)

二、Mid360仿真构建

大致流程是参考本篇文章:
Livox-mid360+PX4+XTDrone+Faster-lio仿真
但是其中有一些细节本篇文章粗略带过导致配置过程中还是走了不少弯路,在此重新说一遍整个流程。并且本片博文是基于XTDrone,我这里不用XTDrone,只使用PX4.

1、准备

要配置好环境,包括ROS,Gazebo,Ubuntu系统,NVIDIA显卡驱动,MAVROS,PX4,XTDrone以及环境依赖,可以参考以下链接。

仿真平台基础配置(对应PX4 1.14版)

我的配置是:Ubuntu20.04,ros1-noetic,Gazebo11

2、将Livox-mid360安装到iris无人机模型上

整个逻辑是这样,通过mavros_posix_sitl.launch生成地图,然后该launch文件中通过参数sdf选择iris_3d_lidar_360无人机,launch文件通过iris_3d_lidar_360.sdf文件将无人机加载进地图,而无人机的sdf文件又用include来引入了Mid360模型,通过Mid360文件夹下的Mid360.sdf再将mid360雷达加入无人机上,最终搭配了mid360的无人机同地图一起在gazebo中生成,所以我们按照这个逻辑来逐一改。

无人机模型和传感器模型都在PX4里,所以得到下面这个路径下
/home/skbt/PX4_Firmware/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/
创建一个iris_3d_lidar_360文件夹(所有相关文件我会后续整理出来放在后面供大家下载)。
再修改iris_3d_lidar_360.sdf,这个文件引入了PX4包里面原来就有的iris无人机,并加入了mid360雷达。

<?xml version="1.0" ?>
<sdf version='1.5'>
  <model name='iris_3d_lidar'>
    <include>
      <uri>model://iris</uri>
    </include>
    <include>
      <uri>model://Mid360</uri>
      <pose>0 0 0.05 0 0 0</pose>
    </include>
    <joint name="lidar_joint" type="fixed">
      <child>Mid360::livox_base</child>
      <parent>base_link</parent>
      <axis>
        <xyz>0 0 1</xyz>
        <limit>
          <upper>0</upper>
          <lower>0</lower>
        </limit>
      </axis>
    </joint>
    <!-- For Stereo Camera Payload -->
    <include>
      <uri>model://stereo_camera</uri>
      <pose>0.1 0 0 0 0 0</pose>
    </include>
  </model>
</sdf>
<!-- vim: set noet fenc=utf-8 ff=unix sts=0 sw=4 ts=4 : -->

这样,无人机就引入了雷达,但是只是include了,还需要把这个雷达的文件拿过来

于是还是在models路径下添加文件夹,先添加Mid360文件夹,其中的sdf文件定义Livox Mid360雷达在Gazebo中的物理模型与传感器特性。
在这里插入图片描述

在这里插入图片描述修改Mid360模型文件、标签所引用的文件路径。

<!--在collision标签使用livox_mid40.dae的原因,据gpt分析是为了简化碰撞体积的计算-->
<uri>model://livox_mid40/meshes/livox_mid40.dae</uri>
<uri>model://livox_mid40/meshes/mid360.dae</uri>

再修改<csv_file_name>路径(这个livox_laser_simulation包在第三步会安装,可以一会儿安装好之后再回来改)
在这里插入图片描述

<csv_file_name>/home/skbt/mid360_ws/src/livox_laser_simulation/scan_mode</csv_file_name>

最后再补充livox_mid40文件夹的东西:
在这里插入图片描述
最后再在mavros_posix_sitl.launch中把sdf换成我们的无人机,到此就把mid360添加到无人机上,验证一下(不知道怎么改就照搬下面这个文件即可):

<?xml version="1.0"?>
<launch>
    <!-- MAVROS posix SITL environment launch script -->
    <!-- launches MAVROS, PX4 SITL, Gazebo environment, and spawns vehicle -->
    <!-- vehicle pose -->
    <arg name="x" default="0"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0"/>
    <arg name="R" default="0"/>
    <arg name="P" default="0"/>
    <arg name="Y" default="0"/>
    <!-- vehicle model and world -->
    <arg name="est" default="ekf2"/>
    <arg name="vehicle" default="iris"/>
    <arg name="my_model" default="iris_3d_lidar_360"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>
    <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>

  <!-- 添加camera_link的静态TF发布器 -->
  <node pkg="tf" type="static_transform_publisher"
        name="camera_link_tf"
        args="0.1 0 0 0 0 0 iris::base_link camera_link 100" />


    <!-- gazebo configs -->
    <arg name="gui" default="true"/>
    <arg name="debug" default="false"/>
    <arg name="verbose" default="false"/>
    <arg name="paused" default="false"/>
    <arg name="respawn_gazebo" default="false"/>
    <!-- MAVROS configs -->
    <arg name="fcu_url" default="udp://:14540@localhost:14557"/>
    <arg name="respawn_mavros" default="false"/>
    <!-- PX4 configs -->
    <arg name="interactive" default="true"/>
    <!-- PX4 SITL and Gazebo -->
    <include file="$(find px4)/launch/posix_sitl.launch">
        <arg name="x" value="$(arg x)"/>
        <arg name="y" value="$(arg y)"/>
        <arg name="z" value="$(arg z)"/>
        <arg name="R" value="$(arg R)"/>
        <arg name="P" value="$(arg P)"/>
        <arg name="Y" value="$(arg Y)"/>
        <arg name="world" value="$(arg world)"/>
        <arg name="vehicle" value="$(arg vehicle)"/>
        <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg my_model)/$(arg my_model).sdf"/>
        <arg name="gui" value="$(arg gui)"/>
        <arg name="interactive" value="$(arg interactive)"/>
        <arg name="debug" value="$(arg debug)"/>
        <arg name="verbose" value="$(arg verbose)"/>
        <arg name="paused" value="$(arg paused)"/>
        <arg name="respawn_gazebo" value="$(arg respawn_gazebo)"/>
    </include>
    <!-- MAVROS -->
    <include file="$(find mavros)/launch/px4.launch">
        <!-- GCS link is provided by SITL -->
        <arg name="gcs_url" value=""/>
        <arg name="fcu_url" value="$(arg fcu_url)"/>
        <arg name="respawn_mavros" value="$(arg respawn_mavros)"/>
    </include>
</launch>

运行:

roslaunch px4 mavros_posix_sitl.launch

即可看到无人机上面已经有了mid360.但是此刻还没有mid360点云话题发布,因为还没有安装驱动。

3、安装Mid360雷达驱动和Livox雷达仿真库

这里注意,livox雷达驱动分为livox_ros_driver和livox_ros_driver2,以及对应的SDK,这里我们要用的是Mid360,所以要下载livox_ros_driver2和Livox-SDK2,且工作空间中尽量不要把两种驱动都安,有可能出现冲突。

3.1安装Mid360雷达驱动livox_ros_driver2

这个驱动是实物或者仿真都需要安装的总驱动。如果做实物,就把这个安装了就可以了,就没有必要安装后面那个livox_laser_simulation了。

mkdir mid360_ws/src -p
cd ~/mid360_ws/src/
git clone https://github.com/Livox-SDK/livox_ros_driver2.git
git clone https://github.com/Livox-SDK/Livox-SDK2.git
 
cd ./Livox-SDK2/
mkdir build
cd build
cmake .. && make -j
sudo make install
 
cd ../livox_ros_driver2
source /opt/ros/noetic/setup.sh

3.2安装Livox雷达仿真库livox_laser_simulation

cd ~/mid360_ws/src
git clone https://github.com/Luchuanzhao/Livox_simulation_customMsg
mv Livox_simulation_customMsg livox_laser_simulation
#修改激光雷达文件路径
cd ~/mid360_ws/src/livox_laser_simulation/src
code livox_points_plugin.cpp
#将第54行的内容改为自己电脑实际的csv文件路径
#例如:/home/ztl/mid360_ws/src/livox_laser_simulation/scan_mode/mid360.csv.
#但是注意:从github下载下来的livox_laser_simulation包的scan_mode中没有mid360.csv。
#需要我们从之前的文件夹中把这个文件复制过来,这个非常重要。
#不然的话会报错。或者你用文件夹中本来就有的avia.csv的话
#出来的点云只有很小一个角度的,因为数据不全。
 
#将101行改为自己需要的点云格式:0->PointCloud;1/2->PointCloud2;3->CustomMsg
#如果后续要使用Faster-LIO,需使用CustomMsg,但是CustomMsg格式的点云在rviz里面无法显示。
#如果需要在rviz显示点云,可以选择012.
 
#编译
cd ~/mid360_ws
catkin_make

到编译这一步到一定会报错,说livox_ros_driver找不到,如上上图所示,所以我们开始改文件,将livox_laser_simulation的src,include,以及Cmakelists.txt等的driver都改成driver2,反正说哪个路径不对就改哪个路径的文件,直到工作空间编译通过。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以及会提示livox_laser_simulation和livox_ros_driver2包在生成同一个消息包。这个报错需要去/home/skbt/mid360_ws/src/livox_laser_simulation/package.xml修改这个xml文件中的这一部分:

<build_depend>livox_ros_driver</build_depend>

改为:

<build_depend>livox_ros_driver2</build_depend>

即可编译成功。
编译成功之后就会在/home/skbt/mid360_ws/devel/lib目录下面生成我们需要的livox的仿真插件,在px4运行的时候会调用这个插件,但是需要我们把环境变量添加到.bashrc中,px4运行的时候才知道怎么找到这个插件。
打开你的.bashrc文件,添加:

source /home/skbt/mid360_ws/devel/setup.bash

此时再次运行

roslaunch px4 mavros_posix_sitl.launch

即可看到无人机上面有蓝色线,那个就是点云射线,此时查看rostopic也可以看到/scan,就是点云话题,在rviz中选择适当的坐标系,然后订阅Pointcloud2也可以看到点云。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐