系列文章目录
前言
本篇文章分为2个部分,第一部分主要搭建了机器人的仿真环境(ROS2 MuJoCo等),运行了机械臂及移动机器人相关示例程序;第二部分运行了OrangePi AIpro系统自带的示例程序及昇腾社区官方的示例程序;最后总结使用体验
一、 开发板软硬件
1.1 硬件介绍及准备
这里我找了几块开发板,左边为树莓派4B及树莓派5B,中间为OrangePi AIpro,右上为华硕的Tinker Board,右下为英伟达的Jetson Nano。
1.1.1 硬件介绍
官方的宣传页如下:
Orange Pi AIpro Orange Pi官网-香橙派(Orange Pi)开发板,开源硬件,开源软件,开源芯片,电脑键盘
从宣传页可知,OrangePi AIpro主要强调了的人工智能性能及应用,详细信息可在上述链接内查看。官方介绍OrangePi AIpro可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。
我这里主要应用于机器人仿真,即智能小车,机械臂,四足机器人、人形机器人、无人机等领域。后面结合官方及昇腾社区的示例运行相关人工智能的应用。
1.1.2 开发板对比
这里我主要对比OrangePi AIpro、Jetson Nano及Raspberrypi 5B,三块开发板的硬件参数如下所示:
OrangePi AIpro | Jetson Nano | Raspberrypi 5B | |
CPU | 4核64位处理器+ AI处理器 | Quad-core ARM® Cortex®-A57 MPCore processor | 2.4GHz 四核 64 位 Arm Cortex-A76 CPU |
GPU | 集成图形处理器 | 128-core NVIDIA Maxwell™ architecture GPU | VideoCore VII GPU,支持 OpenGL ES 3.1 和 Vulkan 1.2 |
AI算力 | 8TOPS算力 | 0.472TOPS算力 | |
内存 | LPDDR4X:8GB/16GB(可选),速率:3200Mbps | 4GB 64-bit LPDDR4 25.6GB/s | LPDDR4X:4GB/8GB(可选) |
存储 | • SPI FLASH:32MB • SATA/NVME SSD(M.2接口2280) • eMMC插槽:32GB/64GB/128GB/256GB(可选),eMMC5.1 HS400 • TF插槽 | 16GB eMMC 5.1 | 高速 microSD 卡接口,支持 SDR104 模式 用于快速外设的 PCIe 2.0 x1 接口 |
WIFI+蓝牙 | Wi-Fi 5双频2.4G和5G BT4.2/BLE | 1x GbE | 双频 802.11ac Wi-Fi® 蓝牙 5.0 / 低功耗蓝牙 (BLE) |
以太网收发器 | 10/100/1000Mbps以太网 | 1000Mbps以太网 | 千兆以太网,支持 PoE+ |
显示 | • 2xHDMI2.0 Type-A TX 4K@60FPS • 1x2 lane MIPI DSI via FPC connector | 2 multi-mode DP 1.2/eDP 1.4/HDMI 2.0 1 x2 DSI (1.5Gbps/lane) | 双 4Kp60 HDMI® 显示输出 |
摄像头 | 2x2-lane MIPI CSI camera interface,兼容树莓派摄像头 | Up to 4 cameras 12 lanes MIPI CSI-2 D-PHY 1.1 (up to 18 Gbps) | 2 × 4 通道 MIPI 摄像头/显示器收发器 |
USB | • USB 3.0 HOST x2 • USB Type-C 3.0 HOST x1 • Micro USB x1 串口打印功能 | 1x USB 3.0 (5 Gbps) 3x USB 2.0 | 2 × USB 3.0 端口,支持 5Gbps 同步运行 2 × USB 2.0 端口 |
音频 | 3.5mm耳机孔音频输入/输出 | ||
按键 | 1x关机键、1xRESET键、2x启动方式拨动键、1x烧录按键 | 电源按钮 | |
40PIN | 40PIN 功能扩展接口,支持以下接口类型: GPIO、UART、I2C、SPI、 I2S、PWM | 3x UART, 2x SPI, 2x I2S, 4x I2C, GPIOs | Raspberry Pi 标准 40 引脚 GPIO 接头 |
风扇 | 风扇接口x1 | 风扇接口x1 | 风扇接口x1 |
预留接口 | 2PIN电池接口 | ||
电源 | Type-C PD 20V IN ,标准65W | 5W - 10W | 27W USB-C 电源 |
支持的操作系统 | Ubuntu、openEuler | Ubuntu(Jetpack) | Ubuntu 等 |
产品尺寸 | 107*68mm | 69.6mm x 45mm 260-pin SO-DIMM connector | 85*56mm |
重量 | 82g | 140g | 50g |
上述对比表可知,OrangePi AIpro的AI算力确实强大,并且其他参数与Jetson Nano、树莓派5B等不相上下,为高性价比产品。
1.1.3 硬件准备
之前我使用过jetson nano以及树莓派5B,所以深知TF卡对于控制板整体性能的影响。因此按照官方的提示买了500G的三星固态硬盘(价格为450元左右)及硬盘盒(价格为90元左右),如图,将固态硬盘固定在OrangePi AIpro上。
此外,为方便携带,在官方买了金属外壳(价格100元左右),如图所示参考官方说明文档将OrangePi AIpro安装在金属外壳内。
连接电源线,显示屏线,键盘及鼠标线即可。
实际运行过程中发现OrangePi AIpro发热较为严重,因此买了额外的风扇散热,整体散热效果良好。
测试发现CSI摄像头没有反应,使用不了,官方文档说明是Linux系统未适配驱动,我这儿有一个奥比中光的深度相机,暂时用来采集数据,硬件连接如图所示。
1.2 软件介绍及准备
首先需要将系统通过TF卡烧录至SSD中,然后按照官方文档说明将拨码开关拨至对应位置即可。系统启动界面如图所示:
官方的镜像xfce桌面的bash没有补全功能,需要安装命令行补全功能包:
sudo apt install bash-completion
xfce桌面为轻量级桌面,占用资源少,但是外观并不好看,因此我切换桌面系统至 Ubuntu 原始桌面,选择gdm桌面即可:
效果如下:
注意:切换后桌面会有卡顿,不要安装 ubuntu-desktop ,否则不能启动桌面,盲猜与显卡有关。
更改密码,系统自带的密码过于繁琐,我们可以使用sudo passwd命令更改密码,我将密码更改为q,特别方便运行命令。
系统自带了Python 包管理器Anaconda,查看Python版本,结果如下:
1.2.1 换源
1.2.1.1 更换 Ubuntu Ports 源
华为云之前没有用过,不知道速度如何,换为中科大(ustc)镜像源,参考官网步骤如下:
使用 vim 打开 /etc/apt/sources.list 文件删除内容,可使用 dd 命令,然后粘贴如下内容:
# 默认注释了源码仓库,如有需要可自行取消注释
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
随后更新源并且更新可更新的软件包。
1.2.1.2 更换pip源
升级 pip 到最新的版本 (>=10.0.0) 后进行配置:
# 使用本镜像站来升级 pip
pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple pip -U
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
1.2.1.3 更换conda源
按照清华源说明,执行命令:
conda config --set show_channel_urls yes
用户目录下产生.condarc文件,将以下内容覆盖原内容:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
1.2.1.4 更换ROS2 源
导入 key:
sudo apt install curl gnupg2
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
将软件源添加至系统:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
刷新软件源缓存 sudo apt update,安装所需的 ROS2 发行版。
1.2.2 安装必备软件
1.2.2.1 安装QQ
至QQ官网下载arm64安装包,使用dpkg安装即可
1.2.2.2 安装 腾讯文档
同理至官网下载arm64安装包
1.2.2.3 安装代码编辑器vscode
同理至官网下载arm64安装包。
1.2.2.4 安装ROS2
我这里安装ros-iron-desktop-full,安装完成后进行测试
1.2.2.5 安装动力学库及仿真器
动力学库及仿真器通过conda安装,命令如下:
conda install crocoddyl pinocchio mujoco -c conda-forge
1.3 测试相机
使用Ubuntu自带的cheese测试相机使用是否正常,测试结果如图所示。
二、 机器人仿真开发
2.1基于 ROS 平台的机器人仿真
基于ROS的仿真我这里主要进行ROS2 MoveIt机械臂仿真及turtlebot相关运动机器人导航仿真。
2.1.1 机械臂仿真
2.1.1.1 MoveIt介绍
MoveIt是ROS社区下开源的机械臂运行规划库,主要可完成机械臂运动规划、碰撞检测,功能包内还集成了几种开源的运动规划库,可以用来开发机械臂,或者控制现有的机械臂,在机器人领域应用十分广泛。其功能框架如图所示。
2.1.1.2 机械臂仿真环境搭建
按照MoveIt官网教程安装相应的库并编译,步骤如下所示:
创建 Colcon 工作区并下载教程
要获取教程,您需要设置一个 Colcon 工作区。
mkdir -p ~/ws_moveit/src
下载 MoveIt 源代码及教程
移动到 Colcon 工作区,提取 MoveIt 教程源代码:
cd ~/ws_moveit/src
git clone https://github.com/ros-planning/moveit2_tutorials
接下来,我们将下载 MoveIt 其他部分的源代码:
vcs import < moveit2_tutorials/moveit2_tutorials.repos
导入命令可能会要求输入 GitHub 认证信息。你可以直接按 Enter 直到它继续(忽略 "Authentication failed"(验证失败)错误)。
构建 Colcon 工作区
以下步骤将从 Debian 安装工作区中尚未安装的任何依赖包。这一步将安装 MoveIt 及其所有依赖包:
sudo apt update && rosdep install -r --from-paths . --ignore-src --rosdistro $ROS_DISTRO -y
下一条命令将配置 Colcon 工作区:
cd ~/ws_moveit
colcon build --mixin release
这个构建命令可能需要很长时间(20 多分钟),这取决于你的电脑速度和可用内存量(我们建议 32 GB)。
实际在OrangePi AIpro编译需要数小时,中间需要解决一些依赖问题。
2.1.1.3 示例程序运行
参考MoveIt官网搭建运行环境,下载并编译相关功能包,运行程序即可运行机械臂轨迹规划功能包:
ros2 launch moveit2_tutorials demo.launch.py
因为启动了RVIZ及其GUI界面,所以运行稍微有些卡顿,若不启动GUI界面,实际作为机械臂控制器使用时完全没有问题。
我们还可以打开ROS生态下的Gazebo,运行示例程序,如图所示为机械臂工作台示例。我们可以通过GUI界面操作机械臂的各个关节运行,后续有科研或者工业需要可以与其他开源ROS功能包一起使用完成相关功能。
2.1.2 移动机器人仿真
2.1.2.1 Turtlebot4 机器人仿真
Turtlebot4是开源的ROS2机器人,clearpath公司开发的面向教育的机器人产品,自身携带丰富的传感器,配套的开源软件也很丰富,唯一的缺点就是很贵(10000元+),但是我们可以安装仿真器,在仿真器中体验使用Turtlebot4。官方做的仿真场景是在工厂中,机器人通过自身携带的思岚激光雷达进行二维建图及导航,我们可以使用虚拟手柄操作机器人运行。
按照官方说明文档安装仿真器,步骤如下:
ros2 launch turtlebot4_ignition_bringup turtlebot4_ignition.launch.py slam:=true nav2:=true rviz:=true
命令行运行仿真程序效果如下:
通过GUI 界面操作机器人,RVIZ界面则显示二维激光雷达所建地图。
使用rqt_graph查看节点图:
2.2基于开源动力学库及开源仿真器MuJoCo平台的机器人仿真
按照官网的说明安装好开源的动力学库及MuJoCo
2.2.1 MuJoCo 人形机器人LQR控制程序
这里运行了官方提供的示例程序,主要功能是控制人形机器人单脚站立,使用线性二次型规划控制。运行效果如图所示。
程序主要包括加载机器人模型并渲染展示,建立机器人动力学模型,并在指定位置线性化及离散化,设计LQR控制器,最后施加干扰并渲染完成控制。
2.2.2 使用开源动力学库
这里使用开源的动力学库pinocchio,运行官方示例程序加载机器人,效果如图所示:
主要加载了几种不同种类的机器人,如人形机器人,移动机械臂,四足机器人,无人机。
三、 人工智能应用开发
3.1 官方示例
3.1.1 YOLO5s示例适合部署在边缘设备上
按照官方说明运行Yolo5s示例程序,图像来源使用奥比中光采集的图像,运行效果如图所示,可以看出算法检测出泰迪熊及时钟并给出了相应的置信度。
3.1.2 OCR识别
同样按照示例程序进行,我这里的图片是从昇腾社区官网截取,结果如图所示,能够识别出字符。
系统内还有丰富的示例可以运行,我这里不做演示。
3.2 昇腾社区示例
3.2.1 生成式扩散模型示例
官方说明系统内自带MindSpore开发工具链,至官网下载如下示例程序测试AI性能:
这里测试的是扩散模型,隶属于生成式,示例十分丰富,感兴趣可以至官网下载相关示例程序运行测试。
四、 总结
4.1 使用总结
本文在OrangePi AIpro开发板上搭建了机器人开发环境(ROS及仿真器等),测试了机械臂运行规划及移动机器人建图示例,之后运行了系统内置的AI示例及昇腾社区Mindspore示例。
个人认为OrangePi AIpro的算力及性价比在目前的嵌入式开发板中算相对较高的,环境搭建相对来讲也并不复杂。特别是系统集成了华为的Mindspore工具链,适合在边缘 嵌入式设备中加速AI计算。
目前没有测试相关GPIO(如I2C,SPI等)接口,若OrangePi AIpro的GPIO接口的性能足够(比如传输速率等),个人觉得作为机器人主控完全足够,后续也可以在机器人基础上继续开发相应的AI功能。
4.2 调试总结
至此,本文已经结束了。硬件方面,在拿到开发板之前我买好了相应的硬件(包括外壳,SSD,烧录器,硬盘盒等);软件方面,在编译ROS MoveIt功能包源码时由于MoveIt本身复杂程度高,耗费了挺长的时间(大概几个小时)。由于时间有限,运行AI示例数量有限。大部分工作为晚上10点至凌晨3点之间完成。
如有错误,请指正!