Cet article fonctionne dans l'environnement suivant.
article | valeur |
---|---|
CPU | Core i5-8250U |
Ubuntu | 16.04 |
ROS | Kinetic |
python | 2.7.12 |
mongodb | 2.6.10 |
Pour l'installation, reportez-vous à ROS Course 02 Installation. Le programme de cet article a également été téléchargé sur github. Veuillez vous référer à ROS Lecture 11 git Repository.
Dans ROS, les informations sont essentiellement stockées dans rosbag, mais il s'agit d'une chose semblable à un journal de débogage que les humains regardent plus tard, et les données de type base de données à réutiliser lors de l'exécution sont enregistrées par chaque nœud ou un fichier est écrit par lui-même. Il n'y a pas d'autre choix que de lire. Ce qui sort ici est DataBase, et ROS publie un package appelé mongodb qui se connecte à DataBase.
mongodb a une structure de base de données-> collection-> document
.
mongodb_installation en magasin
sudo apt install ros-kinetic-mongodb-store
Décidez du répertoire dans lequel les fichiers de base de données seront placés au démarrage. Créez un répertoire vide. La spécification d'un répertoire qui n'existe pas entraînera une erreur.
mongodb_Exécuter le magasin
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
MessageStoreProxy (database =" srs ", collection =" pose1 ")
. Spécifiez ici le nom de la base de données et le nom de la collection.msg_store.insert_named (" named_pose ", p)
.Exécution du nœud d'écriture
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
msg_store.query (Pose._type)
pour extraire les données de type de pose de la base de données. Vous pouvez également saisir une requête détaillée.Exécuter le nœud de lecture
rosrun web_lecture mongo_pose_read.py
Résultat d'exécution
x: 0.0
y: 1.0
z: 2.0
x: 0.0
y: 1.0
z: 2.0
Vous pouvez également lire la base de données directement au lieu de l'interface ROS.
L'appel de la commande mongo
vous connectera à la console mongo.
show dbs
.show collections
.db. {Nom de la collection} .find ()
.Si mongodb fonctionne déjà dans les coulisses, le port27017 est supprimé, donc roslaunch entraînera une erreur.
Voyons si le service est démarré avec systemctl status mongodb.service
. S'il est activé, arrêtez-le avec sudo systemctl disable mongodb.service && sudo systemctl stop mongodb.service
.
Lien vers la table des matières du cours ROS
Recommended Posts