導航:首頁 > 源碼編譯 > ros編譯包出錯

ros編譯包出錯

發布時間:2023-01-26 12:36:04

㈠ ros 出現error reading version line怎麼辦

一般來說出現這個問題的原因是你的rosbag已損壞,你可以使用rosbag info XX.bag查看你想要讀取的rosbag包的信息,如果無法讀取到有效信息,說明該rosbag確實已損壞。

㈡ 為什麼ROS里那麼多的錯誤包

你說的是SSH錯誤嗎?那是外網有人用SSH登錄你的ros,你把SSH的22埠號噤了或者把埠號改了就可以了.

㈢ 在Ubuntu中用rosmake編譯沒有可執行文件生成是怎麼回事

提示:make:沒有什麼可以做的為`first'。這個是Makefile的一個提示,出現這個提示是因為你編譯出來的可執行文件的時間戳比你的源代碼文件的時間戳「遲」,所以make認為你這種情況下沒必要編譯,因為即使編譯了,編出來的東西和現有的可執行文件一樣,就是浪費時間了,所以提示沒有什麼可以做的為`first'。如果你還要編,隨便打開源代碼的一個文件,保存下,就可以編譯了

㈣ ROS使用python3

參考:

為了使用python3的圖像處理程序,需要使用到ros介面,但是由於原生ros介面不支持python3,只能使用python2.7(時間2020-07,版本melodic),一下步驟主要為了使用ros調用的方式調用python3的程序

由於ros接收圖像數據使用的是cv_bridge 介面,所以先編譯python3版本的cv_bridge

注意:此時要先安裝好python3的環境,可以按照以下方式安裝

進入到工作空間進行編譯

會有如下提示

編譯完成後,可以在工作路徑下的install文件夾里生成需要的庫,需要使用python3版本的cv_bridge時,就將這個環境變數導入即可

extend參數的作用是讓這次的路徑配置不影響之前配置好的路徑

1. 在使用rosrun 運行程序時,默認還會調用原生melodic的cv_bridge
我的處理方法是將原來的python版本cv_bridge刪除

2. 編譯完成會有錯誤提示,如下圖,但不影響使用

編譯安裝:

在編譯時,使用如下命令

編譯過程中會有錯誤提示

解決方法:
參考 https://answers.ros.org/question/257757/importerror-no-mole-named-em-error/

編譯完成如下:

運行roscore錯誤提示

安裝netifaces

參考 https://github.com/frescobaldi/python-poppler-qt5/issues/29

https://launchpad.net/ubuntu/+source/sip4/4.19.21+dfsg-1build1

解壓安裝

㈤ ROS usb_cam 編譯問題

[USBCAM]攝像頭錄像軟體用攝像頭和電腦錄像。不用採集卡、監視器、攝像槍、壓縮卡。生成錄像文件體積小巧,壓縮比超高。原來約500MB/分鍾的錄像(15FPS640*480),在畫質基本無損的情況下壓縮成2.5MB/分鍾。

㈥ ROS中分析catkin_make編譯信息的方法

在使用catkin_make編譯時,在終端中會有很多列印,導致非常難找錯誤信息。
一個小竅門就是:
在終端中使用以下命令執行編譯:

此時在終端中只顯示錯誤信息列印以及cmake中使用message 列印的信息。

另外開啟新的終端 輸入命令: tail -f logs 查看編譯的列印信息。

㈦ ROS 工作空間、package 及 catkin 編譯系統

