适用于初学者的ArduPilot。 在BeagleBone Blue上安装和配置

我们与来自哈勃(Habr)志趣相投的团队( 您可以加入 )一起开发了一种机器人,用于在练习场上收集高尔夫球 。 这是一个高度专业化的服务机器人,因此,我们计划同时开发一个软件和硬件复合体,以后可将其用作其他服务机器人和UGV的基础。



在上一篇文章中,我们描述了为什么我们停止使用该软件。 在设置项目时,我们使用了文章中信息 。 实际上,在这里,我们将提供此简要指南的翻译,也许对某人有用,它可以帮助您制造第一个或下一个机器人。

在开始之前,我想强调一点,值得使用BeagleBone Blue(它仍然是蓝色)。 通常,我们将连接很多与导航相关的外围设备,如果没有足够的功能,它们将无法正常工作。

第1部分。准备BeagleBone


转到https://rcn-ee.net/rootfs/bb.org/testing/并选择具有最新日期的目录。 然后打开stretch-console子目录。 在这里,您将看到几个文件。 下载名为“ bone-debian-VV-console-armhf-20YY-MM-DD-1gb.img.xz”的文件 。 这是仅包含必需品的最小Debian发行版。 另一种方法是IoT映像(IoT =物联网),它附带有其他软件,如果您不熟悉Linux,可以使工作更舒适。 可从同一站点获得。

我们使用: https : //rcn-ee.net/rootfs/bb.org/testing/2018-10-07/stretch-console/bone-debian-9.5-console-armhf-2018-10-07-1gb.img .xz

