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.
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.
mongodb hat die struktur datenbank-> sammlung-> dokument
.
mongodb_Installation speichern
sudo apt install ros-kinetic-mongodb-store
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
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
msg_store.insert_named (" named_pose ", p)
.Schreibknotenausführung
rosrun web_lecture mongo_pose_write.py
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
Sie können die Datenbank auch direkt anstelle der ROS-Schnittstelle lesen.
Durch Aufrufen des Befehls "Mongo" werden Sie mit der Mongo-Konsole verbunden.
show dbs
sehen.use {Datenbankname}
.db. {Sammlungsname} .find ()
sehen.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
.
Link zum Inhaltsverzeichnis des ROS-Kurses
Recommended Posts