0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ROS操作系統(tǒng)學(xué)習(xí)筆記1

jf_78858299 ? 來源:機(jī)器人網(wǎng) ? 作者:機(jī)器人網(wǎng) ? 2023-05-19 17:20 ? 次閱讀

入門脈絡(luò)主要由幾個(gè)部分組成,包括:ros簡(jiǎn)介、ros文件系統(tǒng)、ros通信架構(gòu)、常用工具、roscpp和rospy。

這篇文章先寫ros簡(jiǎn)介、ros文件系統(tǒng),預(yù)計(jì)后天更新ros通信架構(gòu),后續(xù)后出一版本完整版本文章。

ROS簡(jiǎn)介

機(jī)器人操作系統(tǒng)(Robot operating system ,ROS)是一個(gè)應(yīng)用于機(jī)器人上的基礎(chǔ)框架,它把原本松散的零部件耦合在一起,提供通信的架構(gòu),近似上ROS是一個(gè)中間件。

ros上手簡(jiǎn)單適合研究,但是商用缺點(diǎn)明顯。主要是實(shí)時(shí)通信性能有限,系統(tǒng)穩(wěn)定差。

ROS誤解

ROS不是一門編程語言,主要代碼由C++編寫,客戶端可以使用python\\java等多種語言編寫

ROS不僅僅是一個(gè)函數(shù)庫,除了客戶端庫,還包含中心服務(wù)器.

ROS文件系統(tǒng)

認(rèn)識(shí)ROS首先要知道ROS工程的組織架構(gòu),了解各個(gè)文件的功能和作用,才能高效的開發(fā)和編程。

這里面包含catkin編譯系統(tǒng),catkin工作空間結(jié)構(gòu),package軟件包結(jié)構(gòu),重要的cmakelists.txt、package.xml文件內(nèi)容。

  • catkin編譯系統(tǒng)

    catkin編譯系統(tǒng)底層仍然是linux gcc/g++ 只是為了提高編譯效率、簡(jiǎn)化工程管理衍生的,如果有比catkin編譯效率更好的軟件出現(xiàn),catkin一樣會(huì)被替代。

  • 一個(gè)catkin軟件包必須包含兩個(gè)文件:package.xml(package描述信息),CMakeList.txt(構(gòu)建package所需的cmake文件列表)。

圖片

catkin工作原理

  1. 當(dāng)在工作空間(必須切換到workspace_base否則編譯不會(huì)成功)敲下catkin_make指令后,編譯器首先在當(dāng)前工作空間./src下遞歸查找每一個(gè)ROS package.

  2. package 中會(huì)有package.xml和CMakeList.txt文件,catkin編譯系統(tǒng)依據(jù)CMakeList.txt文件,從而生成makefiles(放在./build/).

  3. 然后make build目錄的makefiles文件,編譯鏈接生成可執(zhí)行文件放在./devel.

    所以說catkin就是將cmake和make指令做了一個(gè)封裝,從而完成整個(gè)編譯過程的工具。

  • catkin工作空間
    catkin的工作空間結(jié)構(gòu),它包含了src、build、devel 三個(gè)文件夾主要作用如下:
    src/: ROS的catkin軟件包(源代碼包)
    build/: catkin(CMake)的緩存信息和中間文件
    devel/: 生成的目標(biāo)文件(包括頭文件,動(dòng)態(tài)鏈接庫,靜態(tài)鏈接庫,可執(zhí)行文件等)、環(huán)境變量

圖片

