平台:ubuntu 20.04、ROS
概述
在ubuntu平台搭建多旋翼无人机可视化仿真环境,并使用自定义的六旋翼无人机模型,进行SITL仿真。
无人机:自定义六旋翼
固件:APM/PX4
搭建仿真环境
ros - noetic (18.04为melodic)Gazebo11
参考:添加链接描述
飞控: APM
参考:APM官网
git clone https://github.com/SwiftGust/ardupilot_gazebo
cd ardupilot_gazebo
mkdir build
cd build
cmake ..
make -j4
sudo make install
设置环境变量
source /usr/share/gazebo/setup.sh
export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models:${GAZEBO_MODEL_PATH}
export GAZEBO_MODEL_PATH=~/ardupilot_gazebo/models_gazebo:${GAZEBO_MODEL_PATH}
export GAZEBO_RESOURCE_PATH=~/ardupilot_gazebo/worlds:${GAZEBO_RESOURCE_PATH}
export GAZEBO_PLUGIN_PATH=~/ardupilot_gazebo/build:${GAZEBO_PLUGIN_PATH}
最后得到这两个文件夹
测试
1、gazebo --verbose iris_ardupilot.world
2、
cd ~/ardupilot/ArduCopter
../Tools/autotest/sim_vehicle.py -f gazebo-iris --console --map
可以正常打开则说明环境搭建成功。
模型
安装SolidWorks
自己画一个无人机,过程略过
安装SolidWorks的sw_urdf_exporter插件 下载地址
重点!!!
导出无人机模型得到一个文件夹
包括: config、launch、meshes、textures、urdf、CMakeLists.txt、export.log、package.xml
///
打包压缩到ubuntu系统下。
安装rotors 链接
参考 https://blog.csdn.net/qq_37680545/article/details/123213054
在src文件夹内创建uav_simulator包,将压缩包解压到文件夹里
cd 到根目录,catkin_make一下。
运行source bash后
roslaunch uav_gazebo gazebo.launch
可以看到模型
右键uav 选择Edit model
左上角file–>save as得到一个模型文件夹(包括sdf和config文件)
将文件夹复制到ardupilot_gazebo/models内
创建仿真世界
在world文件夹新建uav.world文件
将以下内容复制进去(最后一段 uri 可以根据自己的改)
<sdf version="1.6">
<world name="default">
<physics type="ode">
<ode>
<solver>
<type>quick</type>
<iters>100</iters>
<sor>1.0</sor>
</solver>
<constraints>
<cfm>0.0</cfm>
<erp>0.9</erp>
<contact_max_correcting_vel>0.1</contact_max_correcting_vel>
<contact_surface_layer>0.0</contact_surface_layer>
</constraints>
</ode>
<real_time_update_rate>250</real_time_update_rate>
<max_step_size>0.0025</max_step_size>
</physics>
<include>
<uri>model://sun</uri>
</include>
<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>5000 5000</size>
</plane>
</geometry>
<surface>
<friction>
<ode>
<mu>1</mu>
<mu2>1</mu2>
</ode>
</friction>
</surface>
</collision>
<visual name="runway">
<pose>000 0 0.005 0 0 -1.5707</pose>
<cast_shadows>false</cast_shadows>
<geometry>
<plane>
<normal>0 0 1</normal>
<size>1829 45</size>
</plane>
</geometry>
<material>
<script>
<uri>file://media/materials/scripts/gazebo.material</uri>
<name>Gazebo/Runway</name>
</script>
</material>
</visual>
<visual name="grass">
<pose>0 0 -0.1 0 0 0</pose>
<cast_shadows>false</cast_shadows>
<geometry>
<plane>
<normal>0 0 1</normal>
<size>5000 5000</size>
</plane>
</geometry>
<material>
<script>
<uri>file://media/materials/scripts/gazebo.material</uri>
<name>Gazebo/Grass</name>
</script>
</material>
</visual>
</link>
</model>
<model name="uav">
<pose> 0 0 0 0 0 0 </pose>
<include>
<uri>model://uav</uri>
<pose> 0 0 0 0 0 0 </pose>
</include>
</model>
</world>
</sdf>
终端输入
gazebo --verbose uav.world
可以看到
到这里模型就建立好了,只需要进行一些配置就可以开始仿真,后续过程有时间再更。