ROS Adventskalender 2019 Dies ist der Artikel am 23. Tag.
Bis zur EOL von Python2 sind nur noch 8 Tage übrig, aber sind Sie alle mit Python3 fertig?
Dieses Mal habe ich versucht, es möglich zu machen, rospy
von ROS1 mit virtualenv
von Python3 auszuführen, daher möchte ich es vorstellen.
Für die Verwendung des offiziellen ROS1 "rospy" gelten die folgenden Umwelteinschränkungen.
das ist
a. Ich möchte ROS1 mit einem Python-Projekt (Python3) koexistieren lassen, das einen vorhandenen pip
verwendet.
b. Ich möchte für einen Moment rospy
unter MacOS ausprobieren
Dies ist in solchen Fällen unpraktisch.
Es gibt auch roslibpy als Lösung, aber da rosbridge einmal die Kommunikation mit dem Websocket überbrückt, Es erfordert viel Kommunikationsaufwand. Daher wird der ROS-Code für "rospy" nur in Python geschrieben, und indem PyPI (Python Package Index) vorbereitet wird, mit dem "rospy" auch in Python3 als reines Python-Paket installiert werden kann Ich habe versucht, Rospy zu verwenden.
Wir haben in der folgenden Umgebung bestätigt.
Hier ist ein Beispiel für die Verwendung von "virtualenv". Es ist keine ROS-Installation erforderlich.
(Grundsätzlich das gleiche für pipenv
etc.)
virtualenv -p python3 venv
. ./venv/bin/activate
pip install --extra-index-url https://rospypi.github.io/simple rospy-all
Wenn Sie TF2 oder cv_bridge verwenden möchten, fügen Sie weitere hinzu
pip install --extra-index-url https://rospypi.github.io/simple cv_bridge tf2_ros
Du kannst es schaffen.
Bereiten Sie das folgende Beispiel vor
talker.py
import rospy
import std_msgs.msg
rospy.init_node("talker")
pub = rospy.Publisher("chat", std_msgs.msg.String, queue_size=1)
rate = rospy.Rate(2)
while not rospy.is_shutdown():
pub.publish("hello")
rate.sleep()
listner.py
import rospy
import std_msgs.msg
def callback(msg):
print(msg.data)
rospy.init_node("listener")
rospy.Subscriber("chat", std_msgs.msg.String, callback)
rospy.spin()
Installieren Sie zusätzlichen rosmaster
pip install --extra-index-url https://rospypi.github.io/simple rosmaster defusedxml
Von jedem der drei Terminals
Starten Sie zuerst rosmaster.
. ./venv/bin/activate
rosmaster --rcore
Starten Sie als Nächstes den Sprecherknoten.
. ./venv/bin/activate
export ROS_MASTER_URI=http://localhost:11311
python talker.py
Starten Sie abschließend den Listener-Knoten.
. ./venv/bin/activate
export ROS_MASTER_URI=http://localhost:11311
python listener.py
Wenn Sie das Thema Subscirbe im letzten Listener-Knoten für Folgendes sehen können, ist es erfolgreich.
$ python listener.py
WARNING: cannot load logging configuration file, logging is disabled
hello
hello
hello
hello
hello
Jetzt können Sie ROS-Knoten nur in Python 3 schreiben, ohne ROS zu installieren. Es wurde bestätigt, dass das Gleiche mit MacOS möglich ist.
Ich mache so etwas.
Das PyPI, das ich dieses Mal vorbereitet habe, wurde als persönliches Hobby erstellt, und ich weiß nicht, wie viel es unterstützen kann, aber ich denke, es ist bequem für eine Weile zu verwenden, also probieren Sie es bitte aus. https://github.com/rospypi/simple
Ich möchte es offiziell veröffentlichen können ...
Let's enjoy robot programming!
Recommended Posts