[PYTHON]

CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic
python 2.7.12
mongodb 2.6.10

Umgebung Dieser Artikel wird in der folgenden Umgebung ausgeführt. Informationen zur Installation von Artikelwerten finden Sie unter ROS-Kurs 02-Installation. Das Programm in diesem Artikel wurde ebenfalls auf github hochgeladen. Weitere Informationen finden Sie im ROS Lecture 11 git Repository.

Überblick

In ROS werden Informationen im Grunde genommen in rosbag gespeichert, aber dies ist eine debugprotokollartige Sache, auf die Menschen später zurückblicken, und datenbankähnliche Daten, die zur Laufzeit wiederverwendet werden sollen, werden von jedem Knoten gespeichert oder eine Datei wird von selbst geschrieben. Es bleibt nichts anderes übrig, als zu lesen. Was hier herauskommt, ist DataBase, und ROS veröffentlicht ein Paket namens mongodb, das eine Verbindung zu DataBase herstellt.

Konfiguration von Mongodb

mongodb hat die struktur datenbank-> sammlung-> dokument.

Installation

mongodb_Installation speichern


sudo apt install ros-kinetic-mongodb-store

Versuchen Sie, mit mongodb_store zu schreiben

Führen Sie die Datenbank aus

Legen Sie das Verzeichnis fest, in dem die Datenbankdateien beim Start abgelegt werden sollen. Erstellen Sie ein leeres Verzeichnis. Die Angabe eines nicht vorhandenen Verzeichnisses führt zu einem Fehler.

mongodb_Laden ausführen


mkdir /tmp/test_db
roslaunch mongodb_store mongodb_store.launch db_path:=/tmp/test_db port:=27017

Schreibknotenausführung

web_lecture/scripts/mongo_pose_write.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
from mongodb_store.message_store import MessageStoreProxy
from geometry_msgs.msg import Pose, Point, Quaternion

if __name__ == '__main__':
    rospy.init_node("mongo_pose_write")

    msg_store = MessageStoreProxy(database="srs", collection="pose1")
    p = Pose(Point(0, 1, 2), Quaternion(0, 0, 0, 1))

    try:
        p_id = msg_store.insert_named("named_pose", p)
        p_id = msg_store.insert(p)

    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

Schreibknotenausführung


rosrun web_lecture mongo_pose_write.py

Führen Sie den Leseknoten aus

web_lecture/scripts/mongo_pose_read.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
import mongodb_store_msgs.srv as dc_srv
import mongodb_store.util as dc_util
from mongodb_store.message_store import MessageStoreProxy
from geometry_msgs.msg import Pose, Point, Quaternion
import StringIO

if __name__ == '__main__':
    rospy.init_node("mongo_pose_write")

    msg_store = MessageStoreProxy(database="srs", collection="pose1")

    try:
        for item in msg_store.query(Pose._type):
            print item[0].position

    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

Führen Sie den Leseknoten aus


rosrun web_lecture mongo_pose_read.py 

Ausführungsergebnis


x: 0.0
y: 1.0
z: 2.0
x: 0.0
y: 1.0
z: 2.0

Lesen Sie Daten mit Mongo

Sie können die Datenbank auch direkt anstelle der ROS-Schnittstelle lesen.

Durch Aufrufen des Befehls "Mongo" werden Sie mit der Mongo-Konsole verbunden.

Kommentar

Wenn mongodb bereits hinter den Kulissen läuft, wird port27017 unterdrückt, sodass Roslaunch zu einem Fehler führt. Mal sehen, ob der Dienst mit systemctl status mongodb.service gestartet wird. Wenn es aktiv ist, stoppen Sie es mit sudo systemctl disable mongodb.service && sudo systemctl stop mongodb.service.

Referenz

mongodb_store

Link zur Tabellenseite

Link zum Inhaltsverzeichnis des ROS-Kurses

Recommended Posts