@eee 试试cartographer的重定位
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision

xiaoqiang 发布的帖子
-
RK3588 npu python运行 YOLOv8 和 YOLOv8-seg 的教程
在 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。一、优化修改后的开源代码库
- yolov5: http://git.bwbot.org/publish/rknn-multi-threaded.git
- yolov8: http://git.bwbot.org/publish/rknn3588-yolov8.git
- yolov8-seg: http://git.bwbot.org/publish/rknn3588-yolov8-seg.git
二、代码运行说明
上面三个代码仓库的运行方法相同,都是通过
git clone
克隆代码后,准备好 Python 环境,然后执行main.py
。我们以 YOLOv8 为例:- 升级 NPU 运行库。参考 RK3588 在 Ubuntu22.04 下使用 rknn-toolkit2 的注意事项。
- 克隆源代码:
git clone http://git.bwbot.org/publish/rknn3588-yolov8.git
- 准备python运行环境:
我们在 RK3588 上使用的是 Ubuntu22.04 Desktop,默认的 Python 版本是 3.10。为了避免破坏系统环境,我们使用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%。
-
rk3588在ubuntu22.04下使用rknn-toolkit2的注意事项
rknn-toolkit2是开发rk3588的npu时使用的sdk,github地址是:https://hub.nuaa.cf/airockchip/rknn-toolkit2.git。
git clone下载后,在doc文件内有相关的pdf使用文档,比较重要的是这份文档:02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf。一、 rk3588npu驱动升级
上面这份文档的2.2节设备NPU环境准备中,会更新RKNN Server和 RKNPU2 Runtime 库,操作是通过adb指令,不方便,可以直接把rknn-toolkit2下载到rk3588里面,然后直接cp指令拷贝升级。
#升级rknn server sudo cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/rknn_server /usr/bin/rknn_server sudo cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/start_rknn.sh /usr/bin/start_rknn.sh sudo cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/restart_rknn.sh /usr/bin/restart_rknn.sh #升级 RKNPU2 Runtime 库 cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so #2.0版本没有librknn_api.so,创建一个软连接到librknnrt.so sudo ln -s /usr/lib/librknnrt.so /usr/lib/librknn_api.so
npu的driver可以不用升级,我们用的是0.8.2版本,实测发现除了动态shape功能不支持外,暂时没发现其他问题,可以正常跑通yolov5、yolov8。
二、 运行rknn_model_zoo中的demo
rknn_model_zoo中的demo模型连板运行时,需要先在rk3588中启动rknn_server
#在rk3588上执行 start_rknn.sh
rk3588的adb支持网络模式
#在x86主机上执行 adb connect 192.168.0.xxx:5555 #192.168.0.xxx需要换成实际的rk3588地址
-
ubuntu中用udev规则绑定usb串口和映射别称的办法
1、为什么要把usb串口号映射绑定到usb口
usb转串口设备是常用的外设,用来扩展主机的串口功能。在实操过程中,一个机器人底盘往往会外接多个usb转串口设备,如果不对这些串口设备利用udev规则加以区分,则每次系统上电时这些串口设备的设备号是随机分配的。比如超声波模块的串口第一次开机分配成ttyUSB0, 自动充电模块串口则分配了ttyUSB1这个串口号,然后你重新断电开机后会发现ttyUSB1竟然被系统分配给了超生波模块的串口号,导致超生波和充电模块的ros驱动都工作异常。
解决办法就是把usb口和串口设备进行绑定,同时给这个串口设备映射一个新的名字,比如第一个usb口和超声波串口进行绑定,绑定后超声波串口映射成一个新的名字bwSensors,超生波
的ros驱动程序通过新名字bwSensors对串口进行操作,这样无论系统如何断电重启,都不会串台了。因为usb口的系统编号在关机重启后不会变化,绑定了usb口也就等价获取了静态分配的串口号。2、如何把usb串口设备绑定到usb口同时映射一个新名字
2.1确定要绑定的usb口在系统中的名字
#执行下列指令 dmesg --follow
将usb串口设备插在你要绑定的usb口上,观察上面指令的输出信息,确定系统这次分配的串口号是什么,一般是ttyUSB0、ttyUSB1之类,如下图中attached to ttyUSB1表示给新插入的设备分配了ttyUSB1这个编号。
再通过系统分配的串口号确定当前usb口的编号,下列指令输出信息中找到下图蓝色方框所在位置,红色方框内的2-2.3:1.0就是我们要获取的信息。#ttyUSB1要换成你上面实际获取的串口号 udevadm info /dev/ttyUSB1
2.2建立udev规则文件
在/etc/udev/rules.d/路径下新建95-persistent-serial.rules,如果文件之前存在,不用新建直接修改内容。
sudo nano /etc/udev/rules.d/95-persistent-serial.rules
文件内容如下
ACTION!="add", GOTO="persistent_serial_end" SUBSYSTEM!="tty", GOTO="persistent_serial_end" KERNEL!="ttyUSB[0-9]*", GOTO="persistent_serial_end" KERNELS=="2-2.3:1.0" ,SYMLINK="bwSensors" ,OWNER="xiaoqiang", MODE="0666" KERNELS=="2-2.4:1.0" ,SYMLINK="bwIMU" ,OWNER="xiaoqiang", MODE="0666" LABEL="persistent_serial_end"
KERNELS==“2-2.3:1.0” 中的"2-2.3:1.0"换成上面获取的usb口信息。
SYMLINK=“bwSensors” 中的"bwSensors"就是我们要设置的别称,你可以修改成自己想要的名字。
OWNER="xiaoqiang"中的"xiaoqiang"是系统当前用户名,要改成你自己的用户名。上面实列是把2-2.3:1.0这个usb口上的usb转串口设备绑定映射成bwSensors,把2-2.4:1.0这个usb口上的usb转串口设备绑定映射成bwIMU, 一行代表一个端口的映射,理论上几十个usb转串口设备都可以通过这种方式进行绑定区分,你只要添加对应内容就行。
Ctrl + s保存后, Ctrl + x退出。
2.3主机重启生效
重启后用ls /dev指令,一切正常的话会看到自己映射成功的设备号
ls /dev
-
RE: ps4手柄ros驱动安装和蓝牙配对教程
@cuiliyun ps4手柄有多款山寨版本,有些版本就会能蓝牙配对但是无法使用ros。包装盒有大小两款,小盒子的一般是用不了的垃圾,大盒子能用的概率比较大,原厂原装的最好。
-
RE: google激光雷达slam算法Cartographer的安装及bag包demo测试
@蓝胖子 没找到对应的launch文件,检查ros包launch文件夹内是否有这些launch文件,同时检查是否source了ros工作空间
-
RE: 小强ROS机器人教程(27)___bw_auto_dock自动充电功能包的使用和实现原理
@dennis odom_combined的话题类型需要是标准的里程计话题,不能是其它类型话题
-
RE: 二维码自动充电,无法保存dockposition
@yanyan http://community.bwbot.org/topic/16596/二维码自动充电无法保存dockposition问题/34
-
RE: Odom drifting heavily
@loto https://community.bwbot.org/topic/612/recalibrate-the-chassis-imu
-
RE: 关于启动xiaoqiang_local.launch后自动结束进程
@yao 用windows上位机软件测试能否正常充电,排除硬件问题后再用rostopic工具打印充电节点输出的充电电压和电流话题数据,看值是否异常
-
RE: 二维码自动充电无法保存dockposition问题
@yanyan1011-0 frame_id不要带/,如何查找话题是否订阅成功用rqt_graph、rosnode info工具确定。提供的代码很多用户已经成功使用了,卡在的地方是你们ros基础不扎实。
-
RE: 二维码自动充电无法保存dockposition问题
@yanyan1011-0 tf树解决后,再解决其它问题,打印/ar_pose_marker话题,看是否识别了二维码,以及话题内的frame—id显示的是不是和设置的一样。
还有里程计话题里面的速度值要为零,节点会根据这个速度,判断车是否处于静止状态,处于运动状态也会不保存位置。