将可运行程序包移植到ros下

来源:互联网 发布:java迭代器模式 编辑:程序博客网 时间:2024/06/05 10:54

移植python脚本文件时,发现一个神奇的问题

将python文件从它之前运行的正常环境里移动到别的位置之后,在代码最前方

import syssys.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 requeredcmake_minimum_required(VERSION 2.4.6)#just to avoid the warningif(COMMAND cmake_policy)     cmake_policy(SET CMP0003 NEW)endif(COMMAND cmake_policy)#set project nameproject(TLD)#Append path to the module pathlist(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})#OpenCVfind_package(OpenCV REQUIRED)#set the default path for built executables to the "bin" directoryset(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)#set the default path for built libraries to the "lib" directoryset(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib)#set the include directoriesinclude_directories (${PROJECT_SOURCE_DIR}/../include${OpenCV_INCLUDE_DIRS})#librariesadd_library(tld_utils tld_utils.cpp)add_library(LKTracker LKTracker.cpp)add_library(ferNN FerNNClassifier.cpp)add_library(tld TLD.cpp)#executablesadd_executable(run_tld run_tld.cpp)#link the librariestarget_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(FILESoutput.msg)generate_messages(DEPENDENCIESstd_msgs)set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)#set the default path for built libraries to the "lib" directoryset(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#set the include directoriescatkin_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 librariestarget_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,就可以完成移植