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.
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.
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
/ usr / local / lib / python2.7 /
)
Quand vous obtenez pip avec apt ・ Quand vous obtenez avec sudo pip
~ / .local / lib / python2.7 /
)
Lorsqu'il est entré avec pip --user
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
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
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)
.self.ros_client.is_connected
.self.ros_client.connect ()
même s'il est cassé.Message ()
et publiez-le avec self.publisher.publish ()
.self.listener.subscribe (self.callback)
. Vous pouvez passer le message reçu comme argument de la fonction de rappel et y accéder en tant que x = message [" pose "] [" pose "] [" position "] [" x "]
.self.ros_client.on_ready (self.start_thread, run_in_thread = True)
.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.
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.
Exemple Roslibpy Détails sur la mise en œuvre
Lien vers la table des matières du cours ROS
Recommended Posts