我们与来自哈勃(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/blueWindows 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
现在使用以下
命令重新加载BBBlue:
sudo reboot登录后,输入:sudo ifup wlan0。 绿色LED应该点亮。
如果希望BB具有静态IP(例如192.168.0.99),请更改“#WiFi w /板载设备(动态IP)。”部分/ etc / network / interface读取为:
更新和安装所有必要的支持程序:
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,该文件在可执行文件之前运行。
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
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:
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>
f)最后:
pulseaudio --start echo "connect <Bluetooth speaker's MAC address>" | bluetoothctl pactl list
仅此而已! 顺便说一句,如果您要使用语音合成器,我建议您使用Festival。
如果您想提供帮助-请在LAN或
VK ,
FB中给我写信。
habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpeg感谢您的阅读,询问和完全批评我们。