移植python脚本文件时,发现一个神奇的问题
将python文件从它之前运行的正常环境里移动到别的位置之后,在代码最前方
import sys
sys.path.append("之前位置的路径")
就可以正常使用了
这句话好像可以将路径改到之前的位置,这样就有了之前的环境信息,就可以正常运行
具体原因,还希望有大神指导一下。
要注意:用python在ros下发布消息,不需要修改CMAKELIST等文件,因为它本事就不是cpp文件
写完python文件,必须在该目录下要执行
chmod +x 文件名.py
给予文件执行权限
然后再在工作空间执行
catkin_make
运行方式是
rosrun package名称 python文件名.py
移植C++写的程序包时,要将src文件里的CMakeList.txt的内容,修改到src外的路径,然后再链接上需要的库函数
ros包CMAKEList写法中,catkin_package(...)中依赖的包,必须要在package.xml文件中声明
原先程序包中src里的CMakeList.txt的内容如下
#Set minimum version requered
cmake_minimum_required(VERSION 2.4.6)
#just to avoid the warning
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
#set project name
project(TLD)
#Append path to the module path
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
#OpenCV
find_package(OpenCV REQUIRED)
#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib)
#set the include directories
include_directories (${PROJECT_SOURCE_DIR}/../include ${OpenCV_INCLUDE_DIRS})
#libraries
add_library(tld_utils tld_utils.cpp)
add_library(LKTracker LKTracker.cpp)
add_library(ferNN FerNNClassifier.cpp)
add_library(tld TLD.cpp)
#executables
add_executable(run_tld run_tld.cpp)
#link the libraries
target_link_libraries(run_tld tld LKTracker ferNN tld_utils ${OpenCV_LIBS})
#set optimization level
set(CMAKE_BUILD_TYPE Release)
对应的,修改成ros下package中src文件夹外的CMakeList.txt文件
步骤是,先修改相对路径,然后加入ros的依赖,修改后结果如下
cmake_minimum_required(VERSION 2.8.3)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
project(tld)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
find_package(catkin REQUIRED COMPONENTS
cv_bridge
image_transport
roscpp
rospy
std_msgs
message_generation
)
find_package(OpenCV 3.1 COMPONENTS core highgui imgproc REQUIRED)
add_message_files(
FILES
output.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#set the include directories
catkin_package(
CATKIN_DEPENDS
roscpp
sensor_msgs
opencv
image_transport
message_runtime
)
include_directories (${PROJECT_SOURCE_DIR}/include ${OpenCV_INCLUDE_DIRS})
include_directories(
${catkin_INCLUDE_DIRS}
)
link_directories(${OpenCV_LIBRARY_DIRS})
add_library(tld_utils ${PROJECT_SOURCE_DIR}/src/tld_utils.cpp)
add_library(LKTracker ${PROJECT_SOURCE_DIR}/src/LKTracker.cpp)
add_library(ferNN ${PROJECT_SOURCE_DIR}/src/FerNNClassifier.cpp)
add_library(tld ${PROJECT_SOURCE_DIR}/src/TLD.cpp)
add_executable(run_tld ${PROJECT_SOURCE_DIR}/src/run_tld.cpp)
#link the libraries
target_link_libraries(run_tld tld LKTracker ferNN tld_utils ${catkin_LIBRARIES} ${OpenCV_LIBS})
#set optimization level
add_dependencies(run_tld tld_generate_messages_cpp)
set(CMAKE_BUILD_TYPE Release)
之后再在工作空间的目录下进行catkin_make,就可以完成移植