BeagleBone Blue¶
BeagleBone Blue (BBBlue) 是一款完整的、支持 Linux 的机器人计算机。它由社区支持并完全开源,具有实时性能、灵活的网络连接和丰富的机器人外设,可快速、经济地构建移动机器人。
备注
Copter-3.5 中增加了对 Copter 的支持。
授予 示意图 从 BBBlue repo 了解更多详情。
规格¶
处理器
1GHz ARM Cortex-A8
2×32 位 200-MHz 可编程实时单元 (PRU)
集成 512MB DDR3 内存
4GB 8 位 eMMC 闪存
传感器
用于加速计、陀螺仪和内部罗盘(I2C)的 MPU9250
BMP280 气压计
接口
无线网络(802.11bgn)
蓝牙 4.1 和 BLE
8 个电调/伺服输出(6 伏),4 个直流电机输出
USB 2.0 客户端和主机
11 个可编程 LED
2x 按钮
1.8V 模拟电压
SPI、I2C、UART
支持 2 芯锂电池,带平衡功能,9-18V 充电器输入
操作系统
Linux (Debian)
快速入门¶
用 linux 准备 BBBlue¶
从以下网址下载最新的 buster-console 映像 https://rcn-ee.net/rootfs/bb.org/testing/ (bone-debian-10.11-console-armhf-2021-12-01-1gb.img.xz 在本示例中使用)。
备注
如果该图片已不存在或过时,请转至 https://rcn-ee.net/rootfs/bb.org/testing/ 并查找包含有 ...控制台
文件夹,其中包含我们需要的所有内容,通常约为 150 MB。图片 ...-iot
也可以使用,但更大。基本上只需查找最小和最新的 骨...
图像,因为如果需要,您可以随时安装更多软件。
将图像闪存到 SD 卡上。
将 SD 卡插入 BBBlue,然后使用合适的 USB 电缆在 micro USB 总线上开机。
通过 SSH 连接 (ssh debian@192.168.7.2
在 Windows 和 ssh debian@192.168.6.2
在 Mac/Linux 上)。密码应为 temppwd
.它是在命令提示符下给出的。
使用 USB 共享网络连接将 BBBlue 连接到互联网(请参阅 "网络连接 "一章)。 将 BBBlue 连接到互联网).
在 BBBlue 上配置网关和名称服务器。
苏都 纳米 /等等/网络/界面
然后在 如果有 褊狭的 局域网 环回
如果有 usb0 局域网 天电
地址 192.168.7.2
净掩码 255.255.255.252
网络 192.168.7.0
网关 192.168.7.1
邮寄-向上 途径 增加 默认 gw 192.168.7.1
dns-名称服务器 192.168.7.1
接下来,配置主机(Linux 或 Windows):
Windows操作系统
新闻 CTRL + R >; 类型 ncpa.cpl 和 撞击 进入.
查找 您的 真正的 以太网 或 无线网络 适配器 和 对 单击 >; 属性
选择 的 选项卡 "共享"; >; 勾选 的 第一次 复选框 和 遴选 的 BBBlue 以太网 联系
新闻 好的
选择 的 BBBlue 以太网 联系 和 对 单击 >; 属性
双人 单击 互联网协议第 4 版 (TCP/IPv4)
设置 的 IP 地址 至 192.168.7.1
设置 DNS 服务器 至 8.8.8.8
新闻 好的
Linux
主机的命令提示符:
ifconfig
使用此输出结果找出与互联网连接的网络适配器,并将下面的 "wlan0 "替换为该适配器的名称:
苏都 sysctl 网.ipv4.ip_forward=1
苏都 iptables -t 肤色 -A 管道铺设 -o wlan0 -j 广场
苏都 iptables -A 前进 -m 接轨 --ctstate 相关,成立 -j 接受
苏都 iptables -A 前进 -i usb0 -o wlan0 -j 接受
重启 BBBlue,然后使用 SSH 重新连接
苏都 重新启动
无需用户输入 sudoer 密码:
回响 "debian ALL=(ALL) NOPASSWD: ALL"; | 苏都 发球 -a /等等/程序员.d/菜鸟 >/设计/无效
安装本地程序(很多程序会抱怨)并进行设置:
苏都 适切 -y 更新
苏都 适切 安装 -y 地点
苏都 dpkg-改组 地点
选择一个本地语言(例如 en_US.UTF-8 = English, United States, UTF8)。这可能需要一些时间。
苏都 适切 -y 地区-升级
苏都 适切 安装 -y git
苏都 适切-获取 安装 -y cpufrequtils
将 CPU 配置文件设置为 "性能":
苏都 欙腓 -i 's/GOVNOR="ondemand"/GOVNOR="performance"/g'; /等等/启动.d/cpufrequtils
设置 ArduPilot¶
以下说明介绍了如何设置 ArduPlane。其他载具类型的设置方法相同,只需替换 飞机
例如 旋翼飞行器
等(见 构建 ArduPilot).还可以在同一系统中设置多种载具类型。
创建一个空的服务文件,以便 ardupilot 在启动时自动启动并在后台运行:
苏都 纳米 /lib/systemd/系统/arduplane.服务
粘贴以下文本。并替换 目标 IP 地址>;
的 IP 地址:
[单位]
说明=ArduPlane 服务
之后=网络.服务
启动限制间隔秒=0
冲突=自动飞行器.服务 编程器.服务 天线追踪器.服务
[服务]
执行启动=/我们/箱柜/ardupilot/arduplane -C /设计/ttyO1 -A udp:<;目标 IP 地址>;:14550 -B /设计/ttyS2
重新启动=关于-失败
重启安全=1
[安装]
想要=多-用户.目标
苏都 mkdir -p /我们/箱柜/ardupilot
下载最新的 ArduPilot 二进制程序,用于 蓝
目标/FC 从 https://firmware.ardupilot.org/ (Plane/stable-4.1.6/blue/arduplane 在本例中使用)。将此文件复制到 /usr/bin/ardupilot/.
苏都 wget -O /我们/箱柜/ardupilot/arduplane https://固件.ardupilot.组织/固定翼飞行器/稳定-4.1.6/蓝/arduplane
此外,还有其他可能的来源,如 https://custom.ardupilot.org/ 编译服务器,也可以自己编译(见 从源代码交叉编译 ArduPilot).
备注
如果该图片已不存在或过时,请转至 https://firmware.ardupilot.org/ 并查找所需的载具类型。然后查找所需的固件,通常是最新的固件。 稳定
- 并在该文件夹中查找 蓝
.在该文件夹中,您可以找到一些文本文件和固件二进制文件/可执行文件。
苏都 chmod 0755 /我们/箱柜/ardupilot/a*
苏都 systemctl 以便 arduplane.服务
苏都 重新启动
现在,您的 BBBlue 可以连接到地面控制站(例如,......)。 Mission Planner地面站 或 QGroundControl )
建立连接时,选择 14550 端口的 UDP。
更多信息请参见 将 BBBlue 连接到地面站软件
附录¶
将 BBBlue 连接到互联网¶
通过无线网络¶
将 BBBlue 连接到可用的接入点--这并不能将 BBBlue 本身设置为接入点。
connmanctl 服务 | grep 'your_ssid'; | grep -Po 'wifi_[^ ]+';
猫 >/变异/lib/康曼/无线.配置
我们一行一行地编写文件:
[服务_<;输出-从-CONNMANCTL-命令>;]
类型 = 无线
安全 = wpa2
名称 = 您的用户名
密码 = 您的 WIFI 密码
CTRL + C,保存文件内容。确保在密码 = 后添加新行(按 Enter 键 *
苏都 重新启动
同样,通过前 IP 登录 BBBlue。
获取 BBBlue Wifi 接口的 IP:
ip 地址
通过 WIFI 登录 BBBlue。
从源代码交叉编译 ArduPilot¶
一般来说,您可以在 BBBlue 上编译 ArduPilot。但这需要大量时间(几个小时)和空间(您需要最大化/增大 SD 卡上的分区以适应),因此不推荐使用。
安装 Ubuntu 20.04 64 位作为构建机器(例如,可以是虚拟机或 github 操作)。
苏都 适切 更新
苏都 适切 安装 git
git 复制 --递归-子模块 https://github.网/ardupilot/ardupilot.git
CD ardupilot
使用稳定标签 ArduPlane 稳定版
或当前平面分支 平面-4.1
(目前两者都参照 Plane-4.1.6)--确保使用 稳定
版本
./工具/环境安装/安装-先决条件-乌托邦.吁
git 销售点 固定翼飞行器-4.1
./waf 配置 --官方=蓝
./waf 飞机
二进制文件位于 build/blue/bin/
.
内核配置¶
在本节中,我们将更新内核。内核有两种类型:实时内核和常规内核(默认)。在本指南中,我们将配置实时内核 v5.10 RT。请参考 elinux.org/Beagleboard 如果您希望使用不同的版本或类型。
更新本地脚本:
CD /选择/脚本 &&; git 拉绳
更新内核:
苏都 /选择/脚本/工具/更新内核.吁 --骨质-rt-内核 --lts-5_10
指定启动时使用的设备树二进制文件:
苏都 欙腓 -i 's/#dtb=/dtb=am335x-boneblue.dtb/g'; /后备箱/uEnv.文本
PRU 驱动程序¶
PRU(可编程实时单元)有两种可用的驱动程序:RProc 和 UIO。RProc 默认已启用。在本例中,我们使用 UIO 代替 RProc。 uboot_overlay_pru=
节。
打开 uEnv.txt 进行编辑:
苏都 纳米 /后备箱/uEnv.文本
设置 uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo
.
最后重启电路板,完成配置。
苏都 重新启动
测试是否已加载设备树 blob (DTB)
lsmod |grep uio
显示的内容应该是这样的
uio_pruss 4928 0
uio_pdrv_genirq 3539 0
uio 8822 2 uio_pruss,uio_pdrv_genirq
将 SD 卡闪存到 eMMC¶
您可以使用以下步骤将所有内容复制到 eMMC。这样,SD 卡就可以移除或用于其他用途。
苏都 纳米 /后备箱/uEnv.文本
取消对该行的注释 #cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
现在应该是
cmdline=启动=/选择/脚本/工具/eMMC/启动-eMMC-闪光器-v3.吁
保存文件并 苏都 重新启动
重新启动后,闪存过程将立即开始。 此过程可能需要 15 分钟(通常为 5 分钟)。等待直到所有闪烁的 LED 熄灭(只有电源 LED 亮起)。
完成后,关闭电源,然后取出 SD 卡。
再次通电,它就会像往常一样启动。
检查是否从 eMMC 或 SD 卡启动¶
苏都 适切-获取 安装 tiomapconf
从 eMMC 启动:
苏都 omapconf 阅读 0x44E10040
0040033C
从 microSD 启动(按下启动按钮):
苏都 omapconf 阅读 0x44E10040
00400338
将 BBBlue 连接到地面站软件¶
通过内置蓝牙¶
要将内置蓝牙连接用作 MAVLink,需要采取一些步骤。首先,我们需要一个 Python 脚本来提供 rfcomm 蓝牙服务。脚本还会创建一个虚拟串行端口(/dev/pts/0),我们稍后会将其指定为 ardupilot 遥测通道。虚拟串口收发的所有数据都将通过蓝牙重定向到我们的客户端程序或 ardupilot。
苏都 管道3 安装 pybluez
苏都 管道3 安装 串行
苏都 mkdir /我们/箱柜/蓝牙-串行
苏都 纳米 /我们/箱柜/蓝牙-串行/蓝牙-串行.py
粘贴以下脚本
import os, pty, serial, time from bluetooth import * import threading def receive(client, master): try: while True: received_data = os.read(master, 1024) client.send(received_data) except: print("cannot receive, connection closed") def send(client, master): try: while True: data = client.recv(1024) #128 written = os.write(master, data) except: print("cannot send, connection closed") def start_server_and_listen(master): service_uuid = "00001101-0000-1000-8000-00805F9B34FB" server = BluetoothSocket(RFCOMM) server.bind(("", PORT_ANY)) server.listen(1) port = server.getockname()[1] advertise_service(server, "BBBlue-MAVLink", service_id = service_uuid, service_classes = [servi$ client, client_info = server.accept() receive_thread = threading.Thread(target=receive, args=(client, master)) send_thread = threading.Thread(target=send, args=(client, master)) receive_thread.start() send_thread.start() receive_thread.join() send_thread.join()server.close() client.close() master, slave = pty.openpty() s_name = os.ttyname(slave) print(s_name) ser = serial.Serial(port=s_name, baudrate=57600, stopbits=serial.STOPBITS_TW)while 1: try: start_server_and_listen(master) except: print("Exception occured, restarting server...") client.close() server.close()
接下来,我们为该脚本创建一个 systemd 服务。
苏都 纳米 /lib/systemd/系统/蓝牙-串行.服务
然后粘贴以下文本。
[单位]
说明=蓝牙 串行 服务
之后=网络.服务
[服务]
类型=简单
重新启动=始终
执行启动=/我们/箱柜/python3 /我们/箱柜/蓝牙-串行/蓝牙-串行.py
[安装]
想要=多-用户.目标
现在我们必须调整之前创建的 ardupilot 服务。打开服务文件:
苏都 纳米 /lib/systemd/系统/arduplane.服务
必须在 ardupilot 之前启动 bluetooth-serial.service。我们可以将 After=[...] 替换为
之后=蓝牙-串行.服务
来实现这种行为。
接下来,让我们调整新创建的虚拟串行端口的通信通道:
执行启动=/我们/箱柜/ardupilot/arduplane -A /设计/配额/0
启用服务:
苏都 systemctl 以便 蓝牙-串行.服务
保存文件并重新启动。
苏都 重新启动
现在是时候将蓝牙设备连接到 BBBlue 了。在 Windows 上添加一个普通蓝牙设备,然后选择 "beaglebone"。
配对后,会出现一个新的虚拟 COM 端口。
现在,您可以将该 COM 端口用作地面控制软件(如 QGroundControl 或 Mission Planner)的连接端口。
如果由于某种原因有两个 COM 端口,只需测试这两个端口,直到找到正确的端口。
故障排除¶
RCOutputAioPRU.cpp:SIGBUS 错误生成¶
https://github.com/imfatant/test/issues/16#issuecomment-477725439
对我来说 苏都 dd if=/dev/zero of=/dev/mmcblk1 bs=1M count=10
这一招果然奏效。
小心:此 Github 评论中的 uboot_overlay_pru 版本已经过时。请使用上述说明作为参考。
检查系统配置¶
苏都 /选择/脚本/工具/版本.吁
"这款" 当前
配置应该是这样的(使用 diffchecker 或类似工具):
git:/选择/脚本/:[1583f354594aabfaff08dee2a4aabdfe61433024]
eeprom:[A335BNLTBLA21736EL001182]
模型:[TI_AM335x_BeagleBone_Blue]
狗牌:[BeagleBoard.组织 Debian 巴斯特 控制台 图片 2021-12-01]
引导程序:[microSD-(推动-按钮)]:[/设计/mmcblk0]:[U-靴子 SPL 2019.04-g923f8b8 (十月 26 2021 - 14:46:57 +0000)]:[地点: dd MBR]
引导程序:[microSD-(推动-按钮)]:[/设计/mmcblk0]:[U-靴子 2019.04-g923f8b8]:[地点: dd MBR]
引导程序:[eMMC-(默认)]:[/设计/mmcblk1]:[U-靴子 SPL 2019.04-g923f8b8 (十月 26 2021 - 14:46:57 +0000)]:[地点: dd MBR]
引导程序:[eMMC-(默认)]:[/设计/mmcblk1]:[U-靴子 2019.04-g923f8b8]:[地点: dd MBR]
UBOOT: 已启动 设备-树:[am335x-骨蓝.dts]
UBOOT: 已装载 覆盖层:[AM335X-PRU-RPROC-4-19-TI-00A0.内核]
UBOOT: 已装载 覆盖层:[BB-ADC-00A0.内核]
内核:[4.19.94-ti-r68]
装置-树-否决:[dtb=am335x-骨蓝.dtb]
/后备箱/uEnv.文本 设置:
uboot_overlay_options:[启用 _uboot_overlays=1]
uboot_overlay_options:[uboot_overlay_pru=AM335X-PRU-UIO-00A0.dtbo]
uboot_overlay_options:[启用 _uboot_cape_universal=1]
包 查看: 至 单独 升级 运行: [苏都 适切 安装 --只是-升级 <;包>;]
包:[bb-斗篷-覆盖层]:[4.14.20210821.0-0~小伙伴们+20210821]
包:[bb-定制]:[1.20211201.1-0~小伙伴们+20211201]
包:[bb-USB-小玩意]:[1.20211012.0-0~小伙伴们+20211012]
包:[bb-wl18xx-固件]:[1.20210922.2-0~小伙伴们+20211007]
包:[千米]:[26-1]
警告:包:[librobotcontrol]:[未安装]
包:[固件-ti-连通性]:[20190717-2rcnee1~小伙伴们+20200305]
组别:[菜鸟 : 菜鸟 敬佩 kmem 拨出 光盘 软盘 音频 浸渍 视频 plugdev 用户 systemd-期刊 输入 蓝牙 netdev gpio 管理 tisdk 威斯顿-启动 cloud9ide]
cmdline:[游戏机=ttyS0,115200n8 骨帽管理.uboot_capemgr_enabled=1 根基=/设计/mmcblk0p1 咆哮 根类型=ext4 根等待 协调池=1M 网.ifnames=0 lpj=1990656 rng_core.默认质量=100 安静]
dmesg | grep 远程
[ 26.835790] 远程编程 远程编程 0: wkup_m3 是 可用
[ 26.901553] 远程编程 远程编程 0: 供电 向上 wkup_m3
[ 26.901586] 远程编程 远程编程 0: 启动 fw 图像 am335x-下午-固件.小精灵, 尺寸 217148
[ 26.901840] 远程编程 远程编程 0: 远程 加工商 wkup_m3 是 现在 向上
[ 28.464026] 远程编程 远程roc1: 4a334000.pru 是 可用
[ 28.480195] 远程编程 远程程序2: 4a338000.pru 是 可用
dmesg | grep pru
[ 28.464026] 远程编程 远程roc1: 4a334000.pru 是 可用
[ 28.464212] pru-rproc 4a334000.pru: PRU rproc 网站 pru@4a334000 探查 顺利
[ 28.480195] 远程编程 远程程序2: 4a338000.pru 是 可用
[ 28.480412] pru-rproc 4a338000.pru: PRU rproc 网站 pru@4a338000 探查 顺利
dmesg | grep 括弧-单人
[ 0.975434] 括弧-单人 44e10800.引脚复用器: 142 引脚, 尺寸 568
dmesg | grep gpio-的-佣工
结束