环境安装

如果系统是ubuntu20.04,基于x86/amd64的架构,可以使用脚本一键安装:
具体链接参考:https://www.yuque.com/xtdrone/manual_cn/install_scripts#
● 此脚本将会一键安装ros noetic、px4 1.13固件、Gazebo 11、以及XTDrone仿真环境
● 为避免冲突,此脚本会将home目录下的catkin_ws 重命名为 catkin_ws_back,请自行处理重命名后的文件
● 本脚本只安装了python3的依赖,如果需要使用键盘控制无人机的功能,请自行安装python2的依赖。
需要注意的是:
自动安装后会生成三个文件夹:catkin_ws文件夹、PX4_Firmware文件夹、XTDrone文件夹。
设置环境变量。
(1)PX4_Firmware文件夹主要是调用gazebo打开仿真环境、加载sdf模型、发布相关传感器数据。示例指令:roslaunch px4 indoor1.launch。如果执行成功出现环境和无人机,说明环境配置成功(会配置错误会出现只有房子没有无人机的情况)。
(2)XTDrone文件夹主要是通信和键盘控制:
示例:
先启动通信脚本,solo代表子机型,0代表飞机的编号。

cd ~/XTDrone/communication
python multirotor_communication.py solo 0

再启动键盘控制脚本,solo代表子机型,1代表飞机的个数,vel代表速度控制

cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py solo 1 vel

简单介绍一下具体控制:
在控制终端页面输入“i”,用来设置垂直方向上的速度。
再输入“b”,
然后输入“t”,实现无人机解锁,就可以看到无人机旋翼旋转和起飞了。
其他:“s“表示悬停,“w和x”表示前进后退,“a和d”表示左右移动。
到这里,基本电脑环境,仿真环境、通信和控制没问题就可以继续研究了。

SLAM算法相关编译

这里需要用到刚才生成的catkin_ws文件夹了,这个ROS工程文件夹主要用来存放和编译ROS相关的功能包,可例如:VINS-FUSION、Fast-lio2以及fast-planner等定位和路径规划的功能包。当然,如果不是研究SLAM和路径规划的同学可以直接通过指令使用ROS里面集成好的SLAM算法,例如:HectorSLAM、Cartographer等算法包,sudo apt install ros-noetic-hector-slam*等。

以3D激光SLAM为例

(1)编译3D-SLAM代码
XTDrone文件夹下的~/XTDrone/sensing/slam/laser_slam/目录有A-LOAM文件。

cp -r ~/XTDrone/sensing/slam/laser_slam/A-LOAM ~/catkin_ws/src/
cp -r ~/XTDrone/sitl_config/gazebo_plugin/velodyne/* ~/catkin_ws/src/ #这里是3D激光雷达插件
cd ~/catkin_ws
catkin build #建议使用catkin build,也可以使用catkin_make

需要强调:catkin_ws空间一定要和环境变量中的名称对应(如果在其他工作空间中编译catkin_slam_px4_ws,需要在环境变量中设置source路径,source ~/WorkSpace/catkin_slam_px4_ws/devel/setup.bash),这是因为在编译A-LOAM中还编译了“velodyne_simulator”,如果环境变量没有设置,在后续启动3D激光雷达环境的时候,会无法发布3D激光雷达话题(使用rostopic list查看)。
(2)修改环境代码

<?xml version="1.0"?>
<launch>
    <!-- MAVROS posix SITL environment launch script -->
    <!-- launches Gazebo environment and 2x: MAVROS, PX4 SITL, and spawns vehicle -->
    <!-- vehicle model and world -->
    <arg name="est" default="ekf2"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/indoor1.world"/>
    <!-- gazebo configs -->
    <arg name="gui" default="true"/>
    <arg name="debug" default="false"/>
    <arg name="verbose" default="false"/>
    <arg name="paused" default="false"/>
    <!-- Gazebo sim -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="gui" value="$(arg gui)"/>
        <arg name="world_name" value="$(arg world)"/>
        <arg name="debug" value="$(arg debug)"/>
        <arg name="verbose" value="$(arg verbose)"/>
        <arg name="paused" value="$(arg paused)"/>
    </include>
     <!-- iris_0 -->
     <group ns="iris_0">
        <!-- MAVROS and vehicle configs -->
            <arg name="ID" value="0"/>
            <arg name="ID_in_group" value="0"/>
            <arg name="fcu_url" default="udp://:24540@localhost:34580"/>
        <!-- PX4 SITL and vehicle spawn -->
        <include file="$(find px4)/launch/single_vehicle_spawn_xtd.launch">
            <arg name="x" value="0"/>
            <arg name="y" value="7.5"/>
            <arg name="z" value="0.5"/>
            <arg name="R" value="0"/>
            <arg name="P" value="0"/>
            <arg name="Y" value="0"/>
            <arg name="vehicle" value="iris"/>
            <arg name="sdf" value="iris_3d_gpu_lidar"/>
            <arg name="mavlink_udp_port" value="18570"/>
            <arg name="mavlink_tcp_port" value="4560"/>
            <arg name="ID" value="$(arg ID)"/>
            <arg name="ID_in_group" value="$(arg ID_in_group)"/>
        </include>
        <!-- MAVROS -->
        <include file="$(find mavros)/launch/px4.launch">
            <arg name="fcu_url" value="$(arg fcu_url)"/>
            <arg name="gcs_url" value=""/>
            <arg name="tgt_system" value="$(eval 1 + arg('ID'))"/>
            <arg name="tgt_component" value="1"/>
        </include>
    </group>

</launch>
<!--the launch file is generated by XTDrone multi-vehicle generator.py  -->

(3)开始仿真
a、启动环境:

roslaunch px4 outdoor1.launch

b、启动SLAM:

roslaunch aloam_velodyne aloam_velodyne_HDL_32.launch

c、使用laser_transfer.py将ALOAM发布的位姿数据通过mavros发布

cd ~/XTDrone/sensing/slam/laser_slam/script
python laser_transfer.py iris 0 aloam

d、建立通信,键盘控制起飞即可

cd ~/XTDrone/communication
python multirotor_communication.py iris 0 

e、键盘控制起飞即可

cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel

需要注意:“iris”、“solo”等为无人机型号,在输入控制指令的时候,要与环境代码(indoor.launch之类的)中的无人机对应。
到此,三维激光SLAM仿真完成!

效果:
环境地图3DSLAM地图
后续会更新使用mid360运行fast-lio2的相关教程。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