gaocancan@ubuntu:~$ mkdir -p catkin_test/src
gaocancan@ubuntu:~$ cd catkin_test
gaocancan@ubuntu:~/catkin_test$ catkin_make
Base path: /home/gaocancan/catkin_test
Source space: /home/gaocancan/catkin_test/src
Build space: /home/gaocancan/catkin_test/build
Devel space: /home/gaocancan/catkin_test/devel
Install space: /home/gaocancan/catkin_test/install
Creating symlink "/home/gaocancan/catkin_test/src/CMakeLists.txt" pointing to "/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake"
####
####
Running command: "cmake /home/gaocancan/catkin_test/src
-DCATKIN_DEVEL_PREFIX=/home/gaocancan/catkin_test/devel
-DCMAKE_INSTALL_PREFIX=/home/gaocancan/catkin_test/install -G Unix
Makefiles" in "/home/gaocancan/catkin_test/build"
####
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Using CATKIN_DEVEL_PREFIX: /home/gaocancan/catkin_test/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic
-- This workspace overlays: /opt/ros/kinetic
-- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.12", minimum required is "2")
-- Using PYTHON_EXECUTABLE: /usr/bin/python2
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/gaocancan/catkin_test/build/test_results
-- Found gtest sources under '/usr/src/gmock': gtests will be built
-- Found gmock sources under '/usr/src/gmock': gmock will be built
-- Found PythonInterp: /usr/bin/python2 (found version "2.7.12")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.29
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- Configuring done
-- Generating done
-- Build files have been written to: /home/gaocancan/catkin_test/build
####
#### Running command: "make -j4 -l4" in "/home/gaocancan/catkin_test/build"
####
gaocancan@ubuntu:~/catkin_test$ tree
.
├── build
│   ├── atomic_configure
│   │   ├── env.sh
│   │   ├── local_setup.bash
│   │   ├── local_setup.sh
│   │   ├── local_setup.zsh
│   │   ├── setup.bash
│   │   ├── setup.sh
│   │   ├── _setup_util.py
│   │   └── setup.zsh
│   ├── catkin
│   │   └── catkin_generated
│   │       └── version
│   │           └── package.cmake
│   ├── catkin_generated
│   │   ├── env_cached.sh
│   │   ├── generate_cached_setup.py
│   │   ├── installspace
│   │   │   ├── env.sh
│   │   │   ├── local_setup.bash
│   │   │   ├── local_setup.sh
│   │   │   ├── local_setup.zsh
│   │   │   ├── setup.bash
│   │   │   ├── setup.sh
│   │   │   ├── _setup_util.py
│   │   │   └── setup.zsh
│   │   ├── order_packages.cmake
│   │   ├── order_packages.py
│   │   ├── setup_cached.sh
│   │   └── stamps
│   │       └── Project
│   │           ├── interrogate_setup_dot_py.py.stamp
│   │           ├── order_packages.cmake.em.stamp
│   │           ├── package.xml.stamp
│   │           └── _setup_util.py.stamp
│   ├── CATKIN_IGNORE
│   ├── catkin_make.cache
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.5.1
│   │   │   ├── CMakeCCompiler.cmake
│   │   │   ├── CMakeCXXCompiler.cmake
│   │   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   │   ├── CMakeSystem.cmake
│   │   │   ├── CompilerIdC
│   │   │   │   ├── a.out
│   │   │   │   └── CMakeCCompilerId.c
│   │   │   └── CompilerIdCXX
│   │   │       ├── a.out
│   │   │       └── CMakeCXXCompilerId.cpp
│   │   ├── clean_test_results.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeError.log
│   │   ├── CMakeOutput.log
│   │   ├── CMakeRuleHashes.txt
│   │   ├── CMakeTmp
│   │   ├── download_extra_data.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── doxygen.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── feature_tests.bin
│   │   ├── feature_tests.c
│   │   ├── feature_tests.cxx
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   ├── run_tests.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── TargetDirectories.txt
│   │   └── tests.dir
│   │       ├── build.make
│   │       ├── cmake_clean.cmake
│   │       ├── DependInfo.cmake
│   │       └── progress.make
│   ├── cmake_install.cmake
│   ├── CTestConfiguration.ini
│   ├── CTestCustom.cmake
│   ├── CTestTestfile.cmake
│   ├── gtest
│   │   ├── CMakeFiles
│   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   ├── gmock.dir
│   │   │   │   ├── build.make
│   │   │   │   ├── cmake_clean.cmake
│   │   │   │   ├── DependInfo.cmake
│   │   │   │   ├── depend.make
│   │   │   │   ├── flags.make
│   │   │   │   ├── link.txt
│   │   │   │   ├── progress.make
│   │   │   │   ├── src
│   │   │   │   └── usr
│   │   │   │       └── src
│   │   │   │           └── gtest
│   │   │   │               └── src
│   │   │   ├── gmock_main.dir
│   │   │   │   ├── build.make
│   │   │   │   ├── cmake_clean.cmake
│   │   │   │   ├── DependInfo.cmake
│   │   │   │   ├── depend.make
│   │   │   │   ├── flags.make
│   │   │   │   ├── link.txt
│   │   │   │   ├── progress.make
│   │   │   │   ├── src
│   │   │   │   └── usr
│   │   │   │       └── src
│   │   │   │           └── gtest
│   │   │   │               └── src
│   │   │   └── progress.marks
│   │   ├── cmake_install.cmake
│   │   ├── CTestTestfile.cmake
│   │   ├── gtest
│   │   │   ├── CMakeFiles
│   │   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   │   ├── gtest.dir
│   │   │   │   │   ├── build.make
│   │   │   │   │   ├── cmake_clean.cmake
│   │   │   │   │   ├── DependInfo.cmake
│   │   │   │   │   ├── depend.make
│   │   │   │   │   ├── flags.make
│   │   │   │   │   ├── link.txt
│   │   │   │   │   ├── progress.make
│   │   │   │   │   └── src
│   │   │   │   ├── gtest_main.dir
│   │   │   │   │   ├── build.make
│   │   │   │   │   ├── cmake_clean.cmake
│   │   │   │   │   ├── DependInfo.cmake
│   │   │   │   │   ├── depend.make
│   │   │   │   │   ├── flags.make
│   │   │   │   │   ├── link.txt
│   │   │   │   │   ├── progress.make
│   │   │   │   │   └── src
│   │   │   │   └── progress.marks
│   │   │   ├── cmake_install.cmake
│   │   │   ├── CTestTestfile.cmake
│   │   │   └── Makefile
│   │   └── Makefile
│   ├── Makefile
│   └── test_results
├── devel
│   ├── cmake.lock
│   ├── env.sh
│   ├── lib
│   ├── local_setup.bash
│   ├── local_setup.sh
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.sh
│   ├── _setup_util.py
│   └── setup.zsh
└── src
  └── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake

