Bisakah saya menggunakan python di ros?

Saat mengerjakan paket ROS untuk Anki Vector saya tidak punya pilihan selain menggunakan Python 3. 6 karena Python SDK Anki dibuat khusus untuk versi itu. Melakukan hal itu saya menemukan bahwa menyiapkan ROS dengan Python 3 bukanlah tugas yang sepele. Ini juga tidak terlalu rumit, tetapi tidak ada panduan tunggal yang mengatakan dengan tepat bagaimana melakukannya dengan benar - jadi saya memutuskan untuk menulisnya. Panduan ini ditulis untuk ROS Melodic tetapi banyak juga yang berlaku untuk Kinetic

Jika Anda baru mulai membuat paket Python 3 dan ingin memastikan bahwa Anda telah memperbaiki semua masalah yang akan kita diskusikan sebelumnya, Anda dapat menggunakan Paket ROS kecil yang saya tulis untuk memperbanyaknya dan melihat

Juga— ROS berfungsi paling baik dengan Python 2 (seperti yang mungkin Anda ketahui jika Anda membaca ini), ROS2, di sisi lain, dibangun dengan mempertimbangkan Python 3. Jadi, jika Anda tidak memerlukan ROS(1) secara khusus tetapi hanya tertarik untuk mengembangkan ROS menggunakan Python 3, Anda harus mempertimbangkan untuk pindah ke ROS2. Jika tidak, ikuti langkah-langkah ini

1. Pengaturan Dasar

  • Setelah Anda mencoba menjalankan beberapa skrip dengan python 3 shebang line(#. /usr/bin/env python3) Anda akan mendapatkan kesalahan teriakan berikut tentang beberapa perpustakaan yaml yang hilang
Traceback (most recent call last):
File "/catkin_ws/src/ros_python3_issues/src/issue_yaml.py", line 3, in <module>
import rospy
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/__init__.py", line 47, in <module>
from std_msgs.msg import Header
File "/opt/ros/melodic/lib/python2.7/dist-packages/std_msgs/msg/__init__.py", line 1, in <module>
from ._Bool import *
File "/opt/ros/melodic/lib/python2.7/dist-packages/std_msgs/msg/_Bool.py", line 5, in <module>
import genpy
File "/opt/ros/melodic/lib/python2.7/dist-packages/genpy/__init__.py", line 34, in <module>
from . message import Message, SerializationError, DeserializationError, MessageException, struct_I
File "/opt/ros/melodic/lib/python2.7/dist-packages/genpy/message.py", line 44, in <module>
import yaml
ModuleNotFoundError: No module named 'yaml'
  • Jangan khawatir, buka bash dan instal pustaka yang hilang berikut
sudo apt-get install python3-pip python3-yaml
sudo pip3 install rospkg catkin_pkg
_
  • Dan itu dia. sekarang coba jalankan skrip Anda lagi ...

2. Masalah cv_bridge

  • Jika Anda akan mencoba menggunakan cv_bridge untuk OpenCV, kemungkinan besar Anda akan mendapatkan pengecualian berikut
Traceback (most recent call last):
File "/catkin_ws/src/ros_python3_issues/src/issue_cv_bridge.py", line 23, in <module>
ros_image = bridge.cv2_to_imgmsg(numpy.asarray(empty_image), encoding="rgb8") # convert PIL image to ROS image
File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 259, in cv2_to_imgmsg
if self.cvtype_to_name[self.encoding_to_cvtype2(encoding)] != cv_type:
File "/opt/ros/melodic/lib/python2.7/dist-packages/cv_bridge/core.py", line 91, in encoding_to_cvtype2
from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
  • Masalahnya adalah cv_bridge dibuat hanya untuk python 2. 7 jadi juru bahasa python 3 kami mencoba menggunakan cv_bridge untuk 2. 7 dan gagal, mari buat untuk Python 3
  • Pertama, mari instal beberapa alat yang kita perlukan untuk proses pembuatan
sudo apt-get install python-catkin-tools python3-dev python3-numpy
  • Sekarang, buat catkin_build_ws baru untuk menghindari masalah di masa mendatang dengan catkin_make (dengan asumsi Anda menggunakannya) dan konfigurasikan catkin untuk menggunakan python 3(3. 6 dalam kasus saya) saat membuat paket
mkdir ~/catkin_build_ws && cd ~/catkin_build_ws
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
catkin config --install
_
  • mengkloning repo vision_opencv resmi
mkdir src
cd src
git clone -b melodic https://github.com/ros-perception/vision_opencv.git
  • terakhir, mari membangun dan sumber paketnya
cd ~/catkin_build_ws
catkin build cv_bridge
source install/setup.bash --extend
_
  • Itu dia. sekarang Anda dapat menggunakan cv_bridge dari Python 3

3. Masalah rostest

.. logging to /root/.ros/log/rostest-477a6ee2f64d-4170.log
[ROSUNIT] Outputting test results to /root/.ros/test_results/ros_python3_issues/rostest-test_test_issue_rosunit.xml
Traceback (most recent call last):
File "/catkin_ws/src/ros_python3_issues/test/issue_rosunit.py", line 18, in <module>
rostest.rosrun('ros_python3_issues', 'issue_rosunit', TestROSUnitIssue)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rostest/__init__.py", line 146, in rosrun
result = rosunit.create_xml_runner(package, test_name, result_file).run(suite)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rosunit/xmlrunner.py", line 275, in run
result.print_report(stream, time_taken, out_s, err_s)
File "/opt/ros/melodic/lib/python2.7/dist-packages/rosunit/xmlrunner.py", line 202, in print_report
stream.write(ET.tostring(self.xml(time_taken, out, err).getroot(), encoding='utf-8', method='xml'))
TypeError: write() argument must be str, not bytes
[Testcase: testissue_rosunit] .. ok
[ROSTEST]-----------------------------------------------------------------------SUMMARY
* RESULT: SUCCESS
* TESTS: 0
* ERRORS: 0
* FAILURES: 0
  • Masalah ini sebenarnya sudah dipecahkan tetapi untuk beberapa alasan, itu belum tersedia di repositori apt jadi kami hanya akan menginstalnya dari sumber
cd ~/catkin_ws/src
git clone https://github.com/ros/ros
cd ..
catkin_make_isolated --install --pkg rosunit -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
_
  • Itu dia

Menemukan masalah lain dengan ROS yang menjalankan Python 3 yang tidak saya sebutkan? . com) saya dan saya akan memperbarui posting ini (dengan kredit tentunya 😉)

Haruskah saya menggunakan Python atau C++ untuk ROS?

Bahasa utama untuk menulis kode ROS adalah C++ dan Python, C++ lebih disukai karena performa yang lebih baik .

Apakah Python diperlukan untuk ROS?

Seperti yang Anda ketahui, Anda dapat membuat program ROS terutama dalam dua bahasa pemrograman. Phyton dan C++. Ada bahasa lain yang tersedia seperti Swift, Lisp atau lainnya, tetapi tidak didukung sepenuhnya. Jadi untuk artikel selanjutnya, kami akan mempertimbangkan bahwa hanya Python dan C++ yang tersedia untuk pendatang baru .

Bagaimana cara menginstal Python di ROS?

Catatan Penginstalan ROS¶ .
Instal ROS dan jalankan sudo rosdep init dan rosdep update seperti yang disebutkan di wiki instalasi
Instal Python 3 menggunakan manajer paket sistem Anda (tersedia di Ubuntu >= 11. 04) atau secara manual dari sumber, dan pastikan variabel $PYTHONPATH Anda menyertakan pustaka Python 3