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.
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.
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
/ usr / local / lib / python2.7 /
)
Wenn Sie Pip mit apt bekommen ・ Wenn Sie es mit sudo pip
bekommen~ / .local / lib / python2.7 /
)
Bei Eingabe mit pip --user
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
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
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()
self.ros_client = Ros ('127.0.0.1', 9090)
her.self.ros_client.is_connected
mit rosbridge_server verbunden sind.self.listener.subscribe (self.callback)
. Sie können die empfangene Nachricht als Argument der Rückruffunktion übergeben und als "x = Nachricht [" Pose "] [" Pose "] [" Position "] [" x "]" darauf zugreifen.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.
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.
Roslibpy-Beispiel Details zur Implementierung
Link zum Inhaltsverzeichnis des ROS-Kurses
Recommended Posts