[PYTHON] Cours ROS 108 Utilisation de la base de données (mongo) avec ROS

environnement

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.

Aperçu

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.

configuration de mongodb

mongodb a une structure de base de données-> collection-> document.

Installation

mongodb_installation en magasin


sudo apt install ros-kinetic-mongodb-store

Essayez d'écrire avec mongodb_store

Exécuter DataBase

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

Exécution du nœud d'écriture

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

Exécution du nœud d'écriture


rosrun web_lecture mongo_pose_write.py

Exécuter le nœud de lecture

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

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

Lire des données avec mongo

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.

commentaire

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.

référence

mongodb_store

Lien vers la page du tableau

Lien vers la table des matières du cours ROS

Recommended Posts

Cours ROS 108 Utilisation de la base de données (mongo) avec ROS
Conférence ROS 113 Effectuer des tâches avec smach
J'ai essayé d'utiliser la base de données (sqlite3) avec kivy
Correction de la base de données avec pytest-docker
Rechercher une base de données avec db.py
ROS sécurisé avec AppArmor
Touchez NoSQL avec Python à l'aide d'Oracle NoSQL Database Cloud Simulator
Utilisation de X11 avec ubuntu18.04 (langage C)
Lors de l'utilisation d'optparse avec iPython
Utilisation de Graphviz avec Jupyter Notebook
[S3] CRUD avec S3 utilisant Python [Python]
Messagerie avec AMQP à l'aide de kombu
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
Essayez d'utiliser matplotlib avec PyCharm
[Python] Utilisation d'OpenCV avec Python (basique)
Utiliser une imprimante avec Debian 10
Cours ROS 105 Fonctionnement toio avec ROS
Essayez d'utiliser le folium avec anaconda
Utiliser OpenCV avec Python @Mac
Envoyer en utilisant Python avec Gmail
ROS Lecture 114 DataBase gère les images et y accède à partir d'un navigateur