43 directories, 123 files
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    211

    文章

    28423

    瀏覽量

    207146
  • 耦合
    +關(guān)注

    關(guān)注

    13

    文章

    582

    瀏覽量

    100879
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6827

    瀏覽量

    123335
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    278

    瀏覽量

    17011
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃,不看肯定后悔

    嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃,不看肯定后悔
    發(fā)表于 04-28 06:22

    探討嵌入式操作系統(tǒng)

    嵌入式操作系統(tǒng)學(xué)習(xí)筆記
    發(fā)表于 10-27 06:56

    嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃

    嵌入式Linux操作系統(tǒng)學(xué)習(xí)規(guī)劃ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應(yīng)用軟件開發(fā)目標(biāo):(1) 掌握主流嵌入式微處理器的結(jié)構(gòu)與原理(初步定為arm9)(2) 必須掌握一個(gè)嵌入式
    發(fā)表于 11-05 06:45

    UCOSII操作系統(tǒng)的簡(jiǎn)介

    前言這是我將UCOSII操作系統(tǒng)移植在STM32單片機(jī)上后進(jìn)行UCOSII操作系統(tǒng)學(xué)習(xí)的一些筆記與理解,此文最后會(huì)附上我自己在UCOSII操作系統(tǒng)下使用STM32寫
    發(fā)表于 01-12 06:00

    ROS是什么?機(jī)器人操作系統(tǒng)ROS的介紹

    Robotics Foundation,Inc) 公司維護(hù)的開源項(xiàng)目。 1、首先是一個(gè)操作系統(tǒng) 根據(jù) wikipedia 定義,操作系統(tǒng)是用來管理計(jì)算機(jī)硬件與軟件資源,并提供一些公用的 服務(wù)的
    發(fā)表于 09-13 17:23 ?14次下載
    <b class='flag-5'>ROS</b>是什么?機(jī)器人<b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>ROS</b>的介紹

    ROS的含義與機(jī)器人操作系統(tǒng)ROS的介紹

    Operating System 的縮寫,原本是斯坦福大學(xué)的一個(gè)機(jī)器人項(xiàng)目,后來由 WillowGarage 公司發(fā)展,目前由 OSRF(Open Source Robotics Foundation,Inc)公司維護(hù)的開源項(xiàng)目。 1、首先是一個(gè)操作系統(tǒng) 根據(jù) wiki
    發(fā)表于 09-26 14:08 ?12次下載

    機(jī)器人操作系統(tǒng)ROS詳細(xì)介紹

    機(jī)器人操作系統(tǒng)ROS詳細(xì)介紹 ROS( 機(jī)器人 操作系統(tǒng),RobotOperatingSystem),是專為機(jī)器人軟件開發(fā)所設(shè)計(jì)出來的一套電腦操作系
    發(fā)表于 11-18 18:09 ?2390次閱讀

    嵌入式操作系統(tǒng)學(xué)習(xí)筆記

    嵌入式操作系統(tǒng)學(xué)習(xí)筆記
    發(fā)表于 10-20 13:51 ?3次下載
    嵌入式<b class='flag-5'>操作系統(tǒng)學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    嵌入式系統(tǒng)學(xué)習(xí)筆記

    嵌入式系統(tǒng)學(xué)習(xí)筆記https://app.yinxiang.com/fx/97dd59b5-21f1-470c-969c-d3509ee38fce
    發(fā)表于 10-20 19:50 ?0次下載
    嵌入式<b class='flag-5'>系統(tǒng)學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    51操作系統(tǒng)學(xué)習(xí)筆記(三):建立一個(gè)屬于自己的AVR的RTOS(1)

    這篇筆記雖然是“51操作系統(tǒng)學(xué)習(xí)筆記”,但沒有找到合適的代碼。用楊明記的感覺還有點(diǎn)難度。因而轉(zhuǎn)學(xué)《建立一個(gè)屬于自己的AVR的RTOS》這篇文章絕對(duì)是學(xué)操作系統(tǒng)入門經(jīng)典之作。經(jīng)典之處在于
    發(fā)表于 11-15 18:36 ?9次下載
    51<b class='flag-5'>操作系統(tǒng)學(xué)習(xí)</b><b class='flag-5'>筆記</b>(三):建立一個(gè)屬于自己的AVR的RTOS(<b class='flag-5'>1</b>)

    51操作系統(tǒng)學(xué)習(xí)筆記(四):建立一個(gè)屬于自己的AVR的RTOS(2)

    承接51操作系統(tǒng)學(xué)習(xí)筆記(三):建立一個(gè)屬于自己的AVR的RTOS(1),在avr中調(diào)試一下下面的程序.為了加深學(xué)習(xí)應(yīng)用,決定把代碼全部輸一遍,比復(fù)制的學(xué)些效果應(yīng)該好一些吧。打開Avr
    發(fā)表于 11-15 21:06 ?7次下載
    51<b class='flag-5'>操作系統(tǒng)學(xué)習(xí)</b><b class='flag-5'>筆記</b>(四):建立一個(gè)屬于自己的AVR的RTOS(2)

    ROS基本介紹

    近來找到的實(shí)習(xí)主要是做智能車控制,用到的也就是ROS機(jī)器人操作系統(tǒng),ROS需要運(yùn)行在一個(gè)操作系統(tǒng)上,這個(gè)操作系統(tǒng)常用的就是Linux,而公司
    的頭像 發(fā)表于 05-19 17:07 ?7413次閱讀
    <b class='flag-5'>ROS</b>基本介紹

    ROS操作系統(tǒng)學(xué)習(xí)筆記2

    機(jī)器人操作系統(tǒng)(Robot operating system ,ROS)是一個(gè)應(yīng)用于機(jī)器人上的基礎(chǔ)框架,它把原本松散的零部件耦合在一起,提供通信的架構(gòu),近似上ROS是一個(gè)中間件。 ros
    的頭像 發(fā)表于 05-19 17:21 ?615次閱讀

    ROS操作系統(tǒng)學(xué)習(xí)筆記3

    摘要:這篇文章主要介紹ROS常用工具、ROSPY和ROSCPP常用模塊,完全看完三篇文章,可以說ROS就基本入門,可以自己動(dòng)手做實(shí)驗(yàn)了。 **ROS常用工具** ROS工具
    的頭像 發(fā)表于 05-19 17:37 ?1007次閱讀
    <b class='flag-5'>ROS</b><b class='flag-5'>操作系統(tǒng)學(xué)習(xí)</b><b class='flag-5'>筆記</b>3

    ROS操作系統(tǒng)學(xué)習(xí)筆記4

    摘要:這篇文章主要介紹ROS常用工具、ROSPY和ROSCPP常用模塊,完全看完三篇文章,可以說ROS就基本入門,可以自己動(dòng)手做實(shí)驗(yàn)了。 **ROS常用工具** ROS工具
    的頭像 發(fā)表于 05-19 17:37 ?702次閱讀