ROS工程中C 呼叫python函式

2021-08-20 14:36:07 字數 1916 閱讀 2868

在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 ...