@natsuki 在 rk3588在ros中使用ros_rknn_yolo包 中说:
ros_rknn_yolo文件夹内有没有正确创建venv子文件夹,检查venv内的python虚拟环境是否正确创建了。
同时可以手动按行执行一下rknn_yolo_node.sh这个bash文件中的指令内容,看是哪一行出了问题。
@natsuki 在 rk3588在ros中使用ros_rknn_yolo包 中说:
ros_rknn_yolo文件夹内有没有正确创建venv子文件夹,检查venv内的python虚拟环境是否正确创建了。
同时可以手动按行执行一下rknn_yolo_node.sh这个bash文件中的指令内容,看是哪一行出了问题。
《rk3588在ros中使用ros_rknn_yolo包》这篇文章中的图像话题来源,除了usb摄像头外,一般是监控摄像头。监控摄像头推的基本都是rtsp流,因此需要一个ros包来将rtsp视频流解码转换成ros图像话题数据流。使用bw_rtsp_client包,可以方便、高效率地在rk3588中完成这个任务,转换1080p的rtsp流延时低于160毫秒,cpu占用率单核小于50%。
确保您的RK3588设备已经安装了ROS环境。本教程默认您使用的是ROS1版本,具体的安装步骤请参考ros_rknn_yolo
包内的readme
文件。
rk3588的ubuntu系统还需要升降安装下列硬件解码库。
https://git.bwbot.org/publish/librga
https://git.bwbot.org/publish/mpp
https://git.bwbot.org/publish/ffmpeg-rockchip
https://git.bwbot.org/publish/rockchip_mirrors
每个仓库readme里面有安装步骤
首先,切换到您的ROS工作空间src
目录下,然后克隆bw_rtsp_client
软件包:
cd ~/rk3588_ros_ws/src
git clone https://git.bwbot.org/publish/bw_rtsp_client.git
返回到工作空间的根目录,进行编译:
#开始编译
cd ~/rk3588_ros_ws/
catkin_make
先找到一个rtsp数据流,可以用这个软件包《gst-rtsp-server》发布一个测试用的数据流。
./test-launch "( videotestsrc ! video/x-raw,width=1920,height=1080,framerate=30/1 ! timeoverlay ! tee name=vsrc vsrc. ! queue ! videoconvert ! ximagesink vsrc. ! queue ! mpph264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"
bw_rtsp_client
包提供了Launch文件来启动节点和相关的配置。在另一个新开的终端中运行以下命令以启动:
#将test.yaml文件中的rtsp_uri参数改成自己要订阅的rtsp流链接,再执行下列指令。
roslaunch bw_rtsp_client test.launch
在另一个新开的终端中使用image_view查看转换发布的话题
rosrun image_view image_view
请阅读bw_rtsp_client中的readme.md文件,可以使用service接口控制转换过程的开启和关闭。
rk3588运行whisper模型有三种方法:1.使用纯cpu运行原始pytorch模型;2.将whisper模型转成onnx各式,再转成rknn格式使用npu运行;3.利用npu提供的矩阵运算功能,结合cpu一起运行原始pytorch模型。方法1做不到实时,方法2有rockchip官方仓库。方法3是这篇教程介绍的,方法3比方法2更快,同时功能更完整,比如tiny和small模型都可以运行。
我们在https://github.com/usefulsensors/useful-transformers基础上,通过修复bug,增加运行参数和prompt控制输出字体格式,实现了多语言模型的实时准确推理,whisper tiny和base模型rtf<0.1, small模型rtf<0.5。
通过 git clone
克隆代码后,准备好 Python 环境,然后执行 transcrible_wav.py
完成语音识别。
git clone http://git.bwbot.org/publish/useful-transformers.git
virtualenv
来配置需要的 Python 运行环境。sudo apt install python3-virtualenv
#进入上面git clone下来的文件夹根目录
cd useful-transformers
#创建虚拟环境
virtualenv --system-site-packages -p /usr/bin/python3 venv
#激活虚拟环境
source venv/bin/activate
#开始在虚拟环境中安装pybind11
pip install -i https://mirror.baidu.com/pypi/simple pybind11
#在虚拟环境中编译安装useful-transformers包,注意指令中的文件路径要改成自己的实际路径
export pybind11_DIR=/home/xiaoqiang/npu/useful-transformers/venv/lib/python3.10/site-packages/pybind11/share/cmake/pybind11
./venv/bin/pip install ../useful-transformers -i https://pypi.mirrors.ustc.edu.cn/simple
3.环境配置完成,开始运行whisper:
taskset -c 4-7 ./venv/bin/python -m useful_transformers.transcribe_wav ./wav/chinese.wav tiny zh
运行指令格式如下,modelname可以为tiny、base、small、tiny.en、base.en、small.en或者自己微调的模型。languge可以为en或zh,分别代表英文和中文。
taskset -c 4-7 python -m useful_transformers.transcribe_wav <wav_file> modelname languge
自己微调的模型可以用torch_state_dict_to_npz.py 文件来转换。
@shlfan 第一次运行错误,可以先只编译vision_msgs包
catkin_make -DCATKIN_WHITELIST_PACKAGES="vison_msgs"
第二次运行的错误是安装python虚拟环境的依赖包出了问题,手动执行CMakeLists.txt中的58行指令安装,看报什么错误,一般是网络问题。
还有一个注意点,这个包默认的python版本是3.10,你的是3.8版本,rknn_toolkit_lite2的安装包要自己换成3.8版本的,同时修改CMakeLists.txt中的88行。
@shlfan 在 rk3588在ros中使用ros_rknn_yolo包 中说:
undefined reference to `pthread_join’
catkin_make时默认会编译整个工作空间中的包,你目前的错误是其它ros包有问题,可以使用下面命令只编译ros_rknn_yolo包
catkin_make -DCATKIN_WHITELIST_PACKAGES="vison_msgs;ros_rknn_yolo"
@zhiming 左右两个红外探头不要被车挡住,模块无法判断已经达到充电桩正前方,会导致一直卡在步骤c
如果你的香橙派5,使用的是ubuntu 22.04 同时内核版本是5.10.110,可以下载安装这个deb包 linux-image-legacy-rockchip-rk3588_1.1.6_arm64.deb 进行升级。
sudo dpkg -i linux-image-legacy-rockchip-rk3588_1.1.6_arm64.deb
@zhiming rostopic echo 节点发布的话题,看是否有数据,rqt_graph工具排查节点是否成功订阅了相关话题和tf关系。
本文档将引导您如何在基于RK3588的设备上,使用ros_rknn_yolo软件包进行高效的对象检测。
确保您的RK3588设备已经安装了ROS环境。本教程默认您使用的是ROS1版本,具体的安装步骤请参考ros_rknn_yolo
包内的readme
文件。
首先,切换到您的ROS工作空间src
目录下,然后克隆ros_rknn_yolo
软件包及其依赖的vision_msgs
软件包:
cd ~/rk3588_ros_ws/src
git clone https://git.bwbot.org/publish/ros_rknn_yolo.git
git clone https://git.bwbot.org/publish/vision_msgs.git
返回到工作空间的根目录,进行编译:
#先安装系统依赖
sudo apt install python3-virtualenv
pip install opencv-python opencv-contrib-python
#开始编译
cd ~/rk3588_ros_ws/
catkin_make
编译完成后,需要运行ros_rknn_yolo
包中的一个脚本以设置rknn2
的运行环境:
roscd ros_rknn_yolo
sudo ./fix_rknn2_runtime
ros_rknn_yolo
包提供了Launch文件来启动节点和相关的配置。
在终端中运行以下命令以启动:
roslaunch ros_rknn_yolo xiaoqiang_yolo.launch
以上命令将启动rknn_yolo_node
节点,并加载预定义的配置。有关节点参数和功能的详细信息,请参阅readme_cn.md
文件。
为了验证ros_rknn_yolo
包是否正常工作,可以运行包内提供的测试文件。
在新的终端窗口中,执行以下命令来启动测试节点:
roscd ros_rknn_yolo/test
python bus_do_yolo_srv.py
此测试脚本将向rknn_yolo_node
节点发送一张图片,并显示检测结果。
您还可以自己运行其它test文件,比如同时推理两个视频
至此,您已成功在RK3588设备上使用ros_rknn_yolo
包进行了对象检测。根据您的具体需求,请进一步探索和调整ros_rknn_yolo
包的配置和功能。
@zhiming 我不了解你的底盘电源系统,这个5v是给这个模块供电的,功率5v 0.5A
重新import logging
from rknnlite.api import RKNNLite
改成
import importlib
import logging
from rknnlite.api import RKNNLite
importlib.reload(logging)
logging.basicConfig(level=logging.INFO)
网上很多同学留言说rknn对npu的调度有问题,会导致卡住,我们初始遇到了这种现象,经过排查发现是python的numpy数组越界导致了卡顿,比如操作图像数据,下标越界了。解决越界问题后,npu调度就流畅了。
在 RK3588 上运行 YOLOv5 的教程比较丰富,而对于 YOLOv8 相关的 Python 开源库则较少。对于多线程推理,一个不错的开源库是 rknn-multi-threaded。RKNN_model_zoo 中的 examples 提供了 YOLOv8 的相关 demo,但其 Python 后处理部分编写不佳,需要 PyTorch 依赖,并且后处理耗时较大,无法满足视频实时推理的需求。
我们在 rknn-multi-threaded 的基础上,对 RKNN_model_zoo 中的 YOLOv8 example 进行了整合,并使用 github Copilot 重写了后处理函数。这一改进不仅取消了对 PyTorch 的依赖,还将后处理耗时从几百毫秒降低到了几十毫秒。在 3 线程模式下,推理 YOLOv8s 模型可以达到约 45fps,而推理 YOLOv8s-seg 模型则可以达到约 25fps。
上面三个代码仓库的运行方法相同,都是通过 git clone
克隆代码后,准备好 Python 环境,然后执行 main.py
。我们以 YOLOv8 为例:
git clone http://git.bwbot.org/publish/rknn3588-yolov8.git
virtualenv
来配置需要的 Python 运行环境。sudo apt install python3-virtualenv
#进入上面git clone下来的文件夹根目录
cd rknn3588-yolov8
#创建虚拟环境
virtualenv --system-site-packages -p /usr/bin/python3 venv
#激活虚拟环境
source venv/bin/activate
#开始在虚拟环境中安装rknn_toolkit_lite2,这里需要安装和python版本相同的whl
pip install rknn_toolkit_lite2-2.0.0b0-cp310-cp310-linux_aarch64.whl
#安装opencv
pip install -i https://mirror.baidu.com/pypi/simple opencv_contrib_python
4.环境配置完成,开始运行yolov8:
python main.py
在 main.py
文件中,您可以修改模型、线程数,还可以修改成实时推理摄像头。
# 推理视频文件
cap = cv2.VideoCapture('./720p60hz.mp4')
# 推理实时摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
YOLOv8s 的运行速度大约是 YOLOv5 的 70%,YOLOv8s-seg 的运行速度大约是 YOLOv8s 的 50%。
@anbeeyao 这个是因为keyframe可能会被删除,删除后相关的地图点也就可能存在观测为零的情况