ardupilot+gazebo+mavros+QGC仿真

运行环境:ubuntu20.04

1.配置Ardupilot源码以及仿真环境

1.下载ardupilot源码

git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git submodule update --init --recursive

2.配置环境:

Tools/environment_install/install-prereqs-ubuntu.sh -y
. ~/.profile

3.检查:

cd ardupilot/ArduCopter
sim_vehicle.py --console --map

如果正常的话应该是这个页面:

2.配置QGC以及仿真

1.授予权限,安装依赖

sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libfuse2 -y
sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y

2.下载QGC

打开链接,下载: QGroundControl.AppImage.

3.安装/运行:

chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage  (or double click)

4.检查

先按照上面一样仿真,然后启动QGC,可以看见QGC自动连上了飞行器

这是因为仿真会自动打开127.0.0.1:14550输出口,和QGC默认的接口相同,所以不需要额外的配置就可以自动连接

3.配置ardupilot_gazebo以及仿真

1.下载ardupilot_gazebo并编译:

git clone <a href="https://github.com/khancyr/ardupilot_gazebo" target="_blank">https://github.com/khancyr/ardupilot_gazebo</a>
cd ardupilot_gazebo
mkdir build
cd build
cmake ..
make -j4
sudo make install

2.配置环境变量

echo 'source /usr/share/gazebo/setup.sh' >> ~/.bashrc
echo 'export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models' >> ~/.bashrc
echo 'export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}' >> ~/.bashrc
source ~/.bashrc

如果正确配置,那么在~/.bashrc文件中可以看到:

3. 先启动 gazebo 地图

gazebo --verbose worlds/iris_arducopter_runway.world

第一次打开地图可能会花费较长时间,这是正常现象,不必慌张

4.然后打开ArduPilot代码中的sitl模式

cd ~/ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map

这时用QGC控制无人机飞行也可以在gazebo中直观的看到飞行了

4.配置mavros以及仿真

1.安装mavros

教程很多,可以自行搜索,对于要二次开发的开发者,推荐通过源码安装

2.配置输出端口

首先我们需要在打开仿真的终端里增加一个输出端口:

output add 127.0.0.1:14551

然后打开mavros/launch/apm.launch文件,修改fcu_url参数

	<arg name="fcu_url" default="udp://:14551@127.0.0.1" />

3.检查

启动mavros

roslaunch mavros apm.launch

随便打印一个反映无人机状态的话题,观察是否有输出,例如:

rostopic echo mavros/imu/data

如果正常,那么整个仿真环境就搭建好了,用你想要的方式放飞你的无人机吧!

附加问题:

启动mavros警告:PositionTargetGlobal failed because no origin

出现警告的原因是mavros节点没有接收到“global_position/gp_origin”(事实上是/mavros/global_position/gp_origin)的话题来初始化原点。这导致is_map_init一直保持为false,触发了警告信息的打印。可以通过自己编写一个节点,手动发布自定义的原点位置信息。

1.创建发布原点信息的节点

在mavros的源码目录(mavros_ws/src/mavros/mavros/src/)下,创建一个名为pub_origin.cpp的文件,内容如下:

// pub_origin.cpp

#include <ros/ros.h>
#include <geographic_msgs/GeoPointStamped.h>

int main(int argc, char **argv)
{
    ros::init(argc, argv, "pub_origin");
    ros::NodeHandle nh("~");

    ros::Publisher gp_origin_pub = nh.advertise<geographic_msgs::GeoPointStamped>("/mavros/global_position/gp_origin", 10);

    ros::Rate rate(10.0);

    // Read parameters 
    double latitude, longitude, altitude;
    nh.param<double>("latitude", latitude, 0.0);
    nh.param<double>("longitude", longitude, 0.0);
    nh.param<double>("altitude", altitude, 0.0);

    geographic_msgs::GeoPointStamped gp_origin;
    gp_origin.header.stamp = ros::Time::now();
    gp_origin.header.frame_id = "map";
    gp_origin.position.latitude = latitude;
    gp_origin.position.longitude = longitude;
    gp_origin.position.altitude = altitude;

    while (ros::ok()) {
        gp_origin_pub.publish(gp_origin);
        ros::spinOnce();
        rate.sleep();
    }

    return 0;
}
2.修改launch文件

在mavros的launch目录下找到node.launch文件,加入以下内容

<node pkg="mavros" type="pub_origin_node" name="pub_origin" output="$(arg log_output)">
    <param name="latitude" value="0.0" />
    <param name="longitude" value="0.0" />
    <param name="altitude" value="0.0" />
</node>
3.修改CMakeLists.txt文件

在mavros的CMakeLists.txt文件中,加入以下内容:

add_executable(pub_origin_node src/pub_origin.cpp)
target_link_libraries(pub_origin_node mavros ${catkin_LIBRARIES})

4.重新编译工作空间即可解决问题

参考文献:

apm软件仿真+QGC地面站 环境搭建_qgc仿真连接-CSDN博客

https://zhuanlan.zhihu.com/p/146671667

【Gazebo无人机仿真】解决ROS+Gazebo+PX4中PositionTargetGlobal警告的方法_positiontargetglobal failed because no origin-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值