接下来,您将需要在microSD卡上刷新图像。 无论您使用Linux还是Windows,我都强烈建议您使用一个名为Etcher的程序来完成此任务( https://etcher.io/ )。

现在,您可以从microSD卡下载BeagleBone Blue。 这超出了本文档的范围,无法详细描述所有交互方法,但是通常可以通过微型USB电缆或SSH(连接到“ debian@192.168.7.2”,密码“ temppwd”)或通过COM-port(将Debian用户',密码'temppwd)插入minicom或PuTTY之类的程序中。 通过COM端口到Linux控制台的此连接。 BBB构建中的UART1始终绑定到控制台,首先绑定到U-boot,然后绑定到Linux。 可以在这里找到更多信息: https : //beagleboard.org/blue

Windows 10附带BeagleBone驱动程序。在Linux中,可能无法选择BBB作为通用USB COM端口。 如果您遇到问题,请尝试:

sudo -s cat >/etc/udev/rules.d/73-beaglebone.rules <<EOF ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_interface", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", DRIVER=="", RUN+="/sbin/modprobe -b ftdi_sio" ACTION=="add", SUBSYSTEM=="drivers", ENV{DEVPATH}=="/bus/usb-serial/drivers/ftdi_sio", ATTR{new_id}="0403 a6d0" ACTION=="add", KERNEL=="ttyUSB*", ATTRS{interface}=="BeagleBone", ATTRS{bInterfaceNumber}=="00", SYMLINK+="beaglebone-jtag" ACTION=="add", KERNEL=="ttyUSB*", ATTRS{interface}=="BeagleBone", ATTRS{bInterfaceNumber}=="01", SYMLINK+="beaglebone-serial" EOF udevadm control --reload-rules exit 

希望您现在已登录到命令行。 我们将从允许debian用户执行sudo开始,而不必每次(随后)输入密码:

 echo "debian ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/debian >/dev/null 

下一项工作是使用可负担的互联网连接来更新和安装软件,因此该设置connman进行Wi-Fi接入了。 我这样做是因为它将为将来的工作提供便利。 首先,记下路由器的SSID和WiFi密码。 然后输入以下内容:

  sudo -s connmanctl services | grep '<your SSID>' | grep -Po 'wifi_[^ ]+' 

答案将类似于以下内容:“ wifi_38d279e099a8_4254487562142d4355434b_managed_psk”。 如果您看不到任何内容,请重试-您可能输入了错字。

现在,使用此网络ID,我们将使用cat直接从键盘(stdin)输入文件,一次一行:

  cat >/var/lib/connman/wifi.config [service_<your hash>] Type = wifi Security = wpa2 Name = <your SSID> Passphrase = <your WiFi password> 

重要! 在按Ctrl + C之前,请确保按Enter,否则整个当前行将丢失。
按Ctrl-C退出,然后键入:exit

可见的绿色LED指示灯将点亮,表示Wi-Fi已开启。 BBBlue已连接到路由器,您的Wi-Fi网络上的IP地址可以使用以下方式找到:

 ip addr show wlan0 

如果由于某种原因您不能直接请求BBBlue,请使用其他实用程序,例如nmap(sudo nmap 192.168.0.0/24)或登录到路由器并以其他方式查找那里的IP地址。

现在,尝试使用SSH的Wi-Fi IP地址通过SSH连接。 请记住,192.168.7.2也可以使用。

如果无法使WiFi与connman一起使用,或者只是不想使用connman,则可以使用以下方法。 首先,键入:sudo systemctl disable connman。 然后,使用您的SSID和WiFi密码,编辑/ etc / network / interfaces

 # The loopback network interface. auto lo iface lo inet loopback # WiFi w/ onboard device (dynamic IP). auto wlan0 iface wlan0 inet dhcp wpa-ssid "<your SSID>" wpa-psk "<your WiFi password>" dns-nameservers 8.8.8.8 1.1.1.1 # Ethernet/RNDIS gadget (g_ether). # Used by: /opt/scripts/boot/autoconfigure_usb0.sh iface usb0 inet static address 192.168.7.2 netmask 255.255.255.252 network 192.168.7.0 gateway 192.168.7.1 

现在使用以下命令重新加载BBBlue: sudo reboot

登录后,输入:sudo ifup wlan0。 绿色LED应该点亮。

如果希望BB具有静态IP(例如192.168.0.99),请更改“#WiFi w /板载设备(动态IP)。”部分/ etc / network / interface读取为:

 # WiFi w/ onboard device (static IP). auto wlan0 iface wlan0 inet static wpa-ssid "<your SSID>" wpa-psk "<your WiFi password>" address 192.168.0.99 # <--- The desired static IP address of the BBBlue. netmask 255.255.255.0 gateway 192.168.0.1 # <--- The address of your router. dns-nameservers 8.8.8.8 1.1.1.1 

更新和安装所有必要的支持程序:

 sudo apt-get -y update sudo apt-get -y dist-upgrade sudo apt-get install -y cpufrequtils git 

更新脚本:cd / opt /脚本&&git pull

实时内核当前包含错误! 使用以下修复程序:指定Ti实时内核4_4。 不要使用4_14。

 sudo /opt/scripts/tools/update_kernel.sh --ti-rt-channel --lts-4_4 sudo sed -i 's|uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo|#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo|g' /boot/uEnv.txt sudo sed -i 's|#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo|uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo|g' /boot/uEnv.txt 

最后,将am335x-bone blue.dtb(从此存储库中的bin目录复制)复制到/boot/dtbs/4.4.113-ti-rt-r149

在自动运行时安装脚本

 sudo sed -i 's/#dtb=/dtb=am335x-boneblue.dtb/g' /boot/uEnv.txt 

设定频率

 sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils 

配置bb-wl18xx-wlan0.service

 sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service 

配置bb-wl18xx-wlan0.service

 sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service 

禁用蓝牙(可选)

 sudo systemctl disable bb-wl18xx-bluetooth.service 

扩展现有的microSD卡分区(/ dev / mmcblk0p1):

 sudo /opt/scripts/tools/grow_partition.sh 

立即重启:

 sudo reboot 

第2部分。在BeagleBone上安装ArduPilot


当BeagleBone重新启动时,我们需要创建一些文本文件。 首先,完善环境配置文件,/ etc / default / ardupilot:
(提示:输入sudoedit / etc / default / ardupilot并插入您自己的目标IP地址,例如192.168.0.13)

 TELEM1="-C /dev/ttyO1" TELEM2="-A udp:<target IP address>:14550" GPS="-B /dev/ttyS2" 

这是相当典型的配置。

这是启动参数-C为BBBlue中的UART1映射ArduPilot的“ Telem1”串行端口(SERIAL1,默认为57600)。 例如,我有一个868x RFDesign无线电连接到UART1。 这是我的无人机的双向数据通道。 它向基站发送各种遥测数据,并从基站接收RTK命令和差分校正。

这是启动参数-A映射ArduPilot的“控制台”串行端口(SERIAL0,默认为115200),协议,目标IP地址和可选端口号。 例如,这使我可以通过Wi-Fi接收MAVLink数据以进行测试。 真的很有用,特别是因为数据可以立即转到Mission Planner和QGroundControl。

图片

这是启动参数-B映射ArduPilot的“ GPS”串行端口(SERIAL3,默认为57600)与Uart2 BBBlue(UART,在板上本身标记为“ GPS”)。 例如,我有一个连接到UART2的U-blox NEO-M8P。

还有其他可能性-还有其他启动选项,具有预定义的端口速度和端口本身:

 Switch -A --> "Console", SERIAL0, default 115200 Switch -B --> "GPS", SERIAL3, default 57600 Switch -C --> "Telem1", SERIAL1, default 57600 Switch -D --> "Telem2", SERIAL2, default 38400 Switch -E --> Unnamed, SERIAL4, default 38400 Switch -F --> Unnamed, SERIAL5, default 57600 

有关各种串行端口的更多信息,请参见ArduPilot官方文档: http ://ardupilot.org/plane/docs/parameters.html?highlight=parameters

接下来,我们将创建ArduPilot systemd服务文件,其中一个用于ArduCopter,即/lib/systemd/system/arducopter.service:

 [Unit] Description=ArduCopter Service After=networking.service StartLimitIntervalSec=0 Conflicts=arduplane.service ardurover.service antennatracker.service [Service] EnvironmentFile=/etc/default/ardupilot ExecStartPre=/usr/bin/ardupilot/aphw ExecStart=/usr/bin/ardupilot/arducopter $TELEM1 $TELEM2 $GPS Restart=on-failure RestartSec=1 [Install] WantedBy=multi-user.target 

一个用于ArduPlane的/lib/systemd/system/arduplane.service:

 [Unit] Description=ArduPlane Service After=networking.service StartLimitIntervalSec=0 Conflicts=arducopter.service ardurover.service antennatracker.service [Service] EnvironmentFile=/etc/default/ardupilot ExecStartPre=/usr/bin/ardupilot/aphw ExecStart=/usr/bin/ardupilot/arduplane $TELEM1 $TELEM2 $GPS Restart=on-failure RestartSec=1 [Install] WantedBy=multi-user.target 

一个用于ArduRover的/lib/systemd/system/ardurover.service:

 [Unit] Description=ArduRover Service After=networking.service StartLimitIntervalSec=0 Conflicts=arducopter.service arduplane.service antennatracker.service [Service] EnvironmentFile=/etc/default/ardupilot ExecStartPre=/usr/bin/ardupilot/aphw ExecStart=/usr/bin/ardupilot/ardurover $TELEM1 $TELEM2 $GPS Restart=on-failure RestartSec=1 [Install] WantedBy=multi-user.target 

那AntennaTracker呢? 创建/lib/systemd/system/antennatracker.service:

 [Unit] Description=AntennaTracker Service After=networking.service StartLimitIntervalSec=0 Conflicts=arducopter.service arduplane.service ardurover.service [Service] EnvironmentFile=/etc/default/ardupilot ExecStartPre=/usr/bin/ardupilot/aphw ExecStart=/usr/bin/ardupilot/antennatracker $TELEM1 $TELEM2 $GPS Restart=on-failure RestartSec=1 [Install] WantedBy=multi-user.target 

我们去sudo文件夹mkdir -p / usr / bin / ardupilot

为ArduPilot创建一个铁配置文件,/ usr / bin / ardupilot / aphw,该文件在可执行文件之前运行。

 #!/bin/bash # aphw # ArduPilot hardware configuration. /bin/echo 80 >/sys/class/gpio/export /bin/echo out >/sys/class/gpio/gpio80/direction /bin/echo 1 >/sys/class/gpio/gpio80/value /bin/echo pruecapin_pu >/sys/devices/platform/ocp/ocp:P8_15_pinmux/state 

5-7行包括BBBlue + 5V伺服电源,即使用伺服器时。 ESC不需要。

第8行包括PRU。

使用sudo chmod 0755 / usr / bin / ardupilot / aphw设置此文件的权限。

差不多发生了! 现在,您应该获得专门为Arm BBBlue体系结构创建的最新ArduCopter,ArduPlane等可执行文件,并将它们放在/ usr / bin / ardupilot目录中。 Mirko Denecke将它们上传到他的网站上: http ://bbbmini.org/download/blue/

复制到此存储库: https : //github.com/imfatant/test/blob/master/bin/

不要忘记设置权限:sudo chmod 0755 / usr / bin / ardupilot / a *

如果您发现需要从源代码进行编译,请不要害怕-并不是那么困难。 此外,这意味着您可以创建自己的ArduPilot软件。

在BBBlue本身上收集它们将花费太多时间。 Patrick Poirier在他的网站上解释了BBBMINI(基于黑色BeagleBone)的过程。 这是特定于BBBlue的过程,假定您已经完成了所有步骤,并且位于/ home / debian目录中:

 sudo apt-get install g++ make pkg-config python python-dev python-lxml python-pip sudo pip install future git clone https://github.com/ArduPilot/ardupilot cd ardupilot git checkout Copter-3.6 # <-- For ArduCopter. git submodule update --init --recursive ./waf configure --board=blue # <-- BeagleBone Blue. ./waf sudo cp ./build/blue/bin/a* /usr/bin/ardupilot 

Patrick还提供了在Ubuntu中相对强大的x64台式PC上交叉编译它们的说明,这要快得多。

根据您需要的软件选项
sudo systemctl启用arducopter.service

sudo systemctl启用arduplane.service

sudo systemctl启用ardurover.service

sudo systemctl启用Antennatracker.service

重新启动后,您的ArduPilot应该会自动启动。 您将看到闪烁的红色LED!

您可以签出systemctl( https://www.freedesktop.org/software/systemd/man/systemctl.html )。 一些有用的示例命令:

 sudo systemctl disable ... sudo systemctl start ... sudo systemctl stop ... 

第3部分。连接外围设备


图片

基本的最低配置可能包括:

  • R / C接收器。
  • GPS接收器(带或不带集成指南针)。
  • 用于双向数据通道的无线电调制解调器,尤其是在长距离上。
  • (如果可用2.4 GHz,则内置WiFi BBBlue非常适合在近距离进行调试和测试,但对于更有趣的事情,建议使用专用的双向数据信道。也请记住使用所有这些元素的天线的类型和位置。 )

关于所需的连接器,电缆和工具的几句话。 我将提供一些建议,否则,如果您是初学者,则可以花费很多时间,精力和金钱。 最常用的连接器类型是JST-SH 1.0 mm。 您必须购买4位和6位尺寸和压接触点的多个母连接器。 然后获得几米不同颜色的电线。

因此,回到连接外围设备:



遥控接收器:可以在任何+ 5V触点和GND处关闭。 剩下的就是将接收器的SBUS输出,DSM输出或PPM输出连接到图中标记的两个SBUS引脚之一。 以下接收器已经过测试并且正在运行:

FrSky( https://www.frsky-rc.com/ ):R-XSR,XR4SB,X6R,X8R,R9 Slim和R9 Mini(欧盟LBT 868 MHz和通用915 MHz固件)。

Spektrum( https://www.spektrumrc.com/ ):带有PPM / SRXL / Remote Rx的AR7700 DSMX。

TBS( http://team-blacksheep.com/ ):带有Nano Rx的“完全”交火(Rx设置为SBUS模式)。

顺便说一下,他们谈论了很多有关“倒置SBUS”的问题。 实际上,SBUS只是Futaba发明并由FrSky复制的串行数据传输协议。 与“标准” UART相比,它是颠倒的。 幸运的是,Ardupilot Blue希望此SBUS信号反相,因此不需要信号反相器。

GPS接收器:大多数人都使用u-blox接收器,尤其是NEO-M8N和NEO-M8P。 NEO-M8N价格低廉,通常以磁盘形式从HobbyKing等中国公司获得。 方便地,它们包含接收器本身,一个非常小的陶瓷贴片天线,并且通常包括一个指南针。 尽管BBBlue已经具有内置指南针(AKM AK8963),但可以将ArduPilot配置为使用此“外部”指南针而不是其自身,以防止干扰。

NEO-M8P是NEO-M8N的(更)昂贵的替代方案。 该接收器支持一种称为“ RTK”或实时运动学的工作模式,可以实时实现几厘米的定位精度。 但是,这种演示的价格是NEO-M8N的10倍左右,而且没有基站。 在手册的后面,我将对M8P进行专门的说明。

I2C ArduPilot配置文件:/var/APM/{ArduCopter.stg,ArduPlane.stg,APMrover2.stg,AntennaTracker.stg}

 sudo apt-get install i2c-tools sudo i2cdetect -r -y 0 sudo i2cdetect -r -y 1 sudo i2cdetect -r -y 2 

 $ sudo i2cdetect -r -y 2 0 1 2 3 4 5 6 7 8 9 abcdef 00: -- -- -- -- -- -- -- -- -- 0c -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- 

68 = InvenSense MPU-9250 IMU(板载),0c = AKM AK8963指南针(板载),76 = Bosch BMP280气压计(板载)。

 $ sudo i2cdetect -r -y 1 0 1 2 3 4 5 6 7 8 9 abcdef 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- 

1e =霍尼韦尔HMC5843指南针(外部)-通常集成到基于u-blox NEO-M8N的GPS模块中。

地面控制站(GCS)软件入门


下载适用于Windows的任何任务计划程序(http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi)或适用于Linux和Windows的QGroundControl(http://qgroundcontrol.com/)。 这两个程序都将连接到通过网络(例如,通过UDP端口14550)或COM端口进入的MAVLink数据流。

选配


给基于无人机的bbblue配备蓝牙扬声器会很有趣,前提是蓝牙RF传输不会干扰任何其他系统。 BlueZ / PulseAudio / ALSA上有大量信息,但是幸运的是,它归结为非常简单的内容。

a)首先安装必要的软件(使用控制台或IoT映像):

  sudo apt-get install -y bluetooth pulseaudio pulseaudio-module-bluetooth alsa-utils 

b)启用蓝牙(如果禁用):sudo systemctl启用bb-wl18xx-bluetooth.service

c)编辑/etc/pulse/default.pa:
  ### Automatically suspend sinks/sources that become idle for too long # load-module module-suspend-on-idle 

d)重新启动:sudo重新启动

e)加载BBBlue之后,以连接模式打开Bluetooth列:

  bluetoothctl scan on agent on default-agent pair <Bluetooth speaker's MAC address> # <--- eg AB:58:EC:5C:0C:03 connect <Bluetooth speaker's MAC address> # <--- Sometimes unnecessary. trust <Bluetooth speaker's MAC address> scan off exit 

f)最后:

  pulseaudio --start echo "connect <Bluetooth speaker's MAC address>" | bluetoothctl pactl list # <--- Use this to check that your Bluetooth speaker has been picked up by PulseAudio. pacmd set-card-profile 0 a2dp_sink aplay /usr/share/sounds/alsa/Front_Center.wav 

仅此而已! 顺便说一句,如果您要使用语音合成器,我建议您使用Festival。

如果您想提供帮助-请在LAN或VKFB中给我写信。

图片 habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpeg

感谢您的阅读,询问和完全批评我们。

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


All Articles