文章目录
- 简介和安装
- 示例
- 代码解读
简介和安装
Rerun可以理解为是个高级的日志工具,可以对程序运行中的各种数据进行可视化,并完美回放。其底层基于Rust+webGPU,提供了Rust,C++以及Python的SDK,方便直接嵌入到现有的数据处理或训练管道中。其 Viewer(查看器)设计为完全在客户端本地运行,以确保数据隐私和低延迟,适合处理大规模本地日志。
在Python中用pip安装即可,装完即可运行
pip install rerun-sdk -i https://pypi.tuna.tsinghua.edu.cn/simple rerun界面如下,左侧是项目树,下方有一些示例,点击即可运行,非常炫酷。
示例
下面做一个简单的示例,只用到numpy,其表现力就已经相当不错了
代码如下,虽然长,但逻辑很清晰,rerun只起到一个日志记录和可视化的作用
importrerunasrrimportnumpyasnpimporttime rr.init("自动驾驶小车模拟",spawn=True)forstepinrange(200):rr.set_time("step",sequence=step)# 设置当前时间戳img=np.zeros((200,200,3),dtype=np.uint8)img[:,:,0]=step%255# 红色通道随时间变化img[80:120,80:120]=[0,255,0]# 在图像中间画一个绿色的方块rr.log("camera/view",rr.Image(img))rr.log("camera/detections",rr.Boxes2D(mins=[80,80],sizes=[40,40],labels=["Pedestrian"]))# 定义一个小车car_x=np.sin(step*0.05)*10car_y=np.cos(step*0.05)*10rr.log("world/car_position",rr.Points3D([[car_x,car_y,0]],colors=[255,0,0],radii=1.0))# 随机生成 100 个 3D 点num_points=100points=np.random.rand(num_points,3)*20-10points[:,2]=0# 让点都在地面上 (z=0)rr.log("world/lidar_points",rr.Points3D(points,colors=[0,255,255],radii=0.2))# 小车速度speed=5.0+np.sin(step*0.1)*3.0rr.log("dashboard/speed",rr.Scalars(speed))# 小车电量battery=100.0-step*0.4rr.log("dashboard/battery",rr.Scalars(battery))# 记录 文本数据:系统日志ifstep%40==0:rr.log("logs/system",rr.TextLog(f"Step{step}: 系统运行正常",level=rr.TextLogLevel.INFO))ifstep%100==0andstep>0:rr.log("logs/system",rr.TextLog(f"Step{step}: 警告!电量过低!",level=rr.TextLogLevel.WARN))# 稍微暂停 0.05 秒,让动画看起来更连贯 (如果不加这行,数据会瞬间跑完)time.sleep(0.05)代码解读
【init】函数用于rerun初始化,spawn用于开启多线程。初始化完成后,会弹出rerun的窗口。
【set_time】用于设置演化时间,其第一个参数为时间轴的名称,sequence用于指定当前时间的值。
在初始化完成后,且每次循环指定时间参数后,剩下代码调用的就都是log函数了,用于将日志信息传送给rerun,其输入参数分别是当前日志信息所在的路径和各种不同类型的信息。上述代码生成的日志结构为
- 📁camera
- 📁view➡️Image
- 📁detections➡️Boxes2D
- 📁world
- 📁car_position➡️Points3D
- 📁lidar_points➡️Points3D
- 📁dashboard
- 📁speed➡️Scalars
- 📁battery➡️Scalars
- 📁logs
- 📁system
- ➡️TextLog
- ➡️TextLog
- 📁system
其中,Image, Boxes2D, Points3D, Scalars, TextLog均为Rerun支持的实体类型(Archetype),分别表示图像、二维方块、三维点云、数值和文本日志。Rerun会自动对这些日志信息进行布局,最终在其GUI程序中展示。