在ros api程式中,大部分函式的實現是用的python,python語言簡單易學,特別做一些測試和除錯非常簡單。
因此,在c++中呼叫python函式會極大地減少工作量。
在c++中呼叫python函式
c++呼叫python函式,python中用有python.h標頭檔案起到了很大作用。相關的函式介紹可在 extending python with c or c++ 中找到。(這個是針對python2.7的說明)。
link_directories(/usr/lib/python2.7/config-i386-linux-gnu)
include_directories($ /usr/include)
add_executable(test src/test.cpp)
target_link_libraries(test $ python2.7) //用於找到libpython2.7.so庫
關於c++部分**如下:
#include #include #include int main()
//load function
pyobject *pyfun = pyobject_getattrstring(pymodule, "main");
if(!pyfun || !pycallable_check(pyfun))
else
//callback funtion
pyobject *argss = pytuple_new(1);
pyobject *arg = pystring_fromstring("127.0.0.1");
pytuple_setitem(argss, 0, arg);
pyobject *pyres = pyobject_callobject(pyfun, argss);
//get result
if(pyres)
py_finalize();
return 0;
}
其for_test.py的python**如下:
import logging
import socket
import time
def main(ip):
proctime = time.strftime("%y%m%d_%h%m%s")
logging.basicconfig(level=logging.info, filename=proctime+'.log')
logging.info("start program")
port = 8080
clientsocket_ = socket.create_connection((ip, port))
clientsocket_.send("for test")
logging.info("write file success")
logging.info("ending program")
return "test ok"
if __name__ == "__main__":
main("127.0.0.1") ## 執行前提為開啟了伺服器端
上面例子是傳入乙個引數並得到返回值的python函式呼叫,更多的呼叫方式可在網上找到大量相關資料。注意將for_test.py檔案放到/home/user/test/下,否則會找不到相應python模組。
通過上述例子,便可以很方便地實現python呼叫。
說「'module' object has no attribute 'argv'" in ignored」。但即使刪除了threading.pyc也還是不行,原因暫時不明,不知道是否有人已經解決。
在Clion中配置ROS工程
使用clion編譯執行ros工程,clion安裝破解過程自行解決 clion終端啟動 sudo gedit bashrc 在bashrc檔案中加入 export path home jjy solftware clion 2018.2.6 bin path 位址根據自己改 儲存退出 source b...
CLion中編譯ROS工程的配置
作為一名ros實踐者,之前一直使用帶外掛程式的qt createtor編寫 和編譯。最近被clion華麗的外表 豐富的可配置性和除錯功能所吸引,官網說明clion可以用於編譯ros packet,直接匯入頂層的cmakelists或src資料夾即可。初次使用,卻發現了一些小問題,需要修改配置解決。1...
ROS中C 編寫發布 python編寫訂閱
執行結果 相關配置 參考部落格 因為在做專案的過程中需要用到c 和python程式,所以想要嘗試一下在ros中能不能用c 編寫訊息的發布者,python編寫訊息的訂閱者。include ros ros.h include std msgs string.h include includeusing ...