0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS操作系统学习笔记1

jf_78858299 来源:机器人网 作者:机器人网 2023-05-19 17:20 次阅读

入门脉络主要由几个部分组成,包括:ros简介、ros文件系统、ros通信架构、常用工具、roscpp和rospy。

这篇文章先写ros简介、ros文件系统,预计后天更新ros通信架构,后续后出一版本完整版本文章。

ROS简介

机器人操作系统(Robot operating system ,ROS)是一个应用于机器人上的基础框架,它把原本松散的零部件耦合在一起,提供通信的架构,近似上ROS是一个中间件。

ros上手简单适合研究,但是商用缺点明显。主要是实时通信性能有限,系统稳定差。

ROS误解

ROS不是一门编程语言,主要代码由C++编写,客户端可以使用python\\java等多种语言编写

ROS不仅仅是一个函数库,除了客户端库,还包含中心服务器.

ROS文件系统

认识ROS首先要知道ROS工程的组织架构,了解各个文件的功能和作用,才能高效的开发和编程。

这里面包含catkin编译系统,catkin工作空间结构,package软件包结构,重要的cmakelists.txt、package.xml文件内容。

  • catkin编译系统

    catkin编译系统底层仍然是linux gcc/g++ 只是为了提高编译效率、简化工程管理衍生的,如果有比catkin编译效率更好的软件出现,catkin一样会被替代。

  • 一个catkin软件包必须包含两个文件:package.xml(package描述信息),CMakeList.txt(构建package所需的cmake文件列表)。

图片

catkin工作原理

  1. 当在工作空间(必须切换到workspace_base否则编译不会成功)敲下catkin_make指令后,编译器首先在当前工作空间./src下递归查找每一个ROS package.

  2. package 中会有package.xml和CMakeList.txt文件,catkin编译系统依据CMakeList.txt文件,从而生成makefiles(放在./build/).

  3. 然后make build目录的makefiles文件,编译链接生成可执行文件放在./devel.

    所以说catkin就是将cmake和make指令做了一个封装,从而完成整个编译过程的工具。

  • catkin工作空间
    catkin的工作空间结构,它包含了src、build、devel 三个文件夹主要作用如下:
    src/: ROS的catkin软件包(源代码包)
    build/: catkin(CMake)的缓存信息和中间文件
    devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量

图片

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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27039

    浏览量

    201415
  • 耦合
    +关注

    关注

    13

    文章

    558

    浏览量

    100326
  • 操作系统
    +关注

    关注

    37

    文章

    6286

    浏览量

    121886
  • ROS
    ROS
    +关注

    关注

    1

    文章

    271

    浏览量

    16681
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux操作系统学习规划,不看肯定后悔

    嵌入式Linux操作系统学习规划,不看肯定后悔
    发表于 04-28 06:22

    探讨嵌入式操作系统

    嵌入式操作系统学习笔记
    发表于 10-27 06:56

    嵌入式Linux操作系统学习内容及目标

    嵌入式Linux操作系统学习内容及目标:Linux介绍、使用Linux操作(命令)、Linux开发工具(会用!!够用!!)嵌入式系统课程学习储备知识:C语言(累计代码量3w)+单片机(
    发表于 11-05 08:35

    嵌入式Linux操作系统学习规划

    嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)(2) 必须掌握一个嵌入式
    发表于 11-05 06:45

    Linux操作系统下的Python语言程序设计

    文章目录前言导引前言由于本专栏涉及内容较多,如果大家希望系统学习Linux操作系统下的Python语言程序设计,可参考此文章。按本文章所列文章内容进行学习即可,其它文章作为辅助参考资料使用。导引(
    发表于 12-22 06:17

    UCOSII操作系统的简介

    前言这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解,此文最后会附上我自己在UCOSII操作系统下使用STM32写
    发表于 01-12 06:00

    ROS操作系统有何作用

    ROS是什么?ROS操作系统有何作用?
    发表于 02-11 07:40

    ROS的含义与机器人操作系统ROS的介绍

    Operating System 的缩写,原本是斯坦福大学的一个机器人项目,后来由 WillowGarage 公司发展,目前由 OSRF(Open Source Robotics Foundation,Inc)公司维护的开源项目。 1、首先是一个操作系统 根据 wikipedia 定义,
    发表于 09-26 14:08 12次下载

    嵌入式操作系统学习笔记

    嵌入式操作系统学习笔记
    发表于 10-20 13:51 3次下载
    嵌入式<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>

    51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1)

    这篇笔记虽然是“51操作系统学习笔记”,但没有找到合适的代码。用杨明记的感觉还有点难度。因而转学《建立一个属于自己的AVR的RTOS》这篇文章绝对是学操作系统入门经典之作。经典之处在于
    发表于 11-15 18:36 9次下载
    51<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>(三):建立一个属于自己的AVR的RTOS(1)

    51操作系统学习笔记(四):建立一个属于自己的AVR的RTOS(2)

    承接51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1),在avr中调试一下下面的程序.为了加深学习应用,决定把代码全部输一遍,比复制的学些效果应该好一些吧。打开Avr studio
    发表于 11-15 21:06 7次下载
    51<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>(四):建立一个属于自己的AVR的RTOS(2)

    ROS基本介绍

    近来找到的实习主要是做智能车控制,用到的也就是ROS机器人操作系统ROS需要运行在一个操作系统上,这个操作系统常用的就是Linux,而公司
    的头像 发表于 05-19 17:07 5134次阅读
    <b class='flag-5'>ROS</b>基本介绍

    ROS操作系统学习笔记2

    机器人操作系统(Robot operating system ,ROS)是一个应用于机器人上的基础框架,它把原本松散的零部件耦合在一起,提供通信的架构,近似上ROS是一个中间件。 ros
    的头像 发表于 05-19 17:21 404次阅读

    ROS操作系统学习笔记3

    摘要:这篇文章主要介绍ROS常用工具、ROSPY和ROSCPP常用模块,完全看完三篇文章,可以说ROS就基本入门,可以自己动手做实验了。 **ROS常用工具** ROS工具
    的头像 发表于 05-19 17:37 774次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>3

    ROS操作系统学习笔记4

    摘要:这篇文章主要介绍ROS常用工具、ROSPY和ROSCPP常用模块,完全看完三篇文章,可以说ROS就基本入门,可以自己动手做实验了。 **ROS常用工具** ROS工具
    的头像 发表于 05-19 17:37 547次阅读