进入Aeronet:在虚拟环境中启动自主直升机


也许,如果需要的话,每个人现在都可以驾驶四轴飞行器。 但是为了解决自主控制的问题,因此您不需要移动遥控器的操纵杆并不断监控无人机-在这种情况下,该解决方案可能需要大量资源:购买,组装,焊接,配置,起飞,掉落以及掉落后-返回循环的开始。


在为我们的项目教授Aeronet的法官/教师时,我们面临着对机器人/计算机科学教师的无人驾驶汽车进行简化的“进入主题”编程的需求,他们已经具备了一组基本知识。


有一种简单的方法可以学习编程无人机飞行的基础知识-虚拟仿真环境,这是一个逐步使用示例,我们将在本文中考虑。


您无需购买任何东西即可升级基本的无人机编程技能,只需使用jMAVSim无人机模拟器项目PX4。 PX4是功能强大的开源软件套件,旨在用于在地面和空中飞行的各种无人驾驶车辆。 该项目软件的源代码位于Github上


最初,PX4作者建议将Linux Ubuntu LTS作为开发环境。 还提供Mac支持。 今年,在Cygwin中出现了Windows的模拟和开发环境,它可以简化在计算机科学课程中使用Windows的俄罗斯教育机构的生活。


接下来,我们将研究在Linux和Windows下安装,构建和运行模拟器的过程。


在Linux Ubuntu上安装和运行jMAVSim


PX4开发人员建议将Linux Ubuntu 16.04 LTS作为其标准系统。 Linux允许您为所有受支持的系统(基于NuttX,Qualcomm Snapdragon Flight,Linux,模拟环境,ROS的硬件平台)构建PX4软件包。


首先,将用户添加到拨出组:


sudo usermod -a -G dialout $USER 

让我们登录系统以使更改生效。


使用ubuntu_sim_nuttx.sh脚本自动安装Pixhawk / NuttX的开发工具链,包括jmavsim。 您需要将脚本下载到用户目录并使用以下命令运行它


 source ubuntu_sim_nuttx.sh 

脚本提出的所有问题都会得到肯定的回答。


在脚本末尾,重新启动计算机。


我们仍然需要下载控制飞行的控制器的源代码并进行构建。


我们使用github克隆PX4飞行控制器软件存储库:


 git clone https://github.com/PX4/Firmware.git 

在Firmware文件夹中,我们现在具有在飞行控制器(和模拟器)中执行的完整源代码。 将来,它对于研究目的和对其进行更改都将是有用的。 转到存储库的复制的Firmware文件夹:


 cd src/Firmware 

我们编译并运行模拟器:


 make px4_sitl jmavsim 

第一次编译过程需要一些时间。 成功完成后,PX4控制台将出现在屏幕上:


PX4控制台


通过在控制台中输入以下命令,可以将无人机发送至飞行状态:


 pxh> commander takeoff 

飞行中的无人机


降落无人机- commander land ,停止模拟-CTRL + C或命令shutdown


在Windows上安装并运行jMAVSim


PX4 Cygwin工具箱于2018年出现。 这是为Windows编译/开发PX4的最强大的方法。 要安装,请从GithubAmazon下载并运行安装文件。


默认情况下,工具链安装在C:\ PX4文件夹中。


在安装程序的最后一步,您可以选中“克隆PX4存储库,使用jMAVSim构建并运行仿真”框(克隆PX4存储库,编译并运行jMAVSim仿真器)。


使用安装目录中的run-console.bat文件(默认为C:\ PX4)在Cygwin中启动开发环境。


如果您在安装过程中忘记勾选jMAVSim启动框-在Cygwin中,您可以克隆存储库并使用以下命令运行模拟器:


 git clone --recursive -j8 https://github.com/PX4/Firmware.git cd Firmware make px4_sitl jmavsim 

编译后,PX4控制台和模拟器窗口将出现在屏幕上:


Windows的JMAVSim模拟器窗口


我尚未在Windows上显示天空和树木,而是将其显示为黑色背景,而是向模拟器的开发人员报告的


用于控制无人机的控制台命令是相同的:起飞- commander takeoff ,着陆- commander land ,停止模拟-CTRL + C或shutdown


使用QGroundControl地面站计划进行的航班


QGroundControl程序允许您在PX4或ArduPilot平台上完全配置无人机,以及通过GPS规划和执行自动户外飞行。


该程序代码是完全开放的,并且可以在Windows,OS X,Linux,iOS和Android平台上运行。 可以在程序网站的“下载”部分下载所需平台的安装文件。


对于Windows,请下载并运行此文件
安装和启动后,如果jMAVSim已经在我们的计算机上运行,​​则程序将自动连接到它。


您可以使用“起飞”按钮在飞行中发射无人机,然后降落-降落。 您还可以在GPS点上进行虚拟飞行:


QGroundControl


使用mavros编程自动飞行


