程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

ROS2前置基礎教程 | Python依賴查找流程

編輯:Python

本系列教程作者:小魚
公眾號:魚香ROS
QQ交流群:139707339
教學視頻地址:小魚的B站
完整文檔地址:魚香ROS官網
版權聲明:如非允許禁止轉載與商業用途。

python的打包和引入依賴的方式相比C++要容易太多。本節小魚帶你來通過幾個實例學習下Python的路徑查找機制。

1.編寫ROS2的Python節點

d2lros2/d2lros2/chapt2/basic新建second_ros2_node.py,輸入下面的內容

# 導入rclpy庫,如果Vscode顯示紅色的波浪線也沒關系
# 我們只是把VsCode當記事本而已,誰會在意記事本對代碼的看法呢,不是嗎?
import rclpy
from rclpy.node import Node
# 調用rclcpp的初始化函數
rclpy.init()
# 調用rclcpp的循環運行我們創建的second_node節點
rclpy.spin(Node("second_node"))

2.運行Python節點

打開終端,輸入指令

ls
python3 second_ros2_node.py

打開新的終端,輸入

ros2 node list

完美,四行代碼寫了個ROS2的Python節點。

那麼問題來了,我們import rclpy,rclpy到底在哪裡?python是如何找到的?

3.Python包查找流程

Python3運行import rclpy時候如何找到它的呢?答案是通過環境變量PYTHONPATH

Ctrl+C打斷節點運行,接著輸入下面指令

echo $PYTHONPATH

結果

/opt/ros/humble/lib/python3.10/site-packages:/opt/ros/humble/local/lib/python3.10/dist-packages

你會發現裡面有關於humble的python路徑,在上面兩個目錄下找一下rclpy,看看能不能找到rclpy

查找第一個路徑

ls -l /opt/ros/humble/lib/python3.10/site-packages | grep rclpy

沒找到,第二個

ls -l /opt/ros/humble/local/lib/python3.10/dist-packages/ | grep rclpy

找到了

drwxr-xr-x 1 root root 4096 Jun 3 04:45 rclpy
drwxr-xr-x 2 root root 4096 May 23 22:23 rclpy-3.3.4-py3.10.egg-info

4.unset實驗

使用unset指令可以將環境變量刪除掉,嘗試刪除掉PYTHONPATH之後再運行代碼,看看是否還可以導入rclpy

unset
python3 second_ros2_node.py

提示如下

[email protected]:~/d2lros2/d2lros2/chapt2/basic# python3 second_ros2_node.py
Traceback (most recent call last):
File "/root/d2lros2/d2lros2/chapt2/basic/second_ros2_node.py", line 3, in <module>
import rclpy
ModuleNotFoundError: No module named 'rclpy'

請你記住這個報錯信息ModuleNotFoundError: No module named 'xxx',這也是你未來學習過程中可能會經常會遇到的。

次遇到時,你會想起小魚這篇文章,然後對它輕蔑的一笑,接著找到這個庫所在的目錄,把它加到環境裡。

5.總結

本節小魚帶你學習了Python編寫ROS2節點的方式,並帶你認識了一個常見的錯誤ModuleNotFoundError: No module named 'xxx'

ROS2前置教程匯總:

我因我們而存在,Ubuntu也有哲學意義

ROS2前置教程|在虛擬機中安裝Ubuntu

ROS2前置教程 | 玩轉Ubuntu之常用指令

ROS2前置教程|玩轉Ubuntu之編程工具

ROS2前置教程 | 玩轉Ubuntu之常用軟件

ROS2前置基礎教程 | 小魚教你用g++編譯ROS2節點

ROS2前置基礎教程 | 使用CMakeLists.txt編譯ROS2節點

ROS2前置基礎教程 | 小魚教你用CMake依賴查找流程

ROS2進階教程匯總:

ROS2進階教程| ROS2系統架構之操作系統打假


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved