9 công cụ mã nguồn mở tuyệt vời để quản lý rosbag của bạn
Một lựa chọn được thực hiện bởi các kỹ sư Evocargo
Cho dù bạn mới bắt đầu với ROS hay đã là một nhà phát triển chuyên sâu, bạn có thể cảm thấy rằng một số việc và thao tác nhất định có thể được thực hiện dễ dàng hơn, nhanh hơn hoặc thuận tiện hơn. Bạn thậm chí có thể nghĩ đến việc tạo một số công cụ cho ROS ngay bây giờ, chẳng hạn như công cụ sẽ hiển thị siêu dữ liệu về túi của bạn ở chế độ xem đẹp mắt. Trước khi bạn làm điều đó, hãy xem lựa chọn gói ROS nguồn mở của chúng tôi — bạn có thể tìm thấy các giải pháp làm sẵn giúp bạn tiết kiệm nhiều thời gian và công sức.
Trong bài đăng này, chúng tôi tập trung vào các gói dành cho túi ROS giúp bạn trực quan hóa và chỉnh sửa dữ liệu túi. Với một số gói, chúng tôi tiến xa hơn và chứng minh cách bạn có thể nâng cấp chúng cho các nhu cầu sản phẩm cụ thể của mình.
Xe tự lái tạo ra lượng dữ liệu khổng lồ cần thiết cho nhận thức, bản địa hóa, tránh va chạm, tự chẩn đoán và các nhiệm vụ thiết yếu khác trong xe tự lái. Dữ liệu như vậy là một tài sản có giá trị cao vì chúng được sử dụng để đào tạo mạng lưới thần kinh và điều tra sự cố. Ví dụ: Cục Quản lý An toàn Giao thông Đường cao tốc Quốc gia Hoa Kỳ đã yêu cầu một số nhà sản xuất và nhà điều hành báo cáo một số vụ va chạm nhất định liên quan đến các phương tiện được trang bị Hệ thống Hỗ trợ Người lái Nâng cao (ADAS) Cấp độ 2 -5 SAE để điều tra mức độ an toàn của các hệ thống tự lái và tóm tắt kết quả trong một báo cáo. báo cáo sự cố . Điều này cũng có thể trở thành một thông lệ ở các quốc gia khác.
Ước tính dữ liệu được tạo ra có thể khác nhau đối với các phương tiện khác nhau do thiết bị trên tàu và các tình huống ứng dụng. Với nhiều camera độ phân giải cao, lidar, radar và các cảm biến khác trên xe, một chiếc ô tô tự lái có thể tạo ra tới 15TB dữ liệu trong vài giờ di chuyển. Điều này có nghĩa là trục rô-bốt thực hiện các chuyến đi chở khách không ngừng có thể được cho là đạt 450 TB mỗi ngày (tìm hiểu thêm tại đây và tại đây ).
Nếu bạn đang sử dụng ROS, tất cả dữ liệu được ghi vào các tệp túi được ghi và lưu trữ để sau này bạn có thể lập chỉ mục, chú thích và phát chúng.
Vì vậy, bạn sẽ có một danh sách ấn tượng các tệp mà bạn cần điều hướng và phân tích. Để vượt qua nó, bạn có thể sử dụng các gói ROS miễn phí mà chúng tôi đã chọn để mô tả trong bài viết này. Một số trong số chúng được đưa vào Chỉ số ROS , một số thì không. Và một số trong số chúng chỉ được thiết kế cho ROS 1 — chúng tôi sẽ ghi chú về điều đó.
Xem túi trong giao diện người dùng đẹp
Như bạn có thể thấy trong Hình 1 , về cơ bản, các túi là các tệp trong một thư mục. Bạn phải sử dụng Giao diện dòng lệnh để làm việc với chúng và bạn không thể làm được gì nhiều — theo mặc định, ROS cho phép bạn phát lại tệp túi, xem thông tin về túi, kích thước và thời lượng của túi, xem chủ đề, loại tin nhắn và số lượng của chúng. Bạn càng tích lũy nhiều dữ liệu, càng khó tìm thấy thứ bạn cần.
Công cụ Cơ sở dữ liệu Túi của Viện Nghiên cứu Tây Nam cung cấp giao diện web thân thiện để theo dõi thư mục của bạn cho các tệp túi ROS. Nó cho phép bạn xem nhiều siêu dữ liệu hữu ích như ngày ghi, lộ trình, hình ảnh tương ứng, v.v.
Tương tác của bạn với túi trở nên dễ dàng và hiệu quả hơn rất nhiều!
Ngoài ra, Cơ sở dữ liệu túi cho phép bạn thêm các tập lệnh xử lý hậu kỳ khác nhau mà sau đó có thể chạy trong các vùng chứa Docker bị cô lập. Ví dụ: tại Evocargo, chúng tôi đã viết một bag_indexer
tập lệnh hiển thị bản tóm tắt đầy đủ về nội dung túi trong một hình ảnh PNG duy nhất.
Với một cái nhìn thoáng qua, bạn có thể có được ý tưởng về những điều sau đây:
- Chất lượng làn đường, ánh sáng và điều kiện thời tiết qua các hình thu nhỏ
- Lộ trình tham chiếu và độ lệch so với nó dựa trên đo đường, GNSS và nội địa hóa
- Tốc độ tại bất kỳ thời điểm hoặc vị trí nhất định
- Chế độ điều khiển phương tiện, hoặc thời gian vận hành phương tiện bằng tay
- Khoảng cách và thời gian của chuyến đi
- Tên túi, v.v.
Các tham số của ảnh chụp nhanh, chẳng hạn như vị trí và màu sắc của các khối thông tin và số lượng hình thu nhỏ từ hình ảnh camera, được xác định trong tệp cấu hình.
Trong Cơ sở dữ liệu túi , bag_indexer
tập lệnh trông như sau:
Để biết thêm chi tiết và ví dụ về tập lệnh, hãy xem tài liệu Cơ sở dữ liệu túi .
Thêm siêu dữ liệu
Siêu dữ liệu về túi chứa thông tin chi tiết về các điều kiện ghi trong túi như vị trí ghi, hệ điều hành và phiên bản phần mềm, thiết bị được kết nối, điều kiện thời tiết, tác vụ. Thông thường, bạn lưu trữ dữ liệu đó trong một tệp riêng biệt. Tuy nhiên, một số trình hiển thị túi, ví dụ: Cơ sở dữ liệu túi , yêu cầu siêu dữ liệu được tích hợp vào các tệp túi.
Để ghi siêu dữ liệu ngay vào tệp túi ROS1, bạn có thể sử dụng gói rosbag_metadata . Ngay lập tức, nó lưu nhận xét của bạn cùng với dữ liệu hệ thống, chẳng hạn như phiên bản gói ROS, thông tin về kho git và hàm băm git-commit, biến môi trường, cấu hình mạng. Tất cả những dữ liệu này được thêm dưới dạng văn bản trong tệp YAML vào chủ đề /metadata.
Bạn có thể sử dụng rosbag_metadata nguyên trạng hoặc phục vụ nó để phục vụ các nhu cầu sản phẩm đặc biệt của bạn. Ví dụ: đối với dịch vụ hậu cần của Evocargo, chúng tôi cần có sẵn thông tin cụ thể hơn như kiểu xe và số hiệu, thông tin hiệu chuẩn thô và bản đồ. Do đó, chúng tôi đã tạo gói của riêng mình dựa trên rosbag_metadata , phù hợp hơn với việc quản lý phương tiện tự hành. Và chúng ta có thể dễ dàng thêm nhiều trường hơn khi cần.
Phát lại và trực quan hóa
Một trong những tùy chọn cho ROS 1 sẽ là Webviz , một công cụ web trực quan hóa và phát lại túi được phát triển và mã nguồn mở bởi các kỹ sư của Cruise . Nó cho phép bạn kéo và thả các tệp túi ROS để có được cái nhìn sâu sắc trực quan về dữ liệu. Đơn giản vậy thôi! Hơn nữa, đây là một ứng dụng web, vì vậy bạn không phải triển khai bất kỳ môi trường đặc biệt nào.
Giao diện của nó có thể tùy chỉnh cho phép bạn thêm bảng điều khiển và xem thêm dữ liệu liên quan ở một nơi. Hơn nữa, bạn có thể tích hợp nó với các công cụ khác — ví dụ: bạn có thể mở Webviz ngay từ cửa sổ Cơ sở dữ liệu túi . (Thiết lập này được mô tả ở đây ).
Một công cụ khác mà tôi muốn đề cập ở đây là Foxglove Studio . Nó có cùng mục đích trực quan hóa và phân tích trong chế tạo người máy, nhưng nó còn đi xa hơn bằng cách hỗ trợ cả ROS 1 và ROS 2 và cung cấp hỗ trợ thương mại. Nó bắt đầu như một nhánh của dự án Webviz của Cruise và hiện đang được tích cực phát triển và mở rộng bộ tính năng của nó. Nó có sẵn dưới dạng ứng dụng web đa nền tảng và dưới dạng ứng dụng dành cho máy tính để bàn mở ra nhiều tính năng hơn và tiện ích mở rộng bảng điều khiển tùy chỉnh trên các thiết bị Linux, macOS và Windows.
Bạn có thể đọc thêm về quá trình phát triển và cập nhật của Foxglove Studio trên blog của họ trên Medium hoặc truy cập trang web của họ .
chỉnh sửa túi
Nếu bạn muốn chỉnh sửa tệp túi trong ROS 1, hãy xem rosbag_editor của Davide Faconti . Công cụ này không cho phép bạn áp dụng các thay đổi hàng loạt đối với tệp túi, nhưng nó có thể hữu ích để chỉnh sửa một số túi nhất định, chẳng hạn như để trình diễn. Giao diện người dùng đơn giản của nó cho phép bạn đổi tên và xóa chủ đề theo cách thủ công, thay đổi thời lượng của túi bằng cách cắt phần đầu hoặc phần cuối của tệp, thay đổi kiểu nén để làm cho kích thước tệp nhỏ hơn và xóa các phép biến đổi.
Tại Evocargo, chúng tôi cần một công cụ cho phép chỉnh sửa hàng loạt túi được ghi lại trong ROS1, vì vậy kỹ sư Vladimir Burmistrov của chúng tôi đã tạo gói ros_bag_migration . Nó cho phép bạn thay đổi định dạng của tin nhắn trong các túi đã ghi — không chỉ đổi tên và xóa tin nhắn mà còn chia tin nhắn thành hai và áp dụng các quy tắc đã xác định cho các phiên bản tin nhắn nhất định. Gói này hoạt động hoàn hảo cho các tình huống khi bạn quyết định ghi lại các túi mới với một bộ định nghĩa thông báo được cập nhật và bạn muốn thay đổi các túi cũ hơn cho phù hợp.
Xây dựng đồ thị
Tiếp theo, chúng ta sẽ nói về PlotJuggler , một trình tạo đồ thị đáng kinh ngạc (một gói khác của Davide Faconti ). PlotJuggler cho phép bạn phân tích bất kỳ dữ liệu nào chảy bên trong hệ thống hoặc robot của bạn. Gỡ lỗi trở nên dễ dàng hơn nhiều nhờ các tính năng của nó:
- Bạn có thể tạo biểu đồ cho dữ liệu trong các chủ đề ROS trong thời gian thực hoặc thông qua việc tải một hoặc một số tệp .bag vào PlotJuggler .
- Việc thêm và quản lý nhiều ô dữ liệu rất thân thiện với người dùng. Ví dụ: bạn có thể tạo tab XY bằng cách lấy một số dữ liệu 2D và vẽ đồ thị để trực quan hóa các vị trí 2D cho mỗi dấu thời gian.
- Có rất nhiều cơ hội chuyển đổi dữ liệu tích hợp cho các biểu đồ, ví dụ: bạn có thể loại bỏ phần bù cho dữ liệu, chia tỷ lệ, tích hợp dữ liệu, loại bỏ các giá trị ngoại lệ, v.v. Bạn thậm chí có thể tạo các tổ hợp biến đổi, điều này rất hữu ích để so sánh dữ liệu từ các nguồn khác nhau.
- Nếu chưa tìm được hàm biến đổi phù hợp, bạn có thể tạo hàm biến đổi của riêng mình. Ví dụ: bạn có thể viết một hàm để trích xuất và trực quan hóa góc Yaw từ các bậc bốn.
- Cuối cùng nhưng không kém phần quan trọng! Tính năng tuyệt vời: khi bạn đang xử lý các túi, bạn có thể bật “Nhà xuất bản lại chủ đề ROS”. Điều đó có nghĩa là bạn có thể kéo thanh trượt thời gian vào bất kỳ thời điểm nào bạn muốn và PlotJuggler sẽ xuất bản dữ liệu từ tất cả các chủ đề tương ứng với dấu thời gian đã chọn. Điều này rất hữu ích khi bạn muốn xem hình ảnh từ camera trong một thời điểm cụ thể, kiểm tra thông báo chẩn đoán hoặc thậm chí trực quan hóa mọi phần dữ liệu trong một số công cụ trực quan hóa khác như RVIZ.
gửi tin nhắn
Đối với mục đích thử nghiệm và gỡ lỗi, điều quan trọng là kết quả thử nghiệm của bạn được sao chép ổn định. Ví dụ: khi bạn kiểm tra thuật toán bản địa hóa trên một chiếc túi chứa dữ liệu cảm biến nhất định, chắc chắn bạn sẽ mong đợi kết quả giống nhau mỗi khi chạy thuật toán này. Tuy nhiên, logic xuất bản-đăng ký trong ROS không thể đảm bảo gửi 100% tin nhắn và có khả năng các nút của bạn sẽ không xử lý tất cả các tin nhắn trong một túi theo cùng một thứ tự.
Gói batch_ros cho ROS 1 cho phép bạn chỉ định các chủ đề quan trọng trong nhiệm vụ của bạn trong tệp túi. batch_ros sẽ chờ cuộc gọi dịch vụ đồng bộ hóa sau khi xuất bản từng thông báo từ các chủ đề này. Nó đảm bảo rằng các tin nhắn từ tệp túi sẽ được xuất bản sau khi nút của bạn xử lý từng tin nhắn một theo thứ tự đã xác định.
Do đó , batch_ros đảm bảo quá trình xử lý túi có tính xác định và lặp lại.
trạng thái ghi âm
Trong khi một túi đang được ghi, cấu hình ROS 1 mặc định chỉ hiển thị thông báo “Đang ghi…”. Nếu có bất cứ điều gì sai trái, bạn chỉ phát hiện ra nó khi nhiệm vụ hoàn thành và thất bại. Để làm cho quá trình ghi nhiều thông tin hơn, hãy thử giao diện đầu cuối rosbag_fancy cho ROS 1. Giao diện này hiển thị dữ liệu hữu ích trong thời gian thực, chẳng hạn như các chủ đề đang được ghi, mức sử dụng bộ nhớ, kích thước tệp túi, v.v. — tất cả trong một bảng siêu đơn giản.
Bạn cũng có thể xem số lượng thư bị hủy ( Drops ) dẫn chúng ta đến vấn đề tiếp theo và giải pháp khả thi.
Cảm ơn bạn đã đọc đến đây — chắc hẳn bạn cũng muốn cải thiện trải nghiệm của mình với ROS nhiều như chúng tôi! Hãy tổng hợp lại. Trong bài đăng này, chúng tôi đã xem xét các gói ROS sau: Bag Database , rosbag_metadata , Webviz , Foxglove Studio , rosbag_editor , ros_bag_migration , PlotJuggler , rosbag_fancy và batch_ros .
Nếu bạn thấy lựa chọn các gói này hữu ích, hãy cho chúng tôi biết bằng cách vỗ tay và bình luận. Chúng tôi rất sẵn lòng chia sẻ thêm những tổng quan như vậy trong blog của mình, chẳng hạn như có các gói ROS đáng chú ý để thử nghiệm, mô phỏng, tài liệu và các mục đích khác.