可以使用mavlink协议控制jMAVSim虚拟无人机,该协议在几篇文章(例如1、2 )中都有介绍。 为了实现mavlink通信,我们将使用ROS(机器人操作系统)系统的mavros软件包。


PX4开发人员建议使用ROS Kinetic。


mavros软件包通过MAVLink协议在运行ROS的计算机(例如,具有Linux或Raspberry PI的虚拟机)与飞行控制器(真实或仿真器环境)之间提供通信。


完整安装ROS Kinetic时会同时安装mavros软件包和其他软件包。


通过roslaunch命令启动mavros软件包并与模拟器建立连接,指示运行模拟器的计算机的ip地址和端口:


 roslaunch mavros px4.launch fcu_url:="udp://@192.168.0.22:14557" 

如果模拟器未在运行jMAVSim的主机上运行,​​则在连接到mavros之前,需要使用jMAVSim控制台中的param set MAV_BROADCAST 1启用网络上的mavlink消息传递。 执行该命令时,将显示用于mavlink协议的主机IP地址。 可以在模拟器控制台中使用mavlink status命令找到该端口:


Mavlink状态


应使用以下命令检查是否成功连接到飞行控制器:


 rostopic echo /mavros/state 

如果连接成功,则控制台中将出现所谓的消息。 mavlink心跳,大约每秒一次:


mavlink心跳


如果未出现消息/未更新消息/已连接字段= False-未与飞行控制器建立通信,则应了解原因。


在撰写本文时,在Windows下,在param set MAV_BROADCAST 1命令之后,jMAVSim控制台中的消息开始出现在循环中:


 WARN [mavlink] getting required buffer size failed. 

为了使模拟器在Windows下正常工作,您应该在src / modules / mavlink / mavlink_main.cpp文件中添加第1029行:


 #if defined(__APPLE__) && defined(__MACH__) || defined(__CYGWIN__) 

然后使用make px4_sitl jmavsim命令重新编译/重新启动模拟器。


此问题已报告给开发人员 ,可能会在将来的版本中修复。


成功建立连接后,您可以使用ROS系统控制台的以下命令以自动飞行方式启动无人机:


  • 我们以OFFBOARD模式每秒发布5次无人机飞行的目标点。 为了使无人机不会“脱离” OFFBOARD自主飞行模式,有必要一直每秒发布几次目标点:

     rostopic pub -r 5 /mavros/setpoint_position/local geometry_msgs/PoseStamped "header: seq: 0 stamp: secs: 0 nsecs: 0 frame_id: '' pose: position: x: 0.0 y: 0.0 z: 5.0 orientation: x: 0.0 y: 0.0 z: 0.0 w: 0.0" 


  • 我们将无人机设置为OFFBOARD模式(在新的单独的终端会话中):

     rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'" 

  • 我们发送命令将无人机置于飞行模式(即“进给”):

     rosservice call /mavros/cmd/arming "value: true" 

执行最后一条命令后,虚拟无人机应起飞并悬停在5米的高度上:


飞行jmavsim


您还可以使用简单的Python代码启动无人机:


 import rospy from geometry_msgs.msg import PoseStamped from mavros_msgs.srv import CommandBool, SetMode rospy.init_node("offbrd",anonymous=True) rate=rospy.Rate(5) setpoint_pub=rospy.Publisher("/mavros/setpoint_position/local",PoseStamped,queue_size=10) arming_s=rospy.ServiceProxy("/mavros/cmd/arming",CommandBool) set_mode=rospy.ServiceProxy("/mavros/set_mode",SetMode) setpt=PoseStamped() setpt.pose.position.z=5 for i in range (0,10): setpoint_pub.publish(setpt) rate.sleep() set_mode(0,"OFFBOARD") arming_s(True) while (rospy.is_shutdown()==False): setpoint_pub.publish(setpt) rate.sleep() 

上面的代码使用与命令行调用示例相同的ROS服务进行调用。


您需要将代码复制到文本文件中,例如fly_jmavsim.py,然后使用python fly_jmavsim.py运行它。


在调试此示例的过程中,我遇到了jMAVSim模拟器的功能-它需要功能强大的处理器才能正常运行。 在Linux虚拟机上,他设法只计算了10 FPS,并在起飞后立即坠毁。 在我写文章时,在笔记本电脑上,他还定期失去控制权/当机。 笔记本电脑的功能有所帮助-因为 当使用电池供电时,会激活省电模式,这会低估处理器性能,从而直接影响模拟器。


根据给出的示例,希望的人可以自己开发自主飞行程序(以正方形,圆形,任意轨迹等)。 进行此类练习对于准备对真正的直升机上的自主任务进行编程非常有用。


祝您飞行顺利!


参考文献:


机器人操作系统(ROS)
自动驾驶仪PX4

Source: https://habr.com/ru/post/zh-CN434220/


All Articles