赞
踩
最近收到了一块”香橙派AIpro“的开发板,这款开发板是香橙派联合华为精心打造的,他们的宣传sologen是:“为AI而生”。这引起了我的好奇心,想知道其是否可以胜任无人机的实时建图和航迹规划工作。通过实操博主成功实现了在ARM架构上使用香橙派AIpro和D435i深度相机进行SLAM建图以及在仿真环境中的无人机航迹规划。整体来说,这块板子的性价比很高,可以满足多旋翼无人机的航机规划和控制工作。
2023.12月初,香橙派联合华为发布了基于昇腾的Orange Pi AIpro开发板,提供8/20TOPS澎湃算力,能覆盖生态开发板者的主流应用场景,让用户实践各种创新场景,并为其提供配套的软硬件。而价格更是极为亲民,8TOPS、8GB内存的创客价/预售价仅为799元,8TOPS、16GB内存的创客价/预售价仅为999元。Orange Pi AIpro开发板采用昇腾AI技术路线,无论在外观上、性能上还是技术服务支持上都非常优秀,提供8/20TOPS澎湃算力,能覆盖生态开发板者的主流应用场景,让用户实践各种创新场景,并为其提供配套的软硬件。通信汪这里用的是8+32的配置。
OrangePi AIpro(8-12T)采用昇腾AI技术路线,具体为4核64位处理器+AI处理器,集成图形处理器,支持8-12TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。 Orange Pi AIpro引用了相当丰富的接口,包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB(串口打印调试功能)、两个MIPI摄像头、一个MIPI屏等,预留电池接口,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。 Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求。
香橙派是常见的HDMI接口,不用再买转接头类的额外线,但树莓派是Micro HDMI,这种线一般很少见,需要额外购买,为以防万一,在插拔HDMI接头或线缆之前,建议先将香橙派断电是最安全的。
SLAM(Simultaneous Localization and Mapping)技术,即同步定位与地图构建,是机器人领域中的一项重要技术。它通过实现在未知环境中对机器人自身的定位以及构建环境地图,解决了全自主移动机器人的核心问题。
SLAM技术的核心思想是:机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的环境特征定位自身位置和姿态,再根据自身位置构建周围环境的增量式地图,从而达到同时定位和地图构建的目的。通俗地说,SLAM技术就像是一个人的大脑,它帮助机器人在未知环境中感知自身的位置和姿态,同时构建周围环境的地图。
SLAM技术在许多领域都有广泛的应用,如无人驾驶、无人机、服务机器人等。例如,在无人驾驶领域,SLAM技术可以帮助车辆在行驶过程中实时感知自身的位置和姿态,同时构建高精度地图,实现安全、准确的自动驾驶。在服务机器人领域,SLAM技术可以帮助机器人完成导航、定位、避障等功能,提高机器人的智能化水平和服务能力。
随着人工智能技术的不断发展,SLAM技术也在不断进步和完善。目前,SLAM技术正朝着高精度、实时性、智能化方向发展。未来,SLAM技术有望与深度学习、计算机视觉等技术进一步融合,实现更加精准、高效的环境感知和地图构建。
本文将使用香橙派AIpro结合D435i深度相机进行SLAM建图应用。
香橙派镜像烧录工具下载地址:https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/OrangePi/balenaEtcher/balenaEtcher-Setup-1.18.4.exe
香橙派0318镜像下载地址:https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/OrangePi/20240318/opiaipro_ubuntu22.04_desktop_aarch64_20240318.img.xz
烧录完成后,把SD卡插入香橙派,上电,开机,成功点亮!
查了下AIPro的手册,Ubuntu的初始密码是:Mind@123
如上图成功进入Ubuntu22.04系统。
进入系统后开始安装ros系统,由于22.04默认安装ROS2,但很多仓库都是基于ROS1的,ROS1对Ubuntu的支持只到20.04,如果要在22.04上安装ROS1只能从源码编译安装我参考下面链接中的两个博客安装了ROS-noetic:
博客1. https://blog.csdn.net/Drknown/article/details/128701624
博客2. http:// https://zhuanlan.zhihu.com/p/418227536
自己按照博客一进行安装时也遇到了博文中的问题,我这里详细介绍一下解决方法:
问题一:rosconsole,报错如下:
- Errors << rosconsole:make /home/youliang/ros_ws/build/catkin_ws/logs/rosconsole/build.make.002.log
- /home/youliang/ros_ws/build/catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::initialize()’:
- /home/youliang/ros_ws/build/catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:169:23: error: cannot convert ‘ros::console::impl::ROSConsoleStdioAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
- 169 | logger->addAppender(new ROSConsoleStdioAppender);
- | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
- | |
- | ros::console::impl::ROSConsoleStdioAppender*
- In file included from /usr/include/log4cxx/spi/loggingevent.h:28,
- from /usr/include/log4cxx/layout.h:29,
- from /usr/include/log4cxx/appenderskeleton.h:28,
- from /home/youliang/ros_ws/build/catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:42:
- /usr/include/log4cxx/logger.h:144:60: note: initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’
- 144 | virtual void addAppender(const AppenderPtr newAppender);
- | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
- /home/youliang/ros_ws/build/catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void* ros::console::impl::getHandle(const string&)’:
- /home/youliang/ros_ws/build/catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:203:36: error: cannot convert ‘log4cxx::LoggerPtr’ {aka ‘std::shared_ptr<log4cxx::Logger>’} to ‘void*’ in return
- 203 | return log4cxx::Logger::getLogger(name);
- | ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
- | |
解决方法:
打开下面链接,首先切换到下图所示的concise_output_roso分支,切换成功后下载rosconsole的源码。
下载成功后,解压,并重命名为rosconsole。
然后再把解压重命名后的文件拷贝并替换到/ros_catkin_ws/src文件夹下重新编译就好了。
问题二:shared_mutex的问题
报错如下:
- make[2]: *** [CMakeFiles/tf.dir/build.make:118: CMakeFiles/tf.dir/src/transform_listener.cpp.o] Error 1
- In file included from /usr/include/log4cxx/log4cxx.h:45,
- from /usr/include/log4cxx/logstring.h:28,
- from /usr/include/log4cxx/level.h:22,
- from /opt/ros/noetic/include/ros/console.h:46,
- from /opt/ros/noetic/include/ros/ros.h:40,
- from /tmp/makepkg/ros-noetic-tf/src/geometry-1.13.2/tf/src/transform_broadcaster.cpp:34:
- /usr/include/log4cxx/boost-std-configuration.h:10:18: error: ‘shared_mutex’ in namespace ‘std’ does not name a type
- 10 | typedef std::shared_mutex shared_mutex;
- | ^~~~~~~~~~~~
- /usr/include/log4cxx/boost-std-configuration.h:10:13: note: ‘std::shared_mutex’ is only available from C++17 onwards
- 10 | typedef std::shared_mutex shared_mutex;
- | ^~~
- /usr/include/log4cxx/boost-std-configuration.h:12:30: error: ‘shared_lock’ in namespace ‘std’ does not name a template type
- 12 | using shared_lock = std::shared_lock<T>;
- | ^~~~~~~~~~~
- /usr/include/log4cxx/boost-std-configuration.h:12:25: note: ‘std::shared_lock’ is only available from C++14 onwards
- 12 | using shared_lock = std::shared_lock<T>;
- | ^~~
- In file included from /opt/ros/noetic/include/ros/console.h:46,
- from /opt/ros/noetic/include/ros/ros.h:40,
- from /tmp/makepkg/ros-noetic-tf/src/geometry-1.13.2/tf/src/transform_broadcaster.cpp:34:
- /usr/include/log4cxx/level.h:283:29: error: ‘mutex’ in namespace ‘std’ does not name a type
- 283 | static std::mutex initMutex;
- | ^~~~~
- /usr/include/log4cxx/level.h:25:1: note: ‘std::mutex’ is defined in header ‘<mutex>’; did you forget to ‘#include <mutex>’?
- 24 | #include <log4cxx/helpers/object.h>
- +++ |+#include <mutex>
- 25 |
解决方法:
首先在/usr/include/log4cxx/文件夹下右键打开终端,并使用su root命令切换到主用户,然后用VI编辑器对boost-std-configuration.h进行修改,将
- #define STD_SHARED_MUTEX_FOUND 1
- #define Boost_SHARED_MUTEX_FOUND 0
修改为:
- #define STD_SHARED_MUTEX_FOUND 0
- #define Boost_SHARED_MUTEX_FOUND 1
效果如下图所示,修改后重新编译即可
从编译源码来进行ROS1的安装过程比较麻烦,如果你在安装过程中遇到问题可在评论区留言。
编译过程时间为2.5h左右,编译完成后现象见下图:
- 打开三个终端,分别输入
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
香橙派AIpro其实可以理解为一个可以装系统的单片机,其是基于arm架构的,不同于我们电脑使用的x86或amd架构,在安装过程中会有一些区别。下面是具体安装过程。
开源网址:https://github.com/IntelRealSense
这里面有两个有用的项目:
- librealsense:realsense的依赖库
- realsense-ros:提供ros的扩展支持,比如launch文件就在这里
命令运行情况如下:
值得注意的是,你会发现官方只建议了在x86/amd架构下进行SDK安装,实际在香橙派AIpro上SDK安装librealsense确实存在一些问题,所以这里统一使用源码编译。
安装之前好好看一下自己下载的是哪个版本,一定要保证realsense-ros是支持你安装的版本的,一定要注意!
①首先进入https://github.com/IntelRealSense/realsense-ros/releases/tag/2.3.1
②在Tags里选择版本,ROS1对应的是2.x的版本,ROS2对应的是3.x的版本。
③向下拉,首先看到Supported RealSense SDK这一项,下面写了对应的librealsense的版本,记住这个版本。
④再向下,Recommended Firmware中的表格里写了D400系列相机的固件版本,同样记住这个版本,这个非常重要!!!
打开刚才记下的librealsense版本,开始源码编译,再次提醒注意版本:
- # 下载源码
- git clone -b v2.25.0 https://github.com/IntelRealSense/librealsense.git
- # 进入源码目录
- cd librealsense
- # 安装依赖
- sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
- sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev at
- # 从libalsense根目录运行Intel Realsense权限脚本
- ./scripts/setup_udev_rules.sh
- # 编译安装
- mkdir build && cd build
- cmake ../ -DBUILD_EXAMPLES=true -DFORCE_RSUSB_BACKEND=true -DCMAKE_BUILD_TYPE=release -DBUILD_GRAPHICAL_EXAMPLES=FALSE
- # 内存大运行这个
- sudo make uninstall && make clean && make -j8 && sudo make install
- # 内存小运行这个
- sudo make uninstall && make clean && make && sudo make instal
-
验证安装是否成功:
- cd ~/librealsense/build/examples/C/depth/
- ./rs-depth
首先创建工作空间
- mkdir -p ~/catkin_realsense/src
- cd ~/catkin_realsense/src
下载源码
- git clone https://github.com/IntelRealSense/realsense-ros.git
- cd realsense-ros/
- git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1` #查验
- cd ..
编译工作空间
- catkin_init_workspace
- cd ..
- catkin_make clean
- catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
- catkin_make install
git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
最后添加source文件
- echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
- source ~/.bashrc
把相机连接到香橙派上,然后终端输入
realsense-viewer
因为这个部分较简单,就不放运行效果图了,只放一下具体安装命令。
VScode:
sudo dpkg -i ***.deb
Terminator:
sudo apt install terminator
Plotjuggler:
-
- sudo apt install ros-noetic-plotjuggler
- sudo apt install ros-noetic-plotjuggler-ros
- rosrun plotjuggler plotjuggler
安装mavros
- sudo apt-get install ros-noetic-mavros
- cd /opt/ros/noetic/lib/mavros
- sudo ./install_geographiclib_datasets.sh
安装ceres与glog与ddyanmic-reconfigure
3rd_party.zip
压缩包- ./autogen.sh && ./configure && make && sudo make install
- sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
进入ceres文件夹打开终端
- mkdir build
- cd build
- cmake ..
- sudo make -j4
- sudo make install
- sudo apt-get install ros-noetic-ddynamic-reconfigure
-
下载ego-planner源码并编译
- git clone https://github.com/ZJU-FAST-Lab/Fast-Drone-250
- cd Fast-Drone-250
- catkin_make
- source devel/setup.bash
- roslaunch ego_planner single_run_in_sim.launch
在Rviz内按下键盘G键,再单击鼠标左键以点选无人机目标点
roslaunch realsense2_camera rs_camera.launch
rqt_image_view
看/camera/infra1/image_rect_raw
,/camera/infra2/image_rect_raw
,/camera/depth/image_rect_raw
话题正常
- sh shfiles/rspx4.sh
- rostopic echo /vins_fusion/imu_propagate
- sh shfiles/rspx4.sh
- roslaunch ego_planner single_run_in_exp.launch
- roslaunch ego_planner rviz.launch
香橙派AIpro真实场景建图效果:
香橙派AIpro航迹规划仿真效果:
简单做个总结,自己使用香橙派AIpro烧录了ubuntu22.04操作系统,然后下载ros1 Noetic Ninjemys 版本的源码,编译并安装在了香橙派AIpro上面。因为香橙派AIpro是ARM架构,又从源码编译安装了Realsense,验证了D435i深度相机在香橙派AIpro上的实际建图效果,效果是很出色的。之后又部署了ego-planner源码,验证了香橙派AIpro是可以用于无人机实时在线航迹规划的。经过测评香橙派AI|pro真的惊艳到了我,我自己之前是用的intel nuc 猛虎峡谷i5这样一个机载电脑来进行无人机航迹规划算法的验证,这个电脑售价3千左右,而香橙派AIpro8+32G的版本仅仅8百元作用。使用香橙派AIpro作为我验证无人机建图与航迹规划算法的计算平台真的很合适。
作为一名航迹规划领域的工程人员,非常高兴看到香橙派AIpro这样高性价比的产品,通过实际部署航迹规划领域较先进的“ego-planner算法,验证了香橙派AIpro的计算能力是可以胜任“实时建图与航迹规划”这样复杂的任务的,因为时间原因没有做实际的飞行测试,等后续会把香橙派AIpro实际部署到自己的无人机上面看下实际飞行时的建图和规划效果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。