介绍
此页为
让我们制作一个无人机操作系统
这是
的一页。
如果要查看整体,请返回上一页。
总览
在上一篇文章中,使用Dronekit-Python,
模拟中与无人机的通信和连接已完成。
接下来,尝试连接飞行控制器。
首先尝试USB,然后再进行遥测连接。
准备的事情
-
上次使用的Linux PC
(安装了dronekit的Raspberry Pi也可能) -
飞行控制器:Pixhawk系列
如果还连接了GPS和电源模块,则更好的
我也在APM 2.8上尝试过。
我还没有尝试过Pixhack 1 2或Pixhawk4 3,但我认为可以。
Navio和Navio2 4不是USB或串行连接,因此
Connection_strings将更改。
您现在要尝试荔枝 5吗?
-
固件:ArduPilot系列
可以使用直升飞机(Ardu Copter)或流动站(Ardu Rover)。
我认为PX4系列还可以,但是我还没有尝试过。 -
USB电缆:Micro USB电缆
通常使用什么设置Pixhawk都没有关系。 -
遥测设备:一种连接到Telem 1或2的设备
您可以使用通常使用的遥测设备。
示例:
Eames制造:无线遥测单元2.4GHz发射机/接收机套件
Https://store.shopping.yahoo.co.jp/elab-store/ld013.html
?DJI制造:Datalink 900 PRO
Https://www.dji.com/jp/datalink-pro/info
*请将波特率更改为115200bps。
?DIY:用XBee S2C等自己制作。
示例:XBee S2C(购买2个单位)
https://www.switch-science.com/catalog/list/786/
PC侧板:XBee USB适配器修订版2
Https://www.switch-science.com/catalog/3495/
无人机侧板:XBee 5V接口适配器
https://www.switch-science.com/catalog/1216/
?非法:可以从Amazon等购买的433MHz或915MHz遥测设备。
Https://www.amazon.co.jp/dp/B01A8E8XWO
*如果您购买的是国外制造的Pixhawk,则可能会随附,但是
该频率在日本是非法的,不应使用。
除了3DR制造的原始3DR广播之外,
复印产品无法连接?有很多麻烦,例如通信即将断开,所以
我很害怕,不想使用它。遥测被切断。 .. ..
提前准备
对于USB连接和遥测连接,请使用串行端口。
具体来说,在Linux中,它是一个叫做" / dev / tty nachara"的家伙。
示例:
?/ Dev / ttyACM0
通过USB连接APM或Pixhawk时,它将变为ACM。与Arduino相同。
?/ Dev / ttyUSB0
如果是FTDI或SiLabs的USB串行转换IC,则将是USB。遥测在这里。
用于连接调制解调器的串行端口,因此
访问权限归拨出组所有。 (您拨打)
假设当前登录到Ubuntu Linux的用户
让我们也参加daialout。它与
添加拨出访问权限
1 | $sudo usermod -a -G dialout ログインユーザ名 |
键入
您可以授予所有人读/写权限,但
如果拔下USB设备,它将恢复为其原始状态。
chmod只是一个临时措施。
添加拨出组更加容易。
这项工作与在Linux上开发Arduino时的工作相同。
尝试使用USB连接
在
中,就像使用Mission Planner或QGround Control一样,
让我们通过USB将其连接到PC进行尝试。
程式
这是在dronekit-sitl中使用的hello_jp.py稍作修改的程序。
使用USB时,这是115200bps的高速。
复制以下内容或
或者,右键单击此处,然后选择[另存为]。
hello_usb.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!usr/bin/env python # -*- coding: utf-8 -*- print( "dronekitスタート" ) # 開始メッセージ # 必要なライブラリをインポート from dronekit import connect # フライトコントローラやシミュレータへ接続するのがdronekit内にあるconnect import time # ウェイト関数time.sleepを使うために必要 # 接続文字列の作成 connection_string = "/dev/ttyACM0,115200" # USB接続だとttyACM、ボーレートは115.2k # フライトコントローラ(FC)へ接続 print( "FCへ接続: %s" % (connection_string) ) # 接続設定文字列を表示 vehicle = connect(connection_string, wait_ready=True) # 接続 #Ctrl+cが押されるまでループ try: while True: # vehicleオブジェクト内のステータスを表示 print("--------------------------" ) print(" GPS: %s" % vehicle.gps_0 ) # GPSがないとゼロのまま print(" Battery: %s" % vehicle.battery ) # パワーモジュールがないとゼロのまま print(" Last Heartbeat: %s" % vehicle.last_heartbeat ) print(" Is Armable?: %s" % vehicle.is_armable ) # ARM可能か? print(" System status: %s" % vehicle.system_status.state ) print(" Mode: %s" % vehicle.mode.name ) time.sleep(1) except( KeyboardInterrupt, SystemExit): # Ctrl+cが押されたら離脱 print( "SIGINTを検知" ) # フライトコントローラとの接続を閉じる vehicle.close() print("終了.") # 終了メッセージ |
程序执行
执行
文件。
1 | $python hello_usb.py |
执行结果
重复执行示例的结果,直到按Ctrl c按下以下显示为止。
执行结果
1 2 3 4 5 6 7 | -------------------------- GPS: GPSInfo:fix=1,num_sat=0 Battery: Battery:voltage=0.0,current=None,level=None Last Heartbeat: 0.674198211 Is Armable?: False System status: STANDBY Mode: STABILIZE |
如果未启用GPS或电源模块,则该数字将为零。
另外,如果各种校准(加速度和罗盘)未完成,
在需要GPS的飞行模式中,GPS Fix也是Armable的要求。
尝试使用遥测连接
接下来,从飞行控制器和断开USB电缆的连接。
让我们尝试使用遥测连接。
飞行控制器的电源应由电源模块提供。
如果要通过USB提供5V电压,请为手机使用移动电池。
显示信息(下行侧)
以前的USB连接是什么?
唯一的区别是,
右键单击此处,然后选择[另存为]。
通信速度取决于遥测设备的性能。基本上是57600bps。
*使用DJI Datalink 900 Pro时,请将其设置为115200bps。
用Mission Planner的完整参数列表/树重写。
hello_telem.py
1 2 3 4 5 6 | 省略 # 接続文字列の作成 connection_string = "/dev/ttyUSB0,57600" # テレメトリ接続だとttyUSB、ボーレートは57.6k 省略 |
执行。
1 | $python hello_telem.py |
我能够通过遥测连接到dronekit。
飞行模式更改(上行链路侧)
仅获取数据并不有趣,所以让我们做点新的事情。
通过键盘输入更改飞行模式 font>。
如何获取键盘输入
首先,如何在Python中进行键盘输入,
如果使用普通输入功能,程序将停止等待输入。
(阻止功能)
Arduino中的
我想要一个监视功能。
在下面的链接中有一个库可以做到这一点,所以
将其另存为
http://code.activestate.com/recipes/572182-how-to-implement-kbhit-on-linux/
如果将此
该功能将可用。
我也会放在这里。
让我们暂时检查一下操作。
1 | $python kbhit.py |
当您执行
时,一个句点将显示在屏幕上。
如果输入任何键(不允许使用Ctrl和Shift等功能键),则程序将结束。
省略和说明
kbhit.py的用法,以便满足以下三个条件。
(1)导入kbhit.py
1 | from kbhit import * |
(2)在程序的开头(导入后)写这两行
1 2 | atexit.register(set_normal_term) set_curses_term() |
(3)检查循环中是否有按键输入(与C语言编写相同)
1 2 | if kbhit(): # 何かキーが押されるのを待つ key = getch() # 1文字取得 |
如果您掌握
kbhit.py,则不仅是dronekit,而且是
使用python进行机器人编程的开发效率将得到提高。
例如,
?用于前进,后退和转弯之类的运动命令
?用于调整,例如参数更改
数据管理,例如保存和加载
可以考虑
等。
根据击键
更改飞行模式
现在,让我们使用kbhit.py与dronekit链接。
复制以下内容或
或者,右键单击此处,然后选择[另存为]。
change_mode.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #!usr/bin/env python # -*- coding: utf-8 -*- print( "dronekitスタート" ) # 開始メッセージ # 必要なライブラリをインポート from kbhit import * # kbhitを使うために必要(同じフォルダにkbhit.pyを置くこと) from dronekit import connect # connectを使いたいのでインポート from dronekit import VehicleMode # VehicleModeも使いたいのでインポート import time # ウェイト関数time.sleepを使うために必要 # kbhit()を使うための「おまじない」を最初に2つ書く atexit.register(set_normal_term) set_curses_term() # 接続文字列の作成 connection_string = "/dev/ttyUSB0,57600" # テレメトリ接続だとttyUSB、ボーレートは57.6k # フライトコントローラ(FC)へ接続 print( "FCへ接続: %s" % (connection_string) ) # 接続設定文字列を表示 vehicle = connect(connection_string, wait_ready=True) # 接続 #Ctrl+cが押されるまでループ try: while True: if kbhit(): # 何かキーが押されるのを待つ key = getch() # 1文字取得 # keyの中身に応じて分岐 if key=='s': # stabilize mode = 'STABILIZE' elif key=='a': # Alt Hold mode = 'ALT_HOLD' elif key=='p': # PosHold mode = 'POSHOLD' elif key=='l': # loiter mode = 'LOITER' elif key=='g': # guided mode = 'GUIDED' elif key=='t': # auto mode = 'AUTO' elif key=='r': # RTL mode = 'RTL' elif key=='d': # land mode = 'LAND' vehicle.mode = VehicleMode( mode ) # フライトモードの変更を指示 # ここはif文と同じインデントなので,キーに関係なく1秒に1回実行される # 現在のフライトモードを表示 print("--------------------------" ) print(" Mode: %s" % vehicle.mode.name ) time.sleep(1) except( KeyboardInterrupt, SystemExit): # Ctrl+cが押されたら離脱 print( "SIGINTを検知" ) # フライトコントローラとの接続を閉じる vehicle.close() print("終了.") # 終了メッセージ |
执行
文件。
1 | $python change_mode.py |
执行结果
您可以看到飞行模式已更改为与
键相对应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -------------------------- Mode: STABILIZE -------------------------- Mode: STABILIZE -------------------------- Mode: STABILIZE -------------------------- Mode: ALT_HOLD -------------------------- Mode: ALT_HOLD -------------------------- Mode: ALT_HOLD -------------------------- Mode: LOITER -------------------------- Mode: LOITER -------------------------- Mode: POSHOLD -------------------------- Mode: POSHOLD |
节目说明
取决于
我只是传递了飞行模式字符串。
编写飞行模式的字符串以根据程序进行切换。
使用" ALT_HOLD"容易出错。
它被称为AltHold,但始终必须使用'_'下划线。
(我不需要PosHold)
结论
这次,我使用dronekit向实际的飞行控制器发送了命令。
老实说,仅此一点一点都不有趣。
最有趣的是移动它。
下次,进行ARM /撤防,起飞和着陆,航路点移动等。
我想解释一下无人机的实际操作。
移动实际的机器有些危险,因此我将再次返回sitl。
CUAV页面https://store.cuav.net/index.php?
CUAV页面https://cuav.taobao.com/?
Holybro页面https://shop.holybro.com/pixhawk-4_p1089.html?
Emlid页面https://emlid.com/navio/?
无人机页面https://dronee.aero/pages/lychee?