【rotors】多旋翼無人機仿真(一)——搭建rotors仿真環(huán)境
【rotors】多旋翼無人機仿真(二)——設(shè)置飛行軌跡
【rotors】多旋翼無人機仿真(三)——SE3控制
【rotors】多旋翼無人機仿真(四)——參數(shù)補償和PID控制
【rotors】多旋翼無人機仿真(五)——多無人機仿真
本貼內(nèi)容參考兩位博主的內(nèi)容:
月照銀海似蛟
Reed Liao
1、前言
無人機仿真主要分為兩類:硬件在環(huán)仿真(HITL)和軟件在環(huán)仿真(SITL全稱Software in the loop)。
無人機軟件在環(huán)仿真是指完全用計算機來模擬出無人機飛行時的狀態(tài),而硬件在環(huán)仿真是指計算機連接飛控板來測試飛控軟件是否可以流暢運行。一般來說硬件在環(huán)仿真若沒有加上真實的轉(zhuǎn)臺進行測試的話,其與軟件在環(huán)仿真沒有很大的區(qū)別。
在無須解決在研發(fā)過程中的硬件問題帶來的麻煩,并且可以直觀的調(diào)試代碼,搭建一套無人機仿真系統(tǒng),對于研發(fā)來說好處是數(shù)不剩數(shù)的。
2、rotors介紹
RotorS 是ETH(蘇黎世聯(lián)邦理工大學)研究團隊開發(fā)的一個ROS包,GITHUB地址
提供了幾種多旋翼仿真模型,例如
- List item
- AscTec
- Hummingbird
- AscTec Pelican
- AscTec Firefly
但是仿真系統(tǒng)不限于使用這幾種模型
AscTec 是 德國Ascending Technologies公司的縮寫。
是很早的無人機了,實物張下面這個樣子:
仿真系統(tǒng)中包含很多種仿真?zhèn)鞲衅鳎伎梢园惭b在無人機上,例如:
- IMU
- 里程計
- 視覺慣導相機
功能包中包含了兩種控制器,后面會詳細介紹控制器的實現(xiàn)
3、rotors安裝
rotors官網(wǎng)提供的配置教程是Ubuntu 16.04 with ROS Kinetic、Ubuntu 14.04 with ROS Indigo , 這里我的配置是Ubuntu 18.04 with ROS melodic
安裝前已經(jīng)安裝好了ROS melodic和gazebo11(melodic默認安裝的是gazebo9,但9不太穩(wěn)定,升級為11了)
(1)安裝依賴安裝包
# 如果是其他ros版本就把melodic改為自己ros版本名字
sudo apt-get install ros-melodic-joy ros-melodic-octomap-ros python-wstool python-catkin-tools protobuf-compiler
sudo apt-get install libgeographic-dev ros-melodic-geographic-msgs
(2)創(chuàng)建文件夾并初始化工作空間
mkdir -p ~/UAV_rotors/src
cd ~/UAV_rotors/src
catkin_init_workspace
(3)git下載rotors源碼
cd ~/UAV_rotors/src
git clone git@github.com:ethz-asl/rotors_simulator.git
git clone git@github.com:ethz-asl/mav_comm.git
git clone git@github.com:ethz-asl/glog_catkin.git
git clone git@github.com:catkin/catkin_simple.git
注意這里git需要提前登錄github賬號并綁定自己電腦ssh,否則不能正常git,綁定方法參考這個
(4)編譯源碼
cd ~/UAV_rotors
catkin init # 只需運行一次,后續(xù)如果修改源碼重新編譯不需要再執(zhí)行
catkin build
# 在.bashrc文件中添加環(huán)境變量
source ~/UAV_rotors/devel/setup.bash
編譯一切正常會輸出如下結(jié)果:
但不出意外的話,大家或多或少會報一些錯誤,下面是我編譯過程中的遇到的錯誤(編譯過程中優(yōu)先解決編譯錯誤地方,編譯警告的先放著):
問題:
解決:
安裝編譯glog庫,安裝方法如下:
# 安裝gflags
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build && cd build
cmake .. -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC ..
make -j4
sudo make install
# 安裝glog
git clone https://github.com/google/glog
cd glog
mkdir build && cd build
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON ..
make -j4
sudo make install
如果編譯安裝過程中報錯說cmake版本太低需要升級版本,可參考這個
(5)運行rotors
rotors中有許多種機型,包括固定翼、多旋翼等,這里以四旋翼為例,進行仿真,在終端運行下面命令:
roslaunch rotors_gazebo mav_hovering_example.launch mav_name:=firefly world_name:=basic
執(zhí)行之后,gazebo會自動啟動,出現(xiàn)下面的畫面,則表示大功告成:
4、launch文件說明
在~/UAV_rotors/src/rotors_simulator/rotors_gazebo/launch
文件夾中有許多啟動程序的launch文件,使用較多的有兩個:mav_hovering_example.launch
和mav_hovering_example_with_vi_sensor.launch
,后者比前者多啟動了深度攝像頭傳感器。
我們來看看mav_hovering_example_with_vi_sensor.launch
:
<!-- 啟動無人機仿真,帶深度攝像頭傳感器 -->
<!-- 參數(shù): -->
<!-- mav_name:無人機類型,可以在rotors_description/urdf中查看型號-->
<!-- 六翼無人機:firefly、neo11、neo9-->
<!-- 四翼無人機:pelican、ardrone、asymmetric_quadrotor、hummingbird、iris-->
<!-- world_name:仿真環(huán)境,可選擇worlds文件夾下的文件-->
<launch>
<arg name="mav_name" default="firefly"/>
<arg name="world_name" default="basic"/>
<arg name="enable_logging" default="false" />
<arg name="enable_ground_truth" default="true" />
<arg name="log_file" default="$(arg mav_name)" />
<env name="GAZEBO_MODEL_PATH" value="${GAZEBO_MODEL_PATH}:$(find rotors_gazebo)/models"/>
<env name="GAZEBO_RESOURCE_PATH" value="${GAZEBO_RESOURCE_PATH}:$(find rotors_gazebo)/models"/>
<!-- 啟動gazebo -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find rotors_gazebo)/worlds/$(arg world_name).world" />
<!-- <arg name="debug" value="true"/> -->
<arg name="paused" value="true"/>
<!-- <arg name="gui" value="false"/> -->
<!-- <arg name="verbose" value="true"/> -->
</include>
<group ns="$(arg mav_name)">
<!-- 導入無人機模型 -->
<include file="$(find rotors_gazebo)/launch/spawn_mav.launch">
<arg name="mav_name" value="$(arg mav_name)" />
<arg name="model" value="$(find rotors_description)/urdf/mav_with_vi_sensor.gazebo" />
<arg name="enable_logging" value="$(arg enable_logging)" />
<arg name="enable_ground_truth" value="$(arg enable_ground_truth)" />
<arg name="log_file" value="$(arg log_file)"/>
</include>
<!-- 啟動無人機控制節(jié)點 -->
<node name="lee_position_controller_node" pkg="rotors_control" type="lee_position_controller_node" output="screen">
<rosparam command="load" file="$(find rotors_gazebo)/resource/lee_controller_$(arg mav_name).yaml" />
<rosparam command="load" file="$(find rotors_gazebo)/resource/$(arg mav_name).yaml" />
<remap from="odometry" to="odometry_sensor1/odometry" />
</node>
<!-- 啟動無人機軌跡控制命令節(jié)點 -->
<node name="hovering_example" pkg="rotors_gazebo" type="hovering_example" output="screen"/>
<!-- 啟動仿真關(guān)節(jié)節(jié)點 -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
</group>
</launch>
launch文件中有兩個比較重要的參數(shù):一個是mav_name 無人機型號,這個可以在rotors_description/urdf
文件夾下查看有那些無人機型號的建模文件;一個是world_name 仿真環(huán)境名字,這個可以在rotors_gazebo/worlds
文件夾中查看,需要注意的是如果選擇比較復雜的world_name 如 outdoor,仿真環(huán)境會加載gazebo官方的一些模型,如果你沒有提前下載好這些模型,會導致gazebo打不開,因為此時gazebo正在聯(lián)網(wǎng)下載這些模型,需要自己提前把官方的全部模型下載到gazebo中。文章來源:http://www.zghlxwxcb.cn/news/detail-796168.html
此外launch還加載了兩個節(jié)點程序:lee_position_controller_node 、 hovering_example,前者就是無人機的控制節(jié)點,后者是給無人機發(fā)送軌跡點節(jié)點 , 后面會解釋說明這兩個節(jié)點。文章來源地址http://www.zghlxwxcb.cn/news/detail-796168.html
到了這里,關(guān)于【rotors】多旋翼無人機仿真(一)——搭建rotors仿真環(huán)境的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!