ROS 交叉编译介绍
什么是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 进行编译。所以,我们真正需要做的如下:
- 根据编译时出现的信息,增加相应的依赖包编译,先编译被依赖包;
- 在编译时候,指定相应的交叉编译工具链即可;
- 处理好不同包的依赖,编译时可以查找到相应的包信息;
按照上面的介绍,大概知道需要怎么处理,下面直接给出编译的命令:
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 交叉编译介绍相关推荐
- Apollo进阶课程㊱丨Apollo ROS深入介绍
原文链接:进阶课程㊱丨Apollo ROS深入介绍 ROS是一个强大而灵活的机器人编程框架,从软件构架的角度说,它是一种基于消息传递通信的分布式多进程框架.ROS本身是基于消息机制的,可以根据功能把软 ...
- ROS————tf2介绍及教程
本文参考资料: tf2 - ROS Wikihttp://wiki.ros.org/tf2 目录 前言 一.tf2的作用以及为什么要使用tf2 1.安装demo 2.运行demo 3.上面的例子代表着 ...
- ROS使用介绍——rosbag
rosbag相当于是把一段实时数据打包成了一个bag文件,这个文件可以按照自己喜欢的方式去做处理,也可以发送给其他人.可以说,rosbag在学习ROS的过程中扮演了十分重要的角色.本文主要内容来自官网 ...
- 【Zeekr_Tech】ROS/ROS 2介绍
极氪软件及电子中心王阳明 前言 ROS是机器人操作系统(Robot Operating System)的英文缩写.ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构.ROS的原型源自斯坦福大 ...
- ROS机器人介绍PPT【理工智控】
理工智控官网:http://whut-smart.com/ 欢迎大家关注!
- 基础篇——ROS入门:学习资料、基本介绍、安装配置、文件系统、包创建
简介 本篇文章主要介绍ROS入门基础,通过此篇文章,可以学习到安装配置.文件系统使用.ROS包创建和构建相关内容. ROS资源网站 ROS官网:http://wiki.ros.org/,可以这么说,市 ...
- 进阶无人驾驶—百度Apollo ROS介绍
知识回顾 -上周我们介绍了Apollo控制技术--控制器的类型.主要介绍控制器的类型,大致分为三类,分别是开环控制.前馈环控制和后馈环控制. 其中详细地讲解了前馈环控制器的分类以及控制策略,控制策略主 ...
- Gazebo构建小车模型并通过ROS控制
Gazebo构建小车模型并通过ROS控制 介绍 编写车子的URDF文件 编写控制小车移动的插件(与ROS交互) 结尾 介绍 突然想试试Gazebo这款仿真软件,因为它可以让你在任何时候都有机器人玩. ...
- 嵌入式的我们为什么要学ROS
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 前言 本来是要写一篇STM32移植ROS ...
最新文章
- 对于装饰器Decorator的理解
- opporeno3详细参数_vivox30和opporeno3哪个好 vivox30和opporeno3对比评测
- java 内部类 返回值_Java基础第10天+形式参数和返回值的问题、包、导包、权限修饰符、常见的修饰符、内部类(局部内部类,成员内部类,匿名内部类)...
- MySql 统计最近 6 个月内的数据,没有数据默认为显示为 0
- (vue基础试炼_02)使用vue.js实现隔2秒显示不同内容
- arm中断保护和恢复_浅谈ARM处理器的七种异常处理
- linux中的mysql使用_Linux下安装和使用MySQL(二)
- SQL数据库语言基础之SqlServer条件查询、排序数据表、like模糊查询【大总结】
- access统计各职务人数_东莞各阶段学生人数统计|终于知道为什么在东莞总是学位紧缺了...
- 对比Hashtable、HashMap、TreeMap有什么不同(转)
- 初步解决leiningen配置到Eclipse中出错的问题
- 7-1 Programming in C is fun! (5 分)
- 2021最新软件测试V4.0版本教程
- windows 查看局域网内所有已使用的IP
- Multi-UA V Cooperative Exploringfor the Unknown Indoor EnvironmentBased on Dynamic Target Tracking翻译
- 【零信任落地案例】吉大正元某大型集团公司零信任实践案例
- Openwrt无线中继设置并访问外网
- Android studio通过荣耀20调试Android程序
- 能力配不上位置,管理只能“累死”
- Unity 实用代码 小工具
热门文章
- Windows10 桌面不停的闪烁问题
- Office 2016 Pro Plus \ Project 专业版 \ Visio 专业版 \ 64 位vol版本方便KMS小马oem
- LiveData 机制详解
- 红米k50至尊版和小米12spro区别 哪个好
- 2022中山大学计算机考研专硕初试经验分享
- 小白入门python教程自学python
- python xposed_Xposed插件开发进阶篇
- Dvwa漏洞之代码执行漏洞
- 由“官方通知”论语音合成,一键合成你想要的语音
- 【调剂】上海海洋大学物理海洋学专业招收理学调剂硕士生