基于香橙派 Ai Pro的ROS Qt人机交互软件部署指南

news2024/9/19 15:08:35

一,前言

最近收到了CSDN的邀请,对香橙派新出的Ai Pro进行测评:

IMG_9622.HEIC


说来也巧,其实香橙派本人对其映像挺深刻的,在2017年左右,本人刚上大学,当时是在淘宝购买树莓派,发现有个叫香橙派的国产板子,性能跟树莓派差不多吧,但是价格好像便宜些,但是当时由于上大学,手里的生活费有限,而且生态与资料相对于树莓派要少,就没有入手。
很荣幸最近收到CSDN的邀请,知道了香橙派与华为合作,出了新的Ai Pro的板子,并邀请本人进行测评,相信借助CSDN与华为的晟腾社区的生态,会有更多的开发者加入,生态方面后面肯定会跟树莓派一样很丰富。

IMG_9623.HEIC

二,项目介绍

话不多说,开始本篇的测评,AI Pro主打的是AI方面其算力有8TOPS。由于本人目前从事的工作并没有与AI相关,因此本文就测评一下ROS相关的应用,给大家介绍一下如何在香橙派AI Pro上部署ROS QT人机交互软件。
这里ROS Qt人机交互软件开发建议的方法为:在自己电脑上编写Qt代码,代码编写完成之后,通过交叉编译或直接在板子上编译的方式将项目部署在开发板上,并不建议直接在板子上开发与写代码
本文选择在板子上编译,因此本文会着重介绍如何在板子上搭建ROS Qt的编译环境,并将自己的项目部署上去
这里使用的Demo为本人开源的github项目:
https://github.com/chengyangkj/Ros_Qt5_Gui_App
最终运行效果如下:

2024-05-25_12-35.png

5月25日(1).gif

三,安装ROS

香橙派AI Pro预装的为ubuntu22.04,我这里安装的ROS版本为ros2 humble。这里安装ROS2源码安装与二进制安装,我均尝试过了,大家根据自己的喜好安装即可

1.1 源码安装

源码安装参考ROS官方教程
需要注意,源码安装需要配置代理

1.1.1,启用Ubuntu Universe仓库

sudo apt install software-properties-common
sudo add-apt-repository universe

1.1.2.添加ROS2密钥

sudo apt update && sudo apt install curl -y
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o ros-archive-keyring.gpg
cp ros-archive-keyring.gpg /usr/share/keyrings/

1.1.3.添加ROS源

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装编译所需工具:

sudo apt update && sudo apt install -y \
  python3-flake8-blind-except \
  python3-flake8-class-newline \
  python3-flake8-deprecated \
  python3-mypy \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-mock \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-pytest-runner \
  python3-pytest-timeout \
  ros-dev-tools

1.1.4.下载ROS2 Humble源码

mkdir -p ~/ros2_humble/src
cd ~/ros2_humble
vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

image.png

1.1.5.初始化rosdep

需要执行如下三条指令,这三条如果网络环境不好,很容易导致失败

sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

注意:sudo rosdep init 也需要挂代理,但是可能出现在挂代理的情况下,还是报错,这是因为:使用sudo指令时 是默认不使用系统环境变量设置的http_proxy的,因此可能出现已经挂了代理,但是sudo rosdep init还是失败的情况,可以通过以下方法,设置sudo指令也可使用http_proxy:

  1. 打开终端(Ctrl+Alt+T)。

  2. 输入以下命令并按下回车键:

    sudo visudo
    

    这将打开sudo配置文件以进行编辑。

  3. 在打开的文件中,找到以下行:

    Defaults        env_reset
    
  4. 在此行下方添加以下行:

    Defaults        env_keep += "http_proxy https_proxy ftp_proxy"
    

    这将允许sudo命令使用环境变量中设置的代理。

    image.png


    代理挂上后,继续执行

    sudo rosdep init
    

    image.png

rosdep update

image.png

rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

image.png

1.1.6.编译源码

前面铺垫了那么多 终于开始编译源码了,执行如下命令进行编译

cd ~/ros2_rolling/
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

注:如果嫌编译慢,可以使用多线程编译 4代表4个线程:

colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --parallel-workers 4

编译后出现错误:

image.png


不要慌,这是因为Orange Pi默认处于conda 环境中,使用如下指令退出环境:

conda deactivate

#关闭自动source
conda config --set auto_activate_base false

然后把build目录删除,接着重新编译
由于编译比较慢,容易失败,失败后多尝试几次,我这里已经编译成功了,一些不重要的包编译失败可以不用管:

image.png

1.1.7.设置环境变量

通过如下指令设置环境变量,同时可以把这句话放入bashrc中,就能实现自动source

source ~/ros2_humble/install/local_setup.sh

1.1.8.检查ROS安装是否成功

终端输入ROS2 如果输出以下则代表安装成功:

image.png

1.2 二进制安装

二进制安装的话直接使用鱼香ROS的一键安装即可,这里不再详细介绍,一键安装脚本为:

wget http://fishros.com/install -O fishros && . fishros

但是会安装失败,失败的原因为:

image.png

遇到问题不要慌,我们来手动解决这个问题,使用如下指令:

sudo apt install libicu70=70.1-2

接着手动重新执行安装:

sudo apt-get install ros-humble-desktop

安装成功:

image.png


source 环境变量:

source /opt/ros/humble/setup.bash

验证是否安装成功
输入ros2 指令:

image.png

四,部署ROS QT项目

实际上Ubuntu22.04自带Qt的库,因此不用自行编译安装,如果存在没有的库,使用apt-get 直接安装二进制版本即可

1.克隆项目

这里的话建议将自己的项目上传到git,然后在板子上直接从git上拉取项目,比较方便,我这里使用的为本人的开源Qt项目:
https://github.com/chengyangkj/Ros_Qt5_Gui_App

image.png


使用如下指令拉取项目:

mkdir -p ~/qt_ws
cd ~/qt_ws
git clone https://github.com/chengyangkj/Ros_Qt5_Gui_App

note:如果github下载过慢,可以使用以下指令从gitee拉取

git clone https://gitee.com/chengyangkj/Ros_Qt5_Gui_App

2.编译项目

首先尝试直接编译:

cd ~/qt_ws/ROS2_Qt5_Gui_App
mkdir -p build
cd build
cmake ..
make

发现报如下错误:

image.png


这是因为我的项目依赖boost,但是Pi上的boost安装不全,使用指令安装:

sudo apt install libboost-all-dev

同时把一些项目其他依赖安装上:

sudo apt-get install qtbase5-private-dev libqt5svg5-dev libsdl-image1.2-dev libsdl1.2-dev -y

继续编译,编译成功:

image.png

3.运行项目

连接屏幕或者远程桌面,进入到可视化界面:
输入如下指令启动软件:

cd ~/qt_ws/ROS2_Qt5_Gui_App/build
./ros_qt5_gui_app

我这里连接的为另外一台电脑的仿真小车:

2024-05-25_12-35.png


动态效果:

5月25日(1).gif

五,总结

使用了一周下来,香橙派AI Pro对我而言体验还是不错的,没有什么坑,装好系统镜像后做到了插电即用。连续插电运行一周也没有出现什么问题,很稳定。
香橙派AI Pro主打AI方面的强势,由于本人没有测试AI相关的指标,美中不足的是其CPU核心数比较少(只有4个核),在跑项目时如果开了一些录屏软件之类的话,会导致CPU占用率过高,从而使激光的绘制频率跟不上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不是从APP store下载的APP在mac上一直提示有损坏,打不开怎么办?

1.点击设置 2.安全与隐私 3.通用看看允许从以下位置下载的APP是否有任何来源 4.如果没有,mac桌面点击🔍输入终端或Terminal 命令行输入下述代码: sudo spctl --master-disable 5.回车,输入mac开机密码。注意:此时密…

探索循环逻辑:for逻辑分支与容器遍历的深度剖析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:for逻辑与循环体的奥秘 二、for逻辑与循环体的结合使用 1. 函数与循环…

Spring-Cloud-OpenFeign源码解析-04-调用流程分析

在Spring-Cloud-OpenFeign源码解析-03-FeignClientFactoryBean分析到,通过Autowired或者Resource注入FeignClient实例的时候,实际上返回的是JDK动态代理对象,具体的实现逻辑在InvocationHandler的invoke方法中 回看ReflectiveFeign.newInsta…

