瑞芯微Rockchip开发者社区
登录
直播中
李芳
7年用户
1518经验值
私信
关注
[问答]
讲述树莓派主动模式的单计算棒部署流程
开启该帖子的消息推送
树莓派
什么是主动模式?
树莓派主动模式的单计算棒是如何去部署的?
回帖
(1)
方春晓
2022-2-16 10:18:47
1. 主动模式介绍 ( baidu "toybrick" enter into ....)
主动模式的上位机可以是任何带有USB接口的平台及任何操作系统,包括了
x86/x64/arm32/arm64的linux/windows/mac os及单片机、树莓派
等等。
本教程以树莓派为例讲述主动模式的单计算棒部署流程。
1808计算棒插入树莓派后,会被虚拟成网卡设备
进行虚拟网卡配置,保证上位机和1808中间的网络连接正常
计算棒默认IP为192.168.180.8,账号密码皆为toybrick
计算棒端运行server服务程序,用来接收上位机的连接请求,并调用RKNN进行处理,再返回结果
上位机运行client程序,连接server成功之后,发送推理请求,从1808端获取返回结果
2. 硬件组成
raspberrypi 3b+
1808人工智能计算棒
键盘、鼠标
USB camera
显示屏
HDMI数据线
USB HUB
网线用于连接因特网
micro USB供电
3. 树莓派网络配置
网络配置的目的,是为了使树莓派和计算棒之间能够通过网络进行通信。
3.1 虚拟网卡配置
1808计算棒插入树莓派后,会被虚拟成网卡设备,树莓派会自动生成网卡节点eth1。我们需要使用nmcli 工具删除eth1,再重新进行虚拟网卡配置。
sudo apt-get install network-manager
sudo nmcli con delete eth1
sudo nmcli connection add con-name toybrick type ethernet ifname eth1 autoconnect yes ip4 192.168.180.1/24
使用ifconfig命令,可以看到eth1的地址以及被设置成192.168.180.1
完成以上配置后,上位机即可与1808计算棒正常通信,可以ping通或者ssh登录到192.168.180.8
注意:
以上配置完成一次即可。
此时1808暂时还不能访问外网,1808上还无法安装软件包。
3.2 NAT网络配置
如果计算棒需要访问外网进行软件包安装,或者软件升级,则需要进行此步骤,本步骤关机后需要重新配置。
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
复制代码
4. 主动模式C语言开发
下载源码到树莓派用户根目录,并解压源码
tar -xvf master_mobilenet_ssd.tar
4.1 1808计算棒部署
1、拷贝解压目录中的1808目录至计算棒,并重命名为mobilenet_ssd
scp -r ~/master_mobilenet_ssd/1808
:/home/toybrick/mobilenet_ssd/
复制代码
2、ssh进入计算棒,账号密码均为toybrick
ssh
复制代码
3、安装依赖包(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
1808计算棒默认已安装rknn_api库。
sudo dnf clean all
sudo dnf install -y cmake make
4、编译
cd mobilenet_ssd
mkdir build && cd build
cmake ..
make -j4
5、开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序
cd /home/toybrick/mobilenet_ssd
sudo -u toybrick /home/toybrick/mobilenet_ssd/boot.sh
4.2 树莓派部署
opencv仅为方便demo效果演示使用,非主动模式必须。
1、树莓派开发环境安装
sudo apt-get install -y make cmake libopencv-dev
2、编译
cd ~/master_mobilenet_ssd/host
3、运行demo。在4.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。
./ssd_demo
复制代码
可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。
5. 主动模式Python开发
从github上克隆源码到树莓派用户根目录,树莓派默认已安装git。
cd ~
git clone
5.1 1808计算棒部署
1、拷贝1808目录至计算棒,并重命名为rockx
scp -r ~/master_rockx_demo/1808 :/home/toybrick/rockx/
2、ssh进入计算棒,账号密码均为toybrick
ssh
复制代码
3、系统升级,目的在于保证驱动一致性,升级完成后需要重启。(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
sudo apt-get update
复制代码
4、python环境包安装(确保2.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
opencv仅为方便demo效果演示使用,非主动模式必须。
rockx封装了一些常用的模型,可以简化编程,非主动模式必须。
TMPDIR必须设置,否则由于系统tmp目录过小,会导致安装Python包失败。
cd ~ && mkdir tmp
5、开机自启动开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序。/usr/local/bin/tb.local.after将会在系统启动之后自动加载,我们在其中调用我们自己的boot.sh,完成启动server程序的操作。
cd /home/toybrick/rockx
sudo -u toybrick /home/toybrick/rockx/boot.sh
至此,我们在1808端启动了3个模型的server程序。其中端口号在代码中指定,可以自行修改。
face_landmark_sever.py 监听端口8001
object_server.py 监听端口8002
pose_server.py 监听端口8003
5.2 树莓派部署
opencv仅为方便demo效果演示使用,非主动模式必须。
1、安装opencv
pip3 install --user opencv-python
2、由于树莓派在opencv存在BUG,如果进行以下操作才能正常import cv2。在~/.bashrc中最后添加以下内容
export LD_PRELOAD=$LD_PRELOAD:/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0
3、执行以下命令生效改动
source ~/.bashrc
4、运行demo。在5.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。
face_landmark.py、object.py、pose.py三个demo均可以正常运行,此处以object.py运行为例。
python3 object.py
复制代码
可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。
opencv非主动模式所必须
,C语言和Python的demo用到opencv库,仅为方便图像的采集、显示和编解码操作,用户可以
自行选择是否使用opencv
。
本帖所用到的两个demo,C语言版本运行帧率会比Python版本低,主要是因为Python版demo中,传输图像时使用了
JPEG编解码
,传输数据量变少,减少了传输时间。C语言也可以同样通过类似方法自行实现进行优化。
将数据采集,数据传输,结果显示
并行处理
,可以显著提高帧率。
当前主动模式的瓶颈主要在
网络数据传输耗时
,提高帧率可以从数据传输量下手。
上位机对输入数据进行
压缩编码
后,再传输给1808计算棒进行
解码
。
输出后处理
可以在1808上进行,只保留
最终结果
发送给上位机。
编程指引:
一、单计算棒多模型:
给不同的模型分配不同port端口
在计算棒上同时自动启动多个模型的服务程序
上位机的程序可以通过不同的port端口连接到计算棒上。
1. 主动模式介绍 ( baidu "toybrick" enter into ....)
主动模式的上位机可以是任何带有USB接口的平台及任何操作系统,包括了
x86/x64/arm32/arm64的linux/windows/mac os及单片机、树莓派
等等。
本教程以树莓派为例讲述主动模式的单计算棒部署流程。
1808计算棒插入树莓派后,会被虚拟成网卡设备
进行虚拟网卡配置,保证上位机和1808中间的网络连接正常
计算棒默认IP为192.168.180.8,账号密码皆为toybrick
计算棒端运行server服务程序,用来接收上位机的连接请求,并调用RKNN进行处理,再返回结果
上位机运行client程序,连接server成功之后,发送推理请求,从1808端获取返回结果
2. 硬件组成
raspberrypi 3b+
1808人工智能计算棒
键盘、鼠标
USB camera
显示屏
HDMI数据线
USB HUB
网线用于连接因特网
micro USB供电
3. 树莓派网络配置
网络配置的目的,是为了使树莓派和计算棒之间能够通过网络进行通信。
3.1 虚拟网卡配置
1808计算棒插入树莓派后,会被虚拟成网卡设备,树莓派会自动生成网卡节点eth1。我们需要使用nmcli 工具删除eth1,再重新进行虚拟网卡配置。
sudo apt-get install network-manager
sudo nmcli con delete eth1
sudo nmcli connection add con-name toybrick type ethernet ifname eth1 autoconnect yes ip4 192.168.180.1/24
使用ifconfig命令,可以看到eth1的地址以及被设置成192.168.180.1
完成以上配置后,上位机即可与1808计算棒正常通信,可以ping通或者ssh登录到192.168.180.8
注意:
以上配置完成一次即可。
此时1808暂时还不能访问外网,1808上还无法安装软件包。
3.2 NAT网络配置
如果计算棒需要访问外网进行软件包安装,或者软件升级,则需要进行此步骤,本步骤关机后需要重新配置。
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
复制代码
4. 主动模式C语言开发
下载源码到树莓派用户根目录,并解压源码
tar -xvf master_mobilenet_ssd.tar
4.1 1808计算棒部署
1、拷贝解压目录中的1808目录至计算棒,并重命名为mobilenet_ssd
scp -r ~/master_mobilenet_ssd/1808
:/home/toybrick/mobilenet_ssd/
复制代码
2、ssh进入计算棒,账号密码均为toybrick
ssh
复制代码
3、安装依赖包(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
1808计算棒默认已安装rknn_api库。
sudo dnf clean all
sudo dnf install -y cmake make
4、编译
cd mobilenet_ssd
mkdir build && cd build
cmake ..
make -j4
5、开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序
cd /home/toybrick/mobilenet_ssd
sudo -u toybrick /home/toybrick/mobilenet_ssd/boot.sh
4.2 树莓派部署
opencv仅为方便demo效果演示使用,非主动模式必须。
1、树莓派开发环境安装
sudo apt-get install -y make cmake libopencv-dev
2、编译
cd ~/master_mobilenet_ssd/host
3、运行demo。在4.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。
./ssd_demo
复制代码
可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。
5. 主动模式Python开发
从github上克隆源码到树莓派用户根目录,树莓派默认已安装git。
cd ~
git clone
5.1 1808计算棒部署
1、拷贝1808目录至计算棒,并重命名为rockx
scp -r ~/master_rockx_demo/1808 :/home/toybrick/rockx/
2、ssh进入计算棒,账号密码均为toybrick
ssh
复制代码
3、系统升级,目的在于保证驱动一致性,升级完成后需要重启。(确保3.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
sudo apt-get update
复制代码
4、python环境包安装(确保2.2 NAT网络配置完成,可以尝试在1808上sudo ping
确认是否可以访问外网)
opencv仅为方便demo效果演示使用,非主动模式必须。
rockx封装了一些常用的模型,可以简化编程,非主动模式必须。
TMPDIR必须设置,否则由于系统tmp目录过小,会导致安装Python包失败。
cd ~ && mkdir tmp
5、开机自启动开机自启动,在/usr/local/bin/tb.local.after中加入以下代码,重启后,1808将会自动运行mobilenet_ssd服务程序。/usr/local/bin/tb.local.after将会在系统启动之后自动加载,我们在其中调用我们自己的boot.sh,完成启动server程序的操作。
cd /home/toybrick/rockx
sudo -u toybrick /home/toybrick/rockx/boot.sh
至此,我们在1808端启动了3个模型的server程序。其中端口号在代码中指定,可以自行修改。
face_landmark_sever.py 监听端口8001
object_server.py 监听端口8002
pose_server.py 监听端口8003
5.2 树莓派部署
opencv仅为方便demo效果演示使用,非主动模式必须。
1、安装opencv
pip3 install --user opencv-python
2、由于树莓派在opencv存在BUG,如果进行以下操作才能正常import cv2。在~/.bashrc中最后添加以下内容
export LD_PRELOAD=$LD_PRELOAD:/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0
3、执行以下命令生效改动
source ~/.bashrc
4、运行demo。在5.1中,我们已经在1808上完成mobilenet_ssd的sever程序的自动启动。
face_landmark.py、object.py、pose.py三个demo均可以正常运行,此处以object.py运行为例。
python3 object.py
复制代码
可以在屏幕上看到mobilenet_ssd的推理画面,按ESC退出。
opencv非主动模式所必须
,C语言和Python的demo用到opencv库,仅为方便图像的采集、显示和编解码操作,用户可以
自行选择是否使用opencv
。
本帖所用到的两个demo,C语言版本运行帧率会比Python版本低,主要是因为Python版demo中,传输图像时使用了
JPEG编解码
,传输数据量变少,减少了传输时间。C语言也可以同样通过类似方法自行实现进行优化。
将数据采集,数据传输,结果显示
并行处理
,可以显著提高帧率。
当前主动模式的瓶颈主要在
网络数据传输耗时
,提高帧率可以从数据传输量下手。
上位机对输入数据进行
压缩编码
后,再传输给1808计算棒进行
解码
。
输出后处理
可以在1808上进行,只保留
最终结果
发送给上位机。
编程指引:
一、单计算棒多模型:
给不同的模型分配不同port端口
在计算棒上同时自动启动多个模型的服务程序
上位机的程序可以通过不同的port端口连接到计算棒上。
举报
更多回帖
rotate(-90deg);
回复
相关问答
树莓派
嵌入式RK3399
主动
模式
的人工智能
计算
棒
部署
流程
是怎样的
2022-02-15
1894
请问该如何修改RK1808
计算
棒
的默认IP地址呢
2022-05-07
5544
多
棒
主动
模式
怎样才能在yolov3运行呢
2022-02-16
1258
如何用
树莓
派
控制太阳能热水器?
2019-08-01
2278
如何通过
树莓
派
的硬件PWM控制好盈电调来驱动RC车子的前进后退以及车子转向?
2021-09-28
2854
请问
树莓
派
如何用python连接外部数据库?
2020-04-22
2233
什么是
树莓
派
(Raspberry Pi)
2021-07-30
4483
请问
树莓
派
怎么运行labview
2016-12-28
64288
树莓
派
与STM32是如何去实现串口透传的
2021-12-02
1578
有人出钱在
树莓
派上预装软件,
树莓
派
十动然拒!
2016-01-05
8494
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分