入門脈絡(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工作原理:
-
當(dāng)在工作空間(必須切換到workspace_base否則編譯不會(huì)成功)敲下catkin_make指令后,編譯器首先在當(dāng)前工作空間./src下遞歸查找每一個(gè)ROS package.
-
package 中會(huì)有package.xml和CMakeList.txt文件,catkin編譯系統(tǒng)依據(jù)CMakeList.txt文件,從而生成makefiles(放在./build/).
-
然后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
-
機(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
+關(guān)注
關(guān)注
1文章
278瀏覽量
17011
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論