1 搭建无人机仿真环境
首先需要安装mavros,这是一个飞机固件与ros通信的包:
sudo apt install ros-kinetic-mavros ros-kinetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod a+x ./install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh ##此时执行速度很慢,耐心等待完成
接下来,下载固件:
git clone https://github.com/PX4/Firmware.git ##我一般将固件放在主目录下而不是ros的工作空间中
cd Firmware
git checkout v1.9.2
make posix_sitl_default gazebo
一般来说,第一次安装飞控固件,编译时会报错,因为缺少了必要的python依赖,因此在下载玩Firmware后,在编译之前,首先:
cd Firmware
bash
bash ./Tools/setup/ubuntu.sh --no-nuttx --no-sim-tools ##此处跳过了仿真器的安装,因为已经在ros已经配置好了
这之后,再执行下面指令,一般就不会出错,如果继续报错,一般为个人电脑环境配置的问题,请根据终端中的错误提示自行安装依赖。
make posix_sitl_default gazebo
现在,px4无人机的基本环境就配置好了,应该可以看到gazebo界面中已经有了一个叫做iris的无人机。
为了方便,将Firmware的环境变量加入bashrc中:
source ~/Firmware/Tools/setup_gazebo.bash ~/Firmware/ ~/Firmware/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware/Tools/sitl_gazebo
在这之后,就可以通过launch文件启动仿真了:
roslaunch px4 mavros_posix_sitl.launch ##此命令同时启动了mavros
接下来,安装无人机的地面站控制软件QGC:
sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav -y
Download [QGroundControl.AppImage](https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage)
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage (or double click)
打开地面站后,可以看见已经自动连接上了仿真中的无人机。
在这里,无人机环境搭建已经全部完成了。
2 切换无人机模型
上面启动的无人机,并没有携带相机,我们进行目标检测,需要携带一个摄像头,Firmware中已经提供了模型,因此,我们只需要更换一个带有相机的飞机模型。
我提供了一个模型下载:
链接:https://pan.baidu.com/s/1D_3pG3bqmBsSxLOCZVhl3w
提取码:fnam
将下载的模型放到Firmware/tools/sitl_gazebo/models下,替换原来的模型文件。
然后修改Fimeware/launch/mavros_posix_sitl.launch的第16行:
<arg name=”sdf” default=”$(find mavlink_sitl_gazebo)/models/iris_stereo_camera/iris_stereo_camera.sdf”/>
此时,iris模型已经携带了一台双目相机,有用的话题为:
/stereo/camera/left/camera_info
/stereo/camera/left/image_raw
/stereo/camera/right/camera_info
/stereo/camera/right/image_raw
3 配置YOLO环境
该过程参开官方配置文档即可,基本没什么坑,yolo并不完全依赖gpu,但是没有gpu速度会非常慢。
官网提供的环境配置为:darkned_ros安装配置方法
按照官方文档安装必要的依赖和包是非常有必要的。
安装完成后,需要修改两处:
首先,在darknet_ros/launch/darknet_ros.launch中修改:
<arg name="image" default="/stereo/camera/left/image_raw" />
接着修改darknet_ros/config/ros.yaml:
camera_reading:
topic: /stereo/camera/left/image_raw
然后运行:
roslaunch darknet_ros darknet_ros.launch
此时在终端中可以看到:
说明yolo已经正常运行并且开始检测目标了。
接着,可以在gazebo中添加各种模型,然后使用yolo进行检测。
本文在这里提供一个gazebo的world文件,下载地址为:
XTDrone
下载后,复制 XTDrone /sitl_config /worlds/outdoor1.world到Firmware/tools/sitl_gazebo/worlds下。
接着修改Fimeware/launch/mavros_posix_sitl.launch的第15行为:
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/outdoor1.world"/>
此时再次启动,应该看到是这样的:
这样,就完成了所有的配置。
4 运行效果展示
关闭之前所有的命令,按照这个顺序重新启动仿真:
roslaunch px4 mavros_posix_sitl.launch
启动地面站 ##此处建议使用游戏手柄控制无人机,或更简单直接开启QGC自带的虚拟摇杆功能对飞机控制
roslaunch darknet_ros darknet_ros.launch
演示效果请看视频:
最后,如果你对无人机的仿真和应用感兴趣,推荐一个非常优秀的开源的无人机项目XTDrone,在里面可以学习到更多的无人机知识。
评论列表(34条)
请问我将gazebo打开后没有出现摄像头是什么原因?
大佬,您好!我想在同样的环境(PX4-ROS-Gazebo)下,在地面放置一个相机传感器观察飞行器,请问您有一些可行的建议么? 比如这个传感器模型的sdf文件是应该添加至.world文件中吗?如果添加至.world文件中,还能否发送topic?还是说添加在 飞行器模型的.sdf文件中,但是不将传感器和飞行器进行约束? 如果这么做了,是否还需要在launch文件中添加传感器一项? 希望大佬能提点建议!感谢!
博主,这种仿真类型的目标检测不需要装cuda cudnn吗?我看别的教程有的要装,数据量大?不知道为什么。
您好,想使用QGC控制无人机起飞,但总报错:
FCU: Takeoff denied! Please disarm and retry
FCU: Failsafe enabled: no RC
请问这该怎么修改阿?
您好,MAVROS与SITL通信为什么一直是false啊?
您好,想问一下,地面站怎么自动连接仿真中无人机啊?我的一直显示连接失败
您好,我的系统是18.04的,安装步骤操作这条命令后:roslaunch px4 mavros_posix_sitl.launch
总出现下面这个错,并且也打不开gazebo:
[Err] [REST.cc:205] Error in REST request
libcurl: (51) SSL: no alternative certificate subject name matches target host name ‘api.ignitionfuel.org’
VMware: vmw_ioctl_command error 无效的参数.
Aborted (core dumped)
[gazebo_gui-4] process has died [pid 2534, exit code 134, cmd /opt/ros/melodic/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home/ws/.ros/log/76b37004-f3f9-11ea-9b48-000c29df3869/gazebo_gui-4.log].
log file: /home/ws/.ros/log/76b37004-f3f9-11ea-9b48-000c29df3869/gazebo_gui-4*.log
请问这是怎么回事啊?
这条不用回复啦,已解决,感谢。
对了 请问我用make posix_sitl_default gazebo打开gazebo,QGC会自动连接飞机,但是我用roslaunch px4 mavros_posix_sitl.launch打开gazebo(能正常打开,也有飞机),但是QGC无反应。这是什么原因??
一般为环境配置不完整,你需要查看mavros是否安装完成,同时需要配置一下px4的python环境(官网中https://dev.px4.cc/master/zh/setup/dev_env_linux_ubuntu.html 运行.sh自动配置)
您好,MAVROS与SITL通信为什么一直是false啊?请问您知道怎么解决嘛?
请问您解决了嘛?我也是类似问题
替换了outdoor1.world世界模型之后导致gazebo打不开。使用原本的空场景,gazebo一切正常。这是什么原因??
还有百度云链接失效了,大佬能补一下吗
最近主机出问题了 过两天放新链接
博主你好,我替换了这个模型,也修改了对应的launch文件,但是打开gazebo是黑色的,而且也没有查到有话题出现。跟一楼出现的问题一样,希望博主能指点一下。
链接:https://pan.baidu.com/s/1D_3pG3bqmBsSxLOCZVhl3w
提取码:fnam
请问你解决了吗
我下载的是这个https://github.com/osrf/gazebo_models,然后解压至.gazebo/models,文件大小为1.9G,然后重新打开还是不行,卡在
您好,在第二点“切换无人机模型”中,将下载的模型放到Firmware/tools/sitl_gazebo/models下,替换原来的模型文件。这里的替换原来的模型指的是哪一个?我的Firmware/tools/sitl_gazebo/models文件夹中没有“iris_stereo_camera”这个文件夹,复制进来后,按照您给的方案,启动roslaunch, 没有无人机,也没有双目的话题
按照您的方式下载模型和修改,但是打不开,卡在了GAZEBO-Preparing your world。。。界面,请问是不是有什么文件没有复制?
下载后,复制 XTDrone /sitl_config /worlds/outdoor1.world到Firmware/tools/sitl_gazebo/worlds下。
接着修改Fimeware/launch/mavros_posix_sitl.launch的第15行为:
是否是第一次使用gazebo 有可能因为gazebo默认的模型需要下载 往往需要很久时间才能启动 一般来说都是先去官网把模型自己下载下来然后放到对应的位置 这样就能正常启动gazebo了
你好,请问飞机的模型你下载了吗???如果下载了可否发我一份。
您好,我开发的环境是Ubuntu16.04,按照您文章的步骤,打开QGC后,提示Waiting For Vehicle Connection。我QGC版本是3.5.6
请问下是怎么回事呢?
连不上的情况一般可能和px4的版本有关 1.9.2我测试过是没问题的 如不行 那就是安装问题
执行到 bash ./Tools/setup/ubuntu.sh –no-nuttx –no-sim-tools 的时候报错显示:
Collecting pip
Downloading pip-20.1.1-py2.py3-none-any.whl (1.5 MB)
|█████████ | 419 kB 2.4 kB/s eta 0:07:20ERROR: Exception:
Traceback (most recent call last):
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/cli/base_command.py”, line 188, in _main
status = self.run(options, args)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/cli/req_command.py”, line 185, in wrapper
return func(self, options, args)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/commands/install.py”, line 333, in run
reqs, check_supported_wheels=not options.target_dir
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/resolution/legacy/resolver.py”, line 179, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/resolution/legacy/resolver.py”, line 362, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/resolution/legacy/resolver.py”, line 314, in _get_abstract_dist_for
abstract_dist = self.preparer.prepare_linked_requirement(req)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/operations/prepare.py”, line 412, in prepare_linked_requirement
hashes=hashes,
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/operations/prepare.py”, line 198, in unpack_url
hashes=hashes,
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/operations/prepare.py”, line 124, in get_http_url
link, downloader, temp_dir.path, hashes
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/operations/prepare.py”, line 220, in _download_http_url
for chunk in download.chunks:
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/cli/progress_bars.py”, line 166, in iter
for x in it:
File “/home/yy/.local/lib/python2.7/site-packages/pip/_internal/network/utils.py”, line 39, in response_chunks
decode_content=False,
File “/home/yy/.local/lib/python2.7/site-packages/pip/_vendor/urllib3/response.py”, line 564, in stream
data = self.read(amt=amt, decode_content=decode_content)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_vendor/urllib3/response.py”, line 529, in read
raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
File “/usr/lib/python2.7/contextlib.py”, line 35, in __exit__
self.gen.throw(type, value, traceback)
File “/home/yy/.local/lib/python2.7/site-packages/pip/_vendor/urllib3/response.py”, line 430, in _error_catcher
raise ReadTimeoutError(self._pool, None, “Read timed out.”)
ReadTimeoutError: HTTPSConnectionPool(host=’files.pythonhosted.org’, port=443): Read timed out.
怎么解决?是源的问题吗?
bash ./Tools/setup/ubuntu.sh –no-nuttx –no-sim-tools
然后遇到里面提示某些python的依赖下不了 就手动pip2或pip3的方式单独下载
这一步今天执行没有问题 可能是网络原因 但又出现了新的问题 执行make posix_sitl_default gazebo编译时,就一直跑不动?就卡在这一步 — PX4 ECL: Very lightweight Estimation & Control Library v1.9.0-rc1 报错显示 error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
fatal: clone of ‘https://github.com/PX4/sitl_gazebo.git’ into submodule path ‘/home/yy/Firmware/Tools/sitl_gazebo’ failed
Failed to clone ‘Tools/sitl_gazebo’. Retry scheduled
可是github的网址 https://github.com/PX4/sitl_gazebo.git 能打开啊?
还有个问题 作者大大 你是在ubuntu16.04 还是18.04下搭建的?
我在ubuntu18.04 但是这个在16.04也是没有问题的 我都用过 我建议你按照官方网站的环境配置过程检查一下:dev.px4.cc
谢谢,昨天编译px4没问题了,现在试着往后面的步骤走
更改模型后 执行launch文件 gazebo反而打不开了?查看topic 也没有双目的话题发布 将sdf 文件中的model://stereo_cam 更改为model://stereo_camera 模型可以打开了 但依然没有双目的话题?请问这个怎么处理?
是我的模型吗 我提供的那个和官方的不一样 是修改后的
是的 按照文中描述 将百度云中的模型添加进去的