樹莓派安裝MAVROS的一些坑

一.基於原生系統安裝ROS

詳見文章https://blog.csdn.net/qq_33662995/article/details/98645837,寫的很詳細了。

 

二.源碼安裝MAVROS

由於樹莓派環境下不能直接從二進制安裝,因此只能按照操作說明從源碼編譯。

操作說明完全參考官方教程

注意點1:

這條指令末尾的操作系統名一定要換成當前使用的操作系統。

注意點2:

模塊在安裝到五六十的時候會報一次錯誤,類似於 “logError not in the scope”,這是因爲缺少logError的宏定義導致的,直接在該文件下添加宏定義即可:

文件目錄: /usr/include/console_bridge/console.h

添加:

#define logWarn CONSOLE_BRIDGE_logWarn
#define logError CONSOLE_BRIDGE_logError
#define logDebug CONSOLE_BRIDGE_logDebug
#define logInform CONSOLE_BRIDGE_logInform

參考網址:https://github.com/ros/console_bridge/issues/56

問題解決。

注意點3:

報錯:

/home/pi/ros_catkin_ws/src/actionlib/src/connection_monitor.cpp:278:66: error: no matching function for call to ‘boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000>::subsecond_duration(double)’
       boost::posix_time::milliseconds(time_left.toSec() * 1000.0f));

<== Failed to process package 'actionlib': 
  Command '['/opt/ros/kinetic/env.sh', 'make', '-j4', '-l4']' returned non-zero exit status 2 

這是因爲boost 1.67版本以後不允許部分函數在傳參的時候進行自動類型轉換,要求一定要手動對應參數類型。從而報“no matching function”錯誤。

解決辦法:sudo nano打開出錯文件,把報錯的函數的參數前面手動加一個強制類型轉換即可。

本例中修改 /home/pi/ros_catkin_ws/src/actionlib/src/connection_monitor.cpp 文件第278行的語句:

boost::posix_time::milliseconds(time_left.toSec() * 1000.0f));

改爲

boost::posix_time::milliseconds((long)(time_left.toSec() * 1000.0f)));

即可。參考鏈接 https://gitlab.com/orcus/orcus/commit/f7485813af8e50f88c77312fb29b7bb489a0a17d?view=inline

問題解決。

注意點4:

報錯:

/opt/ros/kinetic/include/actionlib/destruction_guard.h:62:80: error: no matching function for call to ‘boost::date_time::subsecond_duration<boost::posix_time::time_duration,1000>::subsecond_duration(float)’ count_condition_.timed_wait(lock, boost::posix_time::milliseconds(1000.0f));

解決辦法:和問題3是一回事兒。sudo nano打開出錯文件,把報錯的函數的參數前面手動加一個強制類型轉換即可。

本例中修改 /home/pi/ros_catkin_ws/src/actionlib/include/actionlib/destruction_guard.h 文件第62行的語句:

count_condition_.timed_wait(lock, boost::posix_time::milliseconds(1000.0f));

爲改

count_condition_.timed_wait(lock, boost::posix_time::milliseconds((long)1000.0f));

即可。注意到,報錯文件位於/opt/目錄下,但修改的文件位於home目錄下,這是因爲opt目錄下的文件就是在編譯的時候從home目錄下cp過去的,home目錄下的是源頭。

問題解決。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章