Calendrier de l'Avent ROS 2019 C'est l'article du 23e jour.
Il ne reste que 8 jours avant la fin de Python2, mais avez-vous tous fini avec Python3?
Cette fois, j'ai essayé de rendre possible l'exécution de rospy
de ROS1 avec virtualenv
de Python3, donc je voudrais le présenter.
Afin d'utiliser le ROS1 «rospy» officiel, il existe les restrictions environnementales suivantes.
c'est
Je veux faire coexister ROS1 avec un projet Python (Python3) qui utilise un pip
existant.
b. Je veux essayer rospy
sur MacOS pendant un moment
Ce n'est pas pratique dans de tels cas.
Il existe également roslibpy comme solution, mais puisque rosbridge fait le pont entre la communication avec websocket, Cela prend beaucoup de temps de communication. Par conséquent, le code ROS lié à rospy
est écrit uniquement en Python, et en préparant PyPI (Python Package Index) qui peut installer rospy
comme un package Python pur, même en Python3 J'ai essayé d'utiliser rospy
.
Nous avons confirmé dans l'environnement suivant.
Voici un exemple d'utilisation de virtualenv
. Aucune installation ROS n'est requise.
(Fondamentalement, la même chose pour pipenv
etc.)
virtualenv -p python3 venv
. ./venv/bin/activate
pip install --extra-index-url https://rospypi.github.io/simple rospy-all
Si vous souhaitez utiliser TF2 ou cv_bridge, ajoutez plus
pip install --extra-index-url https://rospypi.github.io/simple cv_bridge tf2_ros
Tu peux le faire.
Préparez l'échantillon suivant
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()
Installer un rosmaster supplémentaire
pip install --extra-index-url https://rospypi.github.io/simple rosmaster defusedxml
De chacun des trois terminaux
Commencez par démarrer rosmaster.
. ./venv/bin/activate
rosmaster --rcore
Ensuite, démarrez le nœud de locuteur.
. ./venv/bin/activate
export ROS_MASTER_URI=http://localhost:11311
python talker.py
Enfin, démarrez le nœud d'écoute.
. ./venv/bin/activate
export ROS_MASTER_URI=http://localhost:11311
python listener.py
Si vous pouvez voir la rubrique Subscirbe dans le dernier nœud d'écoute pour ce qui suit, cela réussit.
$ python listener.py
WARNING: cannot load logging configuration file, logging is disabled
hello
hello
hello
hello
hello
Vous pouvez désormais écrire des nœuds ROS uniquement dans Python 3 sans installer ROS. Il a été confirmé que la même chose peut être faite avec MacOS.
Je fais quelque chose comme ça.
Le PyPI que j'ai préparé cette fois a été conçu comme un passe-temps personnel, et je ne sais pas à quel point il peut supporter, mais je pense qu'il est pratique à utiliser pendant un certain temps, alors essayez-le. https://github.com/rospypi/simple
Je veux pouvoir le publier officiellement ...
Let's enjoy robot programming!
Recommended Posts