ros 編譯 Python 檔案

2021-07-27 02:49:04 字數 1962 閱讀 8927

系統:ubuntu14.04  ros indigo

.py並不是可編譯的指令碼檔案,但是為了適應ros統一的編譯體系,使ros識別出你寫的python node,所以也加入了python的編譯流程,主要目的就是讓ros和系統找到你的python程式在哪。

1.在工作區間建立乙個package

cd ~/catkin_ws/src
catkin_create_pkg my_pkg message_generation rospy

2.建立你的python包

cd ~/catkin_ws/src/my_pkg

mkdir bin
mkdir src
mkdir src/tutorial_package
touch src/tutorial_package/__init__.py
src目錄用來放你的原始碼,也就是你自己寫的各種封裝好的包,是以.py結尾的檔案

bin目錄用來放你的執行檔案,木有檔名字尾

在src/turorial_package目錄下建立hello.py檔案,

裡面寫:

def say(name):

print('hello ' + name)

在bin目錄下建立hello檔案,

裡面寫:

#! /usr/bin/env python

import tutorial_package.hello

if __name__ == '__main__':

tutorial_package.hello.say('my friend!')

第一句很重要,用來表明這個可執行檔案的直譯器。

然後給這個檔案加上可執行許可權

chmod u+x bin/hello

最後還有乙個問題,bin目錄下的python檔案如何找到(import)src下的python,一種方法是改python路徑,顯然很麻煩。

另一種是在根目錄下建立setup.py檔案。

裡面寫:

## ! do not manually invoke this setup.py, use catkin instead

from

distutils.core

import

setup

from

catkin_pkg.python_setup

import

generate_distutils_setup

# fetch values from package.xml

setup_args = generate_distutils_setup(

packages=['

tutorial_package

'],package_dir=,

)setup(**setup_args)

裡面要改的就是package和package_dir

到此為止python方面的流程已經說完

3.修改cmakelists.txt

3.1 首先把裡面

catkin_python_setup()

的注釋去掉,保證在catkin_make時install python包

3.2

install(programs bin/hello

destination $)

找到這一句,去掉注釋,在program後面加上你的可執行檔案的路徑名, 去掉destination注釋。

4.編譯

cd ~/catkin_ws
catkin_make -dcatkin_whitelist_packages="my_pkg"
source ~/.bashrc
rosrun my_pkg hello

編譯 ORB SLAM的ROS編譯

問題 問題分析 在網上搜了很多資料,有兩種 pip install rospkg 但是提示python2.7不在維護資訊,然後重新編譯沒成功 可能是由於ros和python3衝突導致的,需要切換python版本 bashrc新增環境變數 export pythonpath pythonpath us...

ROS 用catkin建立ROS包 編譯

安裝好ros後,預設已經安裝了catkin,接著執行以下步驟 用catkin建立ros包 每次都要進入這個目錄,也就是所有的包都要放在這個目錄下 cd catkin ws src catkin create pkg 建立包的命令 hello 包的名字 std msgs roscpp 依賴庫,如果不清...

ROS 編譯orbslam出錯,ros路徑問題

cmake error at cmakelists.txt 2 include include could not find load file core rosbuild rosbuild.cmake cmake error at cmakelists.txt 4 rosbuild init un...