Cours ROS 107 Créer un client pour rosblidge

environnement

Cet article fonctionne dans l'environnement suivant.

article valeur
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic
Gazebo 7.0.0
python 2.7.12

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 au Référentiel git du cours 11 ROS.

Aperçu

J'ai présenté un exemple de configuration de rosbridge_server dans précédent et d'y accéder à partir de javascript du navigateur. Cette fois, utilisez roslibpy pour créer un client en python qui se connecte à rosbridge_server.

Installation

problème de pip

Cette fois, nous utiliserons pip pour installer roslibpy. Le problème avec pip (plutôt qu'avec python) est qu'il y a différents répertoires à installer, et les mélanger peut être assez ennuyeux. Par exemple

Cela rend l'environnement sale et provoque une erreur dans pip lors de l'exécution de la commande suivante

J'obtiens une erreur après avoir fait cela


sudo apt install python-pip
pip install --upgrade pip

L'utilisation conjointe d'apt et de pip pose de nombreux problèmes, il est donc préférable d'installer sans utiliser apt. Si vous avez fait ce qui précède, vous pouvez désinstaller tous les pips avec la commande suivante.

Désinstaller pip


sudo python -m pip uninstall pip
sudo apt autoremove python-pip

Commande à exécuter

Vous pouvez installer roslibpy en exécutant ce qui suit.

Installez roslibpy


curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python
sudo pip install roslibpy
sudo pip install service_identity

Code source

web_lecture/scripts/rosbridge_client.py


#!/usr/bin/env python
# -*- coding:utf8 -*-
import time
from roslibpy import Message, Ros, Topic
import time

class rosbridge_client:
    def __init__(self):
        self.ros_client = Ros('127.0.0.1', 9090)
        print("wait for server")
        self.publisher = Topic(self.ros_client, '/cmd_vel', 'geometry_msgs/Twist')
        self.listener = Topic(self.ros_client, '/odom', 'nav_msgs/Odometry')
        self.listener.subscribe(self.callback)

        self.ros_client.on_ready(self.start_thread, run_in_thread=True)
        self.ros_client.run_forever()

    def callback(self, message):
        x = message["pose"]["pose"]["position"]["x"]
        y = message["pose"]["pose"]["position"]["y"]
        print(x, y)

    def start_thread(self):
        while True:
            if self.ros_client.is_connected:
                self.publisher.publish(Message({
                    'linear': {
                        'x': 0.5,
                        'y': 0,
                        'z': 0
                    },
                    'angular': {
                        'x': 0,
                        'y': 0,
                        'z': 0.5
                    }
                }))
            else:
                print("Disconnect")
                break
            time.sleep(1.0)

if __name__ == '__main__':
    rosbridge_client()

Courir

Exécuter sim


roslaunch web_lecture web_if.launch 

Exécutez le client roslibpy


roscd web_lecture/scripts && rospy_client.py`Vous pouvez le faire avec.

web_client.gif

Cas d'utilisation

rosbridge est un outil pour accéder à ros depuis un système sur lequel ros n'est pas installé à l'origine. Cependant, si vous utilisez ce système faiblement couplé, vous pouvez également créer un système multimaître comme indiqué dans la figure ci-dessous. rosbridge_connection.png

référence

Exemple Roslibpy Détails sur la mise en œuvre

Lien vers la page du tableau

Lien vers la table des matières du cours ROS

Recommended Posts

Cours ROS 107 Créer un client pour rosblidge
Créer une boîte à Tweet pour Pepper
Construire un environnement conda pour les utilisateurs de ROS
Créez un modèle d'échiquier pour l'étalonnage de la caméra
Faisons un plug-in backend pour Errbot
Créer un bot pour Skype sur EC2 (CentOS)
Faire un histogramme pour le moment (matplotlib)
Faites pour VB6.
Faisons un module pour Python en utilisant SWIG
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Faisons un jeu de squash
Faire un décorateur de fonction
Faire une matrice de distance
Je vais créer un mot de passe!
Créer un bouton Nyan
Créez un jeu à la Tetris!
Créer un décodeur Base64
Faire une liste d'allocation / allocation d'adresses IP pour une certaine zone
Expérimentez pour créer un PDF indépendant pour Kindle avec Python
Comment créer un package Python (écrit pour un stagiaire)