本文內容都可以在 ROS 官網 wiki ( http://wiki.ros.org/ROS/Tutorials )中找到,作者只是根據自己的理解重新闡述了其中的某些內容,或許能幫助讀者更好的理解 ROS 系統中的一些概念。首先保證 ROS 已經正確安裝了。安裝方式可以參考 本博客的另一篇文章 。

簡單地說,ROS workspace (工作空間)就是統一存放 ROS 文件的地方,比如一個項目的所有 ROS 文件最好都放在一個 workspace 中,便於統一管理、編譯和調用。

catkin 是目前 ROS 的編譯系統,自 ROS Groovy 版本開始使用,取代了之前的 rosbuild 編譯系統。

ROS workspace 中可以包含若干 ROS package,每個 package 內部包含實現某些特定功能的文件。

其中,~ 表示當前用戶的 home 目錄, -p (parent)參數可以創建某個文件夾和它的父文件夾,也就是兩層的路徑。這里 workspace 的名字是 catkin_ws,這個名字可以按照自己項目的內容設定,但是 src 這個文件夾的名字是固定的。

初始化工作空間。這里 src 就是以後存放 ROS 源文件的地方。上述命令之後,會在 src 目錄下產生 CMakeLists.txt 文件,這實際上是一個鏈接到ROS 安裝目錄下的 /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake 一個超鏈接文件,對工作空間做了一些初始設置。不用去管它,也不要隨便修改它。

會一次性編譯 src 文件夾中的所有源文件,同時生成 devel 和 build 兩個文件夾。

實際上,catkin_make 這個命令並沒有特別神奇的地方,它只是把一系列基本的編譯命令整合在了一起,一個 catkin_make 命令相當於如下的一系列命令:

如果要深入研究 catkin_make 編譯方式,可以參考 這篇文章 。

將 workspace 的信息載入系統環境變數。
這種方法載入的信息只對當前 terminal 有效。新開一個 terminal 就無效了。如果要對每個 terminal 都有效,可以將上述命令寫入用戶 home 路徑下的 .bashrc 文件中:

注意,.bashrc 文件是隱藏文件,在 home 路徑下通過命令

命令可以看到。

還要注意, >> 是將 echo 後邊的內容寫入文件的尾部,如果用 > 則要覆蓋原文件,一定不要搞錯。

編譯之後,由於我們只是一個空的 workspace,還沒有任何 package,所以沒有什麼實質性的東西,只是告訴系統這里有個 ROS workspace,算是在系統中注冊了一下。

package 是組織 ROS 文件的基本單元,一般來說,每個 package 完成一些特定功能。

package 中至少包含兩個文件: package.xml 和 CMakeLists.txt.

package 在 workspace 中的存放結構一般如下:

也可採用其他的結構,但是要注意 package 之間不能嵌套,也就是在一個 package 中,不能再創建另一個 package ,所有 package 都必須是相對獨立的目錄。

用 catkin 創建 package 的過程很簡單,用如下命令:

其中 depend 為依賴的其他 package。這樣創建之後,package 中的 CMakeLists.txt 和 package.xml 中會體現出這種依賴關系。創建時也可以不指明依賴關系,在後續編譯 package 的時候再補上。

創建好了 package,就可以使用 rospack 相關的命令進行查找、進入等操作了。不過,有時會有延遲,可以用命令

或者

查找、更新一下。

上述方式創建了 ROS package,然後就可以在其中編寫 源文件了,可用的語言主要是 c++, python,我們現在的項目中還用到了 Julia。這里就不再細述具體的源文件編寫過程了。

創建好了源文件,如果是 c++ 編寫的,要編譯一下。這里要設置好 package.xml 和 CMakeLists.txt 中的信息。如果依賴的 package 已經設置好了,就不需要修改 package.xml 了,只需要在 CMakeLists.txt 中添加源文件對應的編譯信息如下:

實際上在 CMakeLists.txt 中有非常全面的模板,很容易找到在哪裡添加這些編譯文件信息。

設置好了編譯信息,就可以回到 workspace 的 src 所在文件夾中,用如下命令編譯:

該命令可以一次性編譯 src 中的所有 package。如果只想編譯指定的 package,可以用如下命令:

但是,這個命令似乎有時不太管用,根據我們的實際經驗,最有效的方法是用如下的 whitelist 命令:

這樣就是只編譯 package1 和 package2。但是要注意,該命令中的 whitelist 具有記憶功能。用完該命令之後,下次如果要編譯 src 中所有的 package,如果只用 catkin_make,則還是只編譯 whitelist 中的 package,需要用如下命令清除一下 whitelist

以上就是我們使用 ROS 中的一些基本操作,希望其中的一些內容對讀者有幫助。

Written by SH

Revised by QP

㈧ GDB ROS調試

ROS中用到第三方庫,在編譯第三方庫的時候,加上 -g 選項,以供調用該庫時調試。

在編譯ROS包的時候,使用如下命令編譯:

catkin_make -DCMAKE_BUILD_TYPE=Debug  

GDB啟動應用

rosrun --prefix 'gdb -ex run --args'  package   node  

之後就可以正常使用GDB命令來調試了,因為第三方庫編譯加了 -g 選項,所以可以進入調用庫中的函數進行調試。

㈨ ros編譯提示缺少鏈接庫怎麼辦

一、標准:ROS功能包中調用第三方靜態庫
include_directories(
include
${catkin_INCLUDE_DIRS}
)

add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方庫名
)
以上一般情況下都沒問題,但是有些靜態庫沒有添加pie系統保護功能,導致程序轉載的地址是無效的,所以我們在鏈接時候也需要關閉pie功能。
註:引入PIE的原因是讓程序能裝載在隨機的地址,通常情況下,內核都在固定的地址運行,如果能改用位置無關,那攻擊者就很難藉助系統中的可執行碼實施攻擊了。類似緩沖區溢出之類的攻擊將無法實施。而且這種安全提升的代價很小
二、解決鏈接未開啟pie功能的靜態庫時,編譯報錯
先作對比:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方庫名 -no-pie
)
與一般的鏈接形式對比,我們只是在鏈接第三方庫的後面加了-no-pie,之後再到ROS的工作空間中重新編譯就完成了!

閱讀全文

與ros編譯包出錯相關的資料

熱點內容
王者榮耀安卓系統怎麼轉移ios系統 瀏覽:876
python北京美團外賣 瀏覽:822
實名制相親交友app怎麼注冊 瀏覽:4
lol防封腳本源碼 瀏覽:171
python引用其他目錄 瀏覽:469
北京市常用的加密軟體 瀏覽:437
單片機壓力回彈開關 瀏覽:185
倒角命令的功能是什麼 瀏覽:508
酷狗app怎麼修音呢 瀏覽:797
元神如何登錄天空島伺服器 瀏覽:722
預演算法根據什麼法指定的 瀏覽:559
cad壓縮大小 瀏覽:155
王牌戰爭如何開伺服器才好玩 瀏覽:209
茅侃侃如何緩解壓力 瀏覽:476
eadll加密 瀏覽:897
跌pdf 瀏覽:490
懷舊服atlas插件打開命令 瀏覽:341
安卓拼圖不壓縮 瀏覽:703
怎樣把caj轉換成pdf 瀏覽:851
python判斷字元串包含特定字元 瀏覽:862