A. c語言用什麼編譯器
c語言可以用的編譯器有很多,包括MicrosoftVisualC++、MyEclipse、TurboC和gcc編譯器等。B. linux中常用編譯器是什麼
Linux 下可用的編譯器有 GCC、EGCS 和 PGCC,其中最常用的編譯器便是 GCC。
GCC 起初是 GNU 推出的 C語言編
譯器,用於類 Unix 系統下的編程,所以名為 GNU C Compiler 。隨著眾多自由開發者的加入,GCC
發展迅速,如今已成為一個支持眾多語言的編譯器了,其中包括 C、C++、Ada、Object C 和 Java 等,以至於 GCC 開始被擴展為
GNU Compiler Collection ,也就是「GNU 編譯器集合」的意思。
GCC用法:
1、GCC基本用法及其選項
gcc 或 g++ 的用法跟參數含義幾乎一樣,他們最基本的用法是:
2、只編譯子程序(-c)
3、產生目標文件(-o)
4、附加調試信息(-g)
5、多文件編譯
6、連接庫文件。
C. 如何利用ROS MoveIt快速搭建機器人運動規劃平台
最近幾年各種移動機器人開始涌現出來,不論是輪式的還是履帶式的,如何讓移動機器人移動都是最核心的工作。要讓機器人實現環境感知、機械臂控制、導航規劃等一系列功能,就需要操作系統的支持,而ROS就是最重要的軟體平台之一,它在科研領域已經有廣泛的應用。不過有關ROS的書籍並不多,國內可供的學習社區就更少了。本期硬創公開課就帶大家了解一下如何利用ROS來設計移動機器人。分享嘉賓李金榜:EAI科技創始人兼CEO,畢業於北京理工大學,碩士學位。曾在網易、雪球、騰訊技術部搏改有多年linux底層技術研發經驗。2015年聯合創立EAI科技,負責SLAM演算法研發及相關定位導航軟體產品開發。EAI科技,專注機器人移動,提供消費級高性能激光雷達、slam演算法和機器人移動平台。移動機器人的三個部分所謂的智能移動,是指機器人能根據周圍的環境變化,自主地規劃路線、避障,到達目標地。機器人是模擬人的各種行為,想像一下,人走動需要哪些器官的配合?首先用眼睛觀察周圍環境,然後用腦去分析如何走才能到達目標地,接著用腿走過去,周而復始,直到到達目標地址為至。機器人如果要實現智能移動,也需要眼、腦和腿這三部分的緊密配合。腿「腿」是機器人移動的基礎。機器人的「腿」不局限於類人或類動物的腿,也可以是輪子、履帶等,能讓機器人移動起來的部件,都可以籠統地稱為「腿」。類人的腿式優點是:既可以在復雜路況(比如爬樓梯)下移動、也可以更形象地模仿人的動作(比如跳舞),缺點是:結構和控制單元比較復雜、造價高、移動慢等。所以大部分移動的機器人都是輪式機器人,其優勢在於輪子設計簡單、成本低、移動快。而輪式的也分為多種:兩輪平衡車、三輪、四輪和多輪等等。目前最經濟實用的是兩個主動輪+一個萬向輪。眼睛機器人的眼睛其實就是一個感測器。它的作用是觀察周圍的環境,適合做機器人眼睛的有激光雷達、視覺(深度相機、單雙相機)、輔助(超聲波測距、紅外測距)等。「腦」機器人的大腦就負責接收「眼睛」傳輸的數據,實時計算出路線,指揮腿去移動。其實就是要把看到的東西轉換為數據語言。針對如何描述數據,如何實現處理邏輯等一系列問題。ROS系統給我們提供一個很好的開發框架。ROS簡介ROS是建立在linux之上的操作系統。它的前拿孫身是斯坦福人工智慧基敏判實驗室為了支持斯坦福智能機器人而建立項目,主要可以提供一些標准操作系統服務,例如硬體抽象,底層設備控制,常用功能實現,進程間消息以及數據包管理。ROS是基於一種圖狀架構,從而不同節點的進程能接受、發布、聚合各種信息(例如感測,控制,狀態,規劃等等)。目前ROS主要支持Ubuntu操作系統。有人問ROS能否裝到虛擬機里,一般來說是可以的,但是我們建議裝個雙系統,用Ubuntu專門跑ROS。實際上,ROS可以分成兩層,低層是上面描述的操作系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟體包,例如定位繪圖,行動規劃,感知,模擬等等。ROS(低層)使用BSD許可證,所有是開源軟體,並能免費用於研究和商業用途,而高層的用戶提供的包則使用很多種不同的許可證。用ROS實現機器人的移動對於二維空間,使用線速度+角速度可以實現輪式機器的隨意移動。線速度:描述機器人前後移動的速度大小角速度:描述機器人轉動的角速度大小所以控制機器人移動主要是要把線速度角速度轉換為左右輪的速度大小,然後,通過輪子直徑和輪間距,可以把線速度和角速度轉化為左輪和右輪的速度大小。這里有一個關鍵問題就是編碼器的選擇和pid的調速。編碼器的選擇:一般編碼器和輪子是在一個軸上,目前來說,速度在0.7m/s以下的話,編碼器選600鍵到1200鍵之間都ok。不過需要注意的是,編碼器最好用雙線的,A、B兩線輸出,A向和B向輸出相差90度,這樣可以防抖動。防抖動就是可以在之後里程計算時可以更准確。左輪和右輪的速度大小的控制,通過輪子編碼器反饋,通過PID實時調整電機的PMW來實現。實時計算出小車的里程計(odom),得到小車移動位置的變化。計算車的位置變化是通過編碼器來計算的,如果輪子打滑等情況,那麼計算的變化和實際的變化可能不同。要解決這個問題,其實是看那個問題更嚴重。要走5米只走了4.9米重要,還是要走180度只走了179度重要。其實角度的不精確對小車的影響更大。一般來說,小車的直線距離精確度可以控制在厘米范圍內,在角度方面可以控制精準度在1%~2%。因為角度是比較重要的參數,所以很多人就用陀螺儀來進行矯正。所以有時候大家問小車精度有多高?其實現在這樣已經精度比較高了,難免打滑等問題,不可能做到百分之百的精準。小車在距離和角度方面做到現在這樣對於自建地圖導航已經是可以接受的,要提高更高的精度可能就要其他設備輔助,比如激光雷達來進行輔助,激光雷達可以進行二次檢測進行糾正。激光雷達數據的存儲格式,它首先會有一個大小范圍,如果超出范圍是無效的。還有就是有幾個采樣點,這樣就可以激光雷達可以告訴你隔多少度有一個采樣點。另外最後那個Intensities是告訴大家數據的准確率,因為激光雷達也是取最高點的數據,是有一定的准確率的。上面的ppt其實就是用激光雷達掃了一個牆的形狀。激光雷達掃出一個靜態形狀其實沒有意義,雷達建圖的意義其實在於建立房間的地圖。如何繪制地圖?第一步是收集眼睛數據:針對激光雷達,ROS在sensor_msgs包中定義了專用了數據結構來存儲激光消息的相關信息,成為LaserScan。它指定了激光的有效范圍、掃描點采樣的角度及每個角度的測量值。激光雷達360度實時掃描,能實時測出障礙物的距離、形狀和實時變化。第二步就是把眼睛看到的數據轉化為地圖:ROS的gmapping把激光雷達的/scan數據轉換為柵格map數據,其中黑色代表障礙物、白色代表空白區域,可以順利通行、灰色:未知領域。隨著機器人的移動,激光雷達可以在多個不同方位觀測同一個位置是否有障礙物,如果存在障礙物的閾值超過設置值是,就標定此處是存在障礙物;否則標定不存在障礙物。把障礙物、空白區域和未知領域的尺寸用不同灰度表示出來,就是柵格地圖。便於下一步定位和導航。有時候會出現很直的牆,機器人卻無法直著行走,這時的問題可能就是機器人的輪子出現打滑等其他問題,而走歪了,這時繪制出的地圖也可能是歪的。這種情況可以通過加一個陀螺儀來避免這個情況。因為激光雷達的特性,有時候遇到黑色或鏡面會導致測距不準。目前的解決方法就是不用激光雷達,或者用激光雷達和超聲波進行輔助處理。ROS的地圖是分多層的,我可以在不同高度放多台激光雷達來一起疊加,共同繪制一張地圖。地圖繪制結束之後,就可以進行定位和導航等工作。如何定位和導航?定位:其實是概率性的定位,而不是100%的精度。根據激光雷達掃描周圍障礙物的形狀,與地圖的形狀做匹配,判斷機器人所在位置的概率機器人的定位是否成功,與地圖特徵有很大關系,如果區域特徵明顯,那麼機器人就很容易判斷自己的位置。如果出現難以定位的問題,可能需要人給指定初始位置,或者加led來進行位置識別,或者其他的定位設備來協助定位。目前的視覺通過色彩或者光的技術越來越多。導航:全局路徑規劃+局部調整(動態避障)導航其實就是全局定位,首先根據現有地圖進行規劃,但是在運行過程中會進行局部的路線規劃。但是總體還是根據全局路徑來走。導航中工作量還很大,比如掃地機的路徑規劃和服務機器人的路徑規劃是不一樣的,掃地機器人可能要全覆蓋的有牆角的地圖,而服務機器人主要圍繞指定的路徑或者最短路徑來進行規劃,這部分是ROS工作量最大的一塊。路徑規劃根據不同應用場景變化比較大,但是ROS提供基礎的路徑規劃的開發包,在這個基礎上我們會做自己的路徑規劃。機器人描述和坐標系變換在導航時,哪些區域可以通過,取決於機器人形狀等信息,ROS通過URDF(UnifiedRobotDescriptionFormat)就是描述機器人硬體尺寸布局,比如輪子的位置、底盤大小、激光雷達安裝位置,這些都會影響到坐標系的轉換。坐標系遵循的前提是每個幀只能有一個父幀,再往上進行一些眼神或者關聯。激光雷達的安裝位置直接影響/scan輸出數據。所以激光雷達和機器人的相對位置是需要做坐標變換,才能把激光雷達的數據轉化為機器人視角的數據。ROS的坐標系,最終歸結為三個標准框架,可以簡化許多常見的機器人問題:1)全局准確,但局部不連續的幀(』map」)2)全局不準確,但局部光滑框架(』odom」)3)機器人自身框架(』base_link」)多種感測器(像激光雷達、深度攝像頭和陀螺儀加速度計等)都可以計算base_link和odom的坐標關系,但由於「每個幀只能有一個父幀」,所以只能有一個節點(比如robot_pose_ekf融合多感測器)發布base_link和odom的坐標關系。Baselink自身的坐標系,因為不同元件裝在機器人上不同位置,都要對應到baselink的坐標系中,因為所有的感測器都是要通過機器人的視角來「看」。有些朋友問我,激光雷達在建地圖的時候,小車移動後地圖就亂了,這是因為小車的底盤坐標系和激光雷達的坐標系沒有標定準確。map和odom之間的關聯因為小車移動需要一個局部聯系,比如小車在向前走,不停的累加,這是里程計的作用,map起到全局的、不連續的作用,經過激光雷達和map對應。如果要學習ROS的話,坐標系的變化是重要的點。坐標系的變換還有一個點,就是每個幀都只有一個父幀,有時候兩個坐標都和它有關聯的話,就是A和B關聯,B再和C關聯,而不是B/C都和A關聯。三個坐標幀的父子關系如下:map–>odom–>base_link其實,map和odom都應該和base_link關聯,但為了遵守「每個幀只能有一個父幀」的原則,根據map和base_link以及odom->base_link的關系,計算出map與odom的坐標關系並發布。odom->base_link的坐標關系是由里程計節點計算並發布的。map->base_link的坐標關系是由定位節點計算出來,但並不發布,而是利用接收odom->base_link的坐標關系,計算出map->odom的坐標關系,然後發布。只有里程計的時候,沒有激光雷達,也可以跑,但是要先根據預設地圖進行簡單避障。精彩問答Q:還有ROS的實時性有什麼改進進展嗎?A:實時改進要看ROS2.0的設計,其實ROS2.0的進展網上有公開。但是實際上他的進展離實際應用還有一定距離,至少今年下半年還達不到穩定,不過可以去研究下他的代碼,他對內存管理,線程管理,在實時性上有了很大改善。Q:vSLAM對內存和CPU要求頗高。實際工程中,李老師使用的是什麼硬體配置?可以做多大的地圖呢?A:確實如此,目前來說我們還是使用激光雷達和感測器輔助來進行,這個和地圖大小沒有太大關系,主要是與地形障礙物復雜程度有關。
D. c語言用什麼編譯器比較好
編譯器不是最重要的,重要的是你想在哪個平台上開發代碼,以及你想要實現的功能是什麼。一般嵌入式編程大多使用gcc編譯器,尤其是gcc交叉編譯工具,比如arm-linux-gcc、csky-linux-gcc等,編譯器版本根據實際開發需求來選擇。一般基於windows平台的應用程序、伺服器開發,用得多的是visual
c/c++,當然還有其他開發語言和編譯器,如phython、html等。
E. Ubuntu20.04環境下使用Clion編譯調試ROS2工程
操作系統:ubuntu20.04
軟體安裝:ROS2-Foxy, Clion2022.1.2
F. 常見的C語言編譯器是什麼
目前最流行的C語言編譯器有以下幾種:
1、GNU Compiler Collection 或稱GCC
GCC(GNU Compiler Collection,GNU編譯器套件),是由 GNU 開發的編程語言編譯器。它是以GPL許可證所發行的自由軟體,也是 GNU計劃的關鍵部分。
GCC原本作為GNU操作系統的官方編譯器,現已被大多數類Unix操作系統(如Linux、BSD、Mac OS X等)採納為標準的編譯器,GCC同樣適用於微軟的Windows。GCC是自由軟體過程發展中的著名例子,由自由軟體基金會以GPL協議發布。
2、Microsoft C 或稱 MS C
Microsoft C 是c語言的一種IDE(集成開發環境),常見的還有Microsoft Visual C++,Borland C++,Watcom C++ ,Borland C++ ,Borland C++ Builder,Borland C++ 3.1 for DOS,Watcom C++ 11.0 for DOS,GNU DJGPP C++ ,Lccwin32 C Compiler 3.1,High C,Turbo C等等......
3、Borland Turbo C 或稱 Turbo C
Turbo C是美國Borland公司的產品,Borland公司是一家專門從事軟體開發、研製的大公司。該公司相繼推出了一套 Turbo系列軟體, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 這些軟體很受用戶歡迎。
(6)ros編程使用什麼編譯器擴展閱讀:
C編譯的整個過程很復雜,大致可以分為以下四個階段:
1、預處理階段在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
2、編譯、優化階段編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
3、匯編階段將匯編語言翻譯成機器指令。
4、鏈接階段鏈接階段的主要工作是將有關的目標文件連接起來,即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的目標文件成為一個能夠被操作系統裝入執行的統一整體。
G. 什麼是ros build cmake
這個已經淘汰了。
ros裡面有兩種編譯方式:ros_build和catkin_make。因為是基於cmake編譯的,所以叫ros build cmake。但是ros build cmake用起來麻煩,修改一次程序往往重編譯很麻煩,改很多配置文件。
現在基本都用catkin make。
H. ros系統中自帶c++編譯器嗎
是的。
機器人研究領域,python占據了重要地位。其中一個原因很可能是Python(和C++)是ROS中的兩種主要編程語言。像JAVA一樣,它是一種解釋性語言。但也不同於JAVA,Python語言主要集中在可用性上。
I. ubuntu系統 C++編程哪個編譯器好一點,最好帶智能提示插件的
作為新手,第一次在ubuntu系統下,使用c++編程時,你是不是很迷茫,無從下手啊?你會糾結已經寫好的hello.cpp文件要怎樣編譯?打開那個命令行是怎麼回事?是不是「終端」?一系列的疑問會冒出來。
那麼,今天簡單的總結了一下。希望能給那些初次接觸ubuntu下C++編程的童鞋們一些幫助。
1.首先ubuntu系統自帶了C++編譯器即g++,查看下你的系統中有沒有安裝。若沒有安裝,那麼在命令終端(ctrl+T)下輸入:sudo apt-getinstall gcc,就可以安裝gcc編譯器了。
2.用vim或者emacs寫程序,它們的中文翻譯:一個是神的編輯器,一個是編輯器之神。當然意思都是說這兩個編輯器很厲害,各有所長,就看自己的喜好了,我一般用的是vim編掘罩輯器。
3 在終端中輸入VIM就能打開vim編輯器。Vim操作指南,編寫好了一個文件後保存為123.cpp。
4 (注意旅散陪:一定要保證你的終端是在你保存的文件的目錄下,不然拆蠢每次你輸入都要寫上全部目錄路徑。)g++ -0 123 123.cpp意思是將123.cpp這個源文件使用g++編譯器編譯,編譯後的輸出是123可執行文件。
5 在終端下輸入123,就能顯示你代碼的執行結果了。
要是你嫌棄上面的步驟繁瑣,可以直接使用下面這個方法。打開終端,把hello.cpp放到home下,這樣你在終端即在home文件夾下,可以直接編譯命令:g++ ./hello.cpp。然後在home下就會有一個a.out,這個就是編譯出來的文件。接著運行它:./a.out,就可以在終端中看到結果了。
J. 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
解壓安裝