[PYTHON] ROS-Kurs 107 Machen Sie einen Kunden für Rosblidge

Umgebung

Dieser Artikel funktioniert in der folgenden Umgebung.

Artikel Wert
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic
Gazebo 7.0.0
python 2.7.12

Informationen zur Installation 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

Ich habe ein Beispiel für das Einrichten von rosbridge_server in vorherige und den Zugriff über Javascript des Browsers vorgestellt. Verwenden Sie dieses Mal "roslibpy", um einen Client in Python zu erstellen, der eine Verbindung zu rosbridge_server herstellt.

Installation

Pip Problem

Dieses Mal werden wir pip verwenden, um roslibpy zu installieren. Das Problem mit pip (und nicht mit Python) ist, dass verschiedene Verzeichnisse installiert werden müssen und das Mischen ziemlich ärgerlich sein kann. Zum Beispiel

Dies macht die Umgebung schmutzig und verursacht einen Fehler in pip, wenn der folgende Befehl ausgeführt wird

Ich erhalte danach eine Fehlermeldung


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

Es gibt viele Probleme bei der gemeinsamen Verwendung von apt und pip. Daher ist es besser, ohne apt zu installieren. Wenn Sie die oben genannten Schritte ausgeführt haben, können Sie alle Pips mit dem folgenden Befehl deinstallieren.

Pip deinstallieren


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

Befehl zum Ausführen

Sie können roslibpy installieren, indem Sie Folgendes ausführen.

Installieren Sie roslibpy


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

Quellcode

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()

Lauf

Führen Sie sim aus


roslaunch web_lecture web_if.launch 

Führen Sie den roslibpy-Client aus


roscd web_lecture/scripts && rospy_client.py`Sie können es mit tun.

web_client.gif

Anwendungsfall

rosbridge ist ein Tool für den Zugriff auf ros von einem System aus, auf dem ros ursprünglich nicht installiert war. Wenn Sie jedoch dieses lose gekoppelte System verwenden, können Sie auch ein Multi-Master-System erstellen, wie in der folgenden Abbildung dargestellt. rosbridge_connection.png

Referenz

Roslibpy-Beispiel Details zur Implementierung

Link zur Tabellenseite

Link zum Inhaltsverzeichnis des ROS-Kurses

Recommended Posts

ROS-Kurs 107 Machen Sie einen Kunden für Rosblidge
Machen Sie eine Tweet-Box für Pepper
Erstellen einer Conda-Umgebung für ROS-Benutzer
Erstellen Sie ein Schachbrettmuster für die Kamerakalibrierung
Lassen Sie uns ein Backend-Plug-In für Errbot erstellen
Erstellen Sie einen Bot für Skype unter EC2 (CentOS)
Machen Sie vorerst ein Histogramm (matplotlib)
Machen Sie für VB6.
Lassen Sie uns mit SWIG ein Modul für Python erstellen
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Lass uns ein Squashspiel machen
Machen Sie einen Funktionsdekorateur
Erstellen Sie eine Distanzmatrix
Ich mache ein Passwort!
Machen Sie einen Nyan-Knopf
Mach ein Spiel im Tetris-Stil!
Erstellen Sie einen Base64-Decoder
Erstellen Sie eine IP-Adresszuweisung / Zuweisungsliste für einen bestimmten Bereich
Experimentieren Sie mit Python, um ein PDF für Selbstversorger für Kindle zu erstellen
Wie erstelle ich ein Python-Paket (geschrieben für Praktikanten)