Tower for Mac——高效版本控制的得力助手

在编程的世界里,版本控制是每一个开发者都离不开的工具。Tower for Mac,就是这样一款高效、易用的版本控制软件。 Tower for Mac拥有直观易用的界面,无论是提交代码、创建分支还是解决冲突,都能让开发者轻松应对。它支持多仓库管…

postman教程-5-发送put请求

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了postman发送post请求的方法,本小节我们讲解一下postman发送put请求的方法。 HTTP PUT 请求是一种用于传输数据的网络协议方法,它在客户端和服务器之间的通信中扮演着重…

EMQX 的初始IP改为自己的实际IP

分类 EMQX Dashboard(控制台): Dashboard提供了一个Web界面,用于管理和监控EMQX的运行状态。您可以通过配置dashboard.listeners.http.bind来设置Dashboard的监听地址和端口。例如,如果您想要Dashboard在所有网络接口上监听&#…

软件技术架构全面详解

软件架构全面详解 软件架构 这个与建筑设计架构类似,建筑设计架构师负责设计建筑物的整体结构、布局和功能分配。 而软件架构师,负责设计软件系统的整体组织结构、模块划分、和功能分配。 两者都需要考虑到业务功能、性能、可扩展性、安全性、以及用户体验等方面。 软件架…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端:点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息,包括查…

Windows远程桌面是什么?

Windows远程桌面是一种远程桌面协议,允许用户通过网络连接到远程Windows计算机,并在本地操作远程计算机。它为用户提供了访问远程计算机的便利性,可以在不同地区的电脑或设备之间进行信息远程通信。 天联解决方案 在远程桌面技术中&#xff…

phpmyadmin漏洞汇总

phpmyadmin是一个非常常用的框架,所以学习它的常见漏洞是非常必要的。 参考大佬的文章进行自学:最全phpmyadmin漏洞汇总_phpmyadmin弱口令-CSDN博客 目录 phpmyadmin简介 查看phpmyadmin版本 漏洞及利用 万能密码登入 影响版本 漏洞POC 远程代码…

Ubuntu 20.04 上安装和配置 VNC

先决条件 请确保以具有 sudo 权限的用户身份登录。建议使用具有 sudo 权限的普通用户进行处理,而不是直接使用 root 用户。创建用户并加入 sudoers 可自行百度。 安装桌面环境 大多数服务器没有安装桌面环境,因此我们首先要安装轻量级桌面环境。 Ubu…

PS系统教学01

在前面几节内容基本介绍了PS的基本作用,简单的对PS中的某些基础功能进行介绍应用。 接下来我们进行系统的分享。 本次分享内容 基础的视图操作 接下来我们是对于PS工作区域的每个图标工具进行详细的分享 抓手工具缩放工具 这个图标是将工具栏由一列变成两列 一…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

stm32cubeMX简单使用(轻松配置时钟和中断等)ST图形代码生成器

大大加快代码编写速度的图形编译工具 需要的准备材料 需要注意的几点操作 1,管理固件库和软件,方便对应不同系列的硬件 2,新建工程 3,整体流程 这个软件的本质是用来生成代码,方便前期初始化操作 4,对引…

2024.05.27学习记录

1、面经复习: 实际工作经验章节 2、代码随想录刷题:动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容

开机必启截图标注类神器Snipaste,基本使用及技巧

目录 一、软件简介二、基本安装三、自启设置四、快捷操作五、使用技巧 一、软件简介 Snipaste 是一款简单高效的截图工具。只需按下 F1 即可截图(可进行自主设置),再按 F3 即可将截图置顶显示(贴图功能)。你还可以将剪…

Pytorch深度学习实践笔记9(b站刘二大人)

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:pytorch深度学习 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

【408】2009-20

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

基于51单片机的电压表-数码管显示

一.硬件方案 本设计基于STC89C52单片机的一种电压测量电路,该电路采用ADC0832A/D转换芯片,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量0~9V的电压值,并在四位LED数码管上显示电压值。 二.设计功能 (1&…

07_Servlet

Servlet 一 Servlet简介 1.1 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源. 例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成…