什么是ROS?

根据维基百科的介绍,ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

按照我的理解,其实它就是个软件框架,核心只是提供一个多进程通信的服务,但是由于开发者多了,开源了很多一些功能包,方便进行业务开发,仅此而已,和 linux 这种操作系统是有差距的,ROS 运行在 linux 之上,属于服务类。简单了解什么是 ROS 之后,官网 wiki 可以相应的安装、使用介绍,有从源码安装的介绍,链接在这,但是如何交叉编译,并没有介绍的,网上的资料也比较少,下面由我来为大家简单介绍,如何移植 ROS 到嵌入式系统,怎么进行交叉编译。

ROS 使用什么编译

通过 ROS wiki 可以了解到,ROS 使用 catkin 编译,那么,要想实现交叉编译,我们需要先了解 catkin 是什么。

从 catkin wiki 可以了解到,catkin 是依赖 CMake、Python 等工具,往下跟踪,可以发现,其实 catkin 就是实现了一个对 CMake 的封装而已。那么,先来移植 catkin。

而 catkin 只需要使用 CMake 就可以完成编译了,而且 catkin 是用来构建 ROS 的,而构建是在 PC 端进行交叉编译,所以实际上 catkin 不需要交叉编译。同时通过跟踪 catkin 的实现,发现它是由 python 脚本构成的,没有其它的二进制库和可执行文件,那么更加可以肯定,这个 catkin 是可以不进行交叉编译的,只需要在 PC 端编译好该工具即可。

如何编译 ROS

在 PC 端编译 ROS 包的时候,细心可以发现,实际上管理着编译操作的是 CMake 工具。上述也提到,catkin 可以理解为是 CMake 增加了一层包装。

通过查看编译信息,catkin 的编译逻辑是先根据 package 中的 package.xml 确认将要编译的 ROS 组件,这时将会打印出有哪些组件将会编译,组件的编译依赖和运行依赖分别是什么,这个 xml 文件都有相应的描述。在 package.xml 检查之后,将会通过 CMake 调用 CMakeLists.txt 进行编译。所以,我们真正需要做的如下:

  1. 根据编译时出现的信息,增加相应的依赖包编译,先编译被依赖包;
  2. 在编译时候,指定相应的交叉编译工具链即可;
  3. 处理好不同包的依赖,编译时可以查找到相应的包信息;

按照上面的介绍,大概知道需要怎么处理,下面直接给出编译的命令:

cd $(BUILD_DIR) && \                                     ### 进入将要编译包的目录$(HOST_DIR)/usr/bin/catkin_make_isolated --install \  ### 使用 catkin_make_isolated 进行编译处理--source=$(BUILD_DIR) \                              ### 指定编译的源码目录--build=$(BUILD_DIR)/build_isolated \             ### 指定编译中间信息保存的目录-DCATKIN_DEVEL_PREFIX=$(BUILD_DIR)/devel \            ### 指定编译环境???-DCMAKE_INSTALL_PREFIX=$(INSTALL_DIR) \          ### 编译完成之后的安装目录-DCMAKE_C_COMPILER="$(TARGET_CC)" \               ### 指定 C 交叉编译工具链-DCMAKE_CXX_COMPILER="$(TARGET_CXX)" \               ### 指定 CXX 交叉编译工具链-DCMAKE_PREFIX_PATH="$(TARGET_DIR)/usr"                ### 指定 CMake 查看头文件、库文件等的查找路径

按照上述的命令,将可以通过 catkin 命令进行交叉编译。

需要注意的地方:

ROS 的包会有一些 msg 和 srv 文件,在编译的时候,需要将这些文件转换为 python 的源文件或者是 C++ 的源文件,这些操作都是可以通过 genpy 和 gencpp 来完成转换的。

ROS 运行

在运行 ROS 节点之后,需要先运行 roscore,而且需要配置好相应的环境信息,配置以下信息即可:

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2019 OpenWrt.orgexport CMAKE_PREFIX_PATH=/usr
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
export ROS_ROOT=/usr/share/ros
export ROS_PACKAGE_PATH=/usr/share
export ROS_LOG_DIR=/mnt/UDISK
export ROS_HOSTNAME=localhost
export ROS_MASTER_URI=http://localhost:11311
export LD_LIBRARY_PATH=/usr/lib
export ROS_ETC_DIR=/usr/etc/ros
export ROS_DISTRO=kinetic
export ROS_VERSION=1
export ROSLISP_PACKAGE_DIRECTORIES=/usr/share/common-lisp

同时为了每个终端都会自动配置上述环境,可以将上面的配置文件添加到 /etc/profile.d 目录,此时每开一个终端都会自动增加上述的环境变量。

ROS 交叉编译介绍相关推荐

  1. Apollo进阶课程㊱丨Apollo ROS深入介绍

    原文链接:进阶课程㊱丨Apollo ROS深入介绍 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架.ROS本身是基于消息机制的,可以根据功能把软 ...

  2. ROS————tf2介绍及教程

    本文参考资料: tf2 - ROS Wikihttp://wiki.ros.org/tf2 目录 前言 一.tf2的作用以及为什么要使用tf2 1.安装demo 2.运行demo 3.上面的例子代表着 ...

  3. ROS使用介绍——rosbag

    rosbag相当于是把一段实时数据打包成了一个bag文件,这个文件可以按照自己喜欢的方式去做处理,也可以发送给其他人.可以说,rosbag在学习ROS的过程中扮演了十分重要的角色.本文主要内容来自官网 ...

  4. 【Zeekr_Tech】ROS/ROS 2介绍

    极氪软件及电子中心王阳明 前言 ROS是机器人操作系统(Robot Operating System)的英文缩写.ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构.ROS的原型源自斯坦福大 ...

  5. ROS机器人介绍PPT【理工智控】

    理工智控官网:http://whut-smart.com/ 欢迎大家关注!

  6. 基础篇——ROS入门:学习资料、基本介绍、安装配置、文件系统、包创建

    简介 本篇文章主要介绍ROS入门基础,通过此篇文章,可以学习到安装配置.文件系统使用.ROS包创建和构建相关内容. ROS资源网站 ROS官网:http://wiki.ros.org/,可以这么说,市 ...

  7. 进阶无人驾驶—百度Apollo ROS介绍

    知识回顾 -上周我们介绍了Apollo控制技术--控制器的类型.主要介绍控制器的类型,大致分为三类,分别是开环控制.前馈环控制和后馈环控制. 其中详细地讲解了前馈环控制器的分类以及控制策略,控制策略主 ...

  8. Gazebo构建小车模型并通过ROS控制

    Gazebo构建小车模型并通过ROS控制 介绍 编写车子的URDF文件 编写控制小车移动的插件(与ROS交互) 结尾 介绍  突然想试试Gazebo这款仿真软件,因为它可以让你在任何时候都有机器人玩. ...

  9. 嵌入式的我们为什么要学ROS

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 本来是要写一篇STM32移植ROS ...

最新文章

  1. 对于装饰器Decorator的理解
  2. opporeno3详细参数_vivox30和opporeno3哪个好 vivox30和opporeno3对比评测
  3. java 内部类 返回值_Java基础第10天+形式参数和返回值的问题、包、导包、权限修饰符、常见的修饰符、内部类(局部内部类,成员内部类,匿名内部类)...
  4. MySql 统计最近 6 个月内的数据,没有数据默认为显示为 0
  5. (vue基础试炼_02)使用vue.js实现隔2秒显示不同内容
  6. arm中断保护和恢复_浅谈ARM处理器的七种异常处理
  7. linux中的mysql使用_Linux下安装和使用MySQL(二)
  8. SQL数据库语言基础之SqlServer条件查询、排序数据表、like模糊查询【大总结】
  9. access统计各职务人数_东莞各阶段学生人数统计|终于知道为什么在东莞总是学位紧缺了...
  10. 对比Hashtable、HashMap、TreeMap有什么不同(转)
  11. 初步解决leiningen配置到Eclipse中出错的问题
  12. 7-1 Programming in C is fun! (5 分)
  13. 2021最新软件测试V4.0版本教程
  14. windows 查看局域网内所有已使用的IP
  15. Multi-UA V Cooperative Exploringfor the Unknown Indoor EnvironmentBased on Dynamic Target Tracking翻译
  16. 【零信任落地案例】吉大正元某大型集团公司零信任实践案例
  17. Openwrt无线中继设置并访问外网
  18. Android studio通过荣耀20调试Android程序
  19. 能力配不上位置,管理只能“累死”
  20. Unity 实用代码 小工具

热门文章

  1. Windows10 桌面不停的闪烁问题
  2. Office 2016 Pro Plus \ Project 专业版 \ Visio 专业版 \ 64 位vol版本方便KMS小马oem
  3. LiveData 机制详解
  4. 红米k50至尊版和小米12spro区别 哪个好
  5. 2022中山大学计算机考研专硕初试经验分享
  6. 小白入门python教程自学python
  7. python xposed_Xposed插件开发进阶篇
  8. Dvwa漏洞之代码执行漏洞
  9. 由“官方通知”论语音合成,一键合成你想要的语音
  10. 【调剂】上海海洋大学物理海洋学专业招收理学调剂硕士生