ROS源码分析-week1

 2021SC@SDUSC

1. 本周工作目标

本周正式开始阅读ROS(ROS 1 Noetic)的源码。按照综述的计划,本周着手开始阅读ROS Master部分的源码。结合实际情况,本周的工作目标如下:

  • 寻找一些专业书籍,了解更多的详细信息

  • 下载ros源码,了解源码结构

  • 从源码编译ROS Master,为后续调试阅读做准备

关于ROS1和ROS2,有点像Python2和Python3的过渡,二者并不兼容,后者将是前者的替代。ROS1最后一个LTS版本(Noetic)将在2025年结束支持,ROS2的第一个LTS版本(Foxy Fitzroy)已经与2020年发布,支持3年,现在(2021.10月)处于一个二者并存的过渡期。

ROS2有很多地方进行了改进,比如在ROS2中没有ROS Master!更多比对在下面这个链接:

ROS1 vs ROS2, Practical Overview For ROS Developers - The Robotics Back-End

2. 找书

学习一门课程,最重要的知识来源就是书本。找了一圈,最好的书籍应该是动物园系列的《Programming Robots with ROS》,而中文书籍里相对不错的是《机器人操作系统ROS原理与应用》,但是都是“入门书籍”,似乎没有深入讲解源码的书籍。

3. ros源码结构分析

那么还是得自己看源码。先在官网找到一下两个wiki:

http://wiki.ros.org/Source code

RecommendedRepositoryUsage/CommonGitHubOrganizations - ROS Wiki

通过上述wiki,我们知道了两个事实:

  • 2013年以后,ROS的源码通过github、bitbucket等代码托管仓库进行托管和分发。

  • 在github上,ROS的源码分布在不同账号下的不同仓库。比如核心组件通过https://github.com/ros这个账号发布,控制导航库通过https://github.com/ros-planning这个账号发布,还有一个账号(https://github.com/ros-gbp)专门用于发布打包的源码。

那么,我们去ros账号下看看有什么仓库。我们在这里找到了

我们仔细研究一下这些仓库,比如把https://github.com/ros/ros仓库克隆到本地,观察(noetic-devel分支)的目录结构,结果在源码的第二层目录下发现了两个熟悉的文件:CMakelist.txt和package.xml!也就是说ROS的源码本身也是一些package,也使用catkin来管理、编译。一个git代码仓库里面有一系列相互联系的包,共同完成一个大功能。至此,我们大致了解了ros的源码组织结构。

P.S. 特别有意思的一点是,catkin的源码也是catkin包,也用catkin管理。

4. 从源码编译ROS

大致了解源码结构之后,我们先按照官网教程,从源码编译ROS一套流程走下来再说。官网wiki链接如下:

http://wiki.ros.org/Installation/Source

先跟着做完,做完再回头看道理。

官网教程写得很详细,自己跟着做的过程中只遇到了一些需要注意的小点:

  • 要在apt源配置里增加ros源

  • rosdep update的时候需要良好的国际网络连接

  • 虚拟机内存不能给太小,至少要3G,建议4G,否则编译一些大文件的时候会用光内存,然后系统卡死,如下图所示 。

编译完成之后,我们就可以像source /opt/ros/noetic/setup.bash一样,source ~/ros_catkin_ws/install_isolated/setup.bash,然后正常使用roscore等工具链了。至此,编译结束!

我们回头过来看看刚刚执行的操作的含义和原理。

他首先让我们安装了一些bootstrap dependencies,这是一些用来下载源码、管理源码依赖的元工具,实际上就是一些Python脚本。

然后他教我们开始下载ros的源代码。这里需要关注的就是他下载源代码的方式,上文我们了解了ros发布代码的方式,如果要我们一个一个地git clone各个仓库来下载我们所需的代码,那是会累死人的!所以,他使用了刚刚安装的rosinstall_generator工具获取了ROS noetic发行版的所有git仓库的下载链接,然后用vcs工具批量下载了所有源码。也就是说,执行完vcs import --input noetic-desktop.rosinstall ./src之后,所有的源码都下载到了工作区里./src文件夹下了。

下载到源码之后,我们就准备要编译了。首先要解决的是源码依赖的问题,这里他用的是rosdep工具分析源码,该工具自动调用apt install在Ubuntu里安装所需依赖。然后就正式开始编译了,这里调用的是./src/catkin/bin/catkin_make_isolated进行编译。没错,用下载的源码里的catkin工具编译整个工程!(这算是某种程度的自举了。)

catkin_make_isolated实际上也是用Python写的。

他这里用的是catkin_make_isolated,而不是catkin_make,这是为什么呢?二者的区别是什么呢?简答说来就是catkin_make把整个工程的所有包视作同一个项目,把各个包的CMakelist.txt和顶层的CMakelist.txt合并在一起生成一个总的CMakelist.txt,然后一次性编译。

catkin_make treats the entire workspace as a single cmake project, and builds it with a single invocation of cmake.

catkin_make_isolated treats each package as a separate cmake project, and builds and installs each separately, in dependency order.

catkin_make vs catkin_make_isolated, which is preferred? - ROS Answers: Open Source Q&A Forum

另一个佐证是,如果细心观察的话,你会发现./src目录下是没有顶层CMakelist.txt文件的。也就是说,这个workspace并不是一个整体的project。

5. 总结

万事开头难(,然后中间难,最后结尾难),这周总算大致把源码的阅读环境建立起来了,留待下周开始阅读。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ros-melodic-can-msgs 是一个 ROS 包,用于在 ROS 中使用和操作 Controller Area Network (CAN) 协议进行通信。其中包含了相关的消息和服务类型,用于在 ROS 系统中传输 CAN 相关的数据。你可以在这里找到 ros-melodic-can-msgs 的源代码:https://github.com/ros-drivers/can_msgs ros-melodic-can-msgs 是针对 ROS Melodic 版本开发的,Melodic 是 ROS 的一个发行版本。如果你正在使用其他版本的 ROS,你需要使用对应版本的 ros-can-msgs 包。 ### 回答2: ros-melodic-can-msgs是ROS(机器人操作系统)的一个软件包,它是用于CAN(控制器局域网络)通信的消息定义和工具。CAN是一种常用于车辆和其他实时控制系统中的网络通信协议。 这个软件包包含了一些重要的消息类型,用于在ROS中进行CAN数据的传输和解析。例如,它定义了CAN消息的ID、数据格式和长度等信息。这些消息类型可以让ROS系统和连接在CAN总线上的设备进行通信。 在ros-melodic-can-msgs源码中,我们可以看到定义了各种用于CAN通信的消息类型,比如CAN_Frame、CAN_FD_Frame和CAN_Error等。这些消息类型可以用于接收和发送CAN数据,并且还包括了一些附加的属性,比如时间戳等。 此外,源码中还提供了一些工具和函数,用于CAN数据的解析和处理。例如,它提供了一个解析CAN帧的函数,可以从CAN消息中提取数据和控制信息。同时,还可以将ROS中的消息转换为CAN消息,并将CAN消息转换为ROS消息,方便在ROS系统中使用CAN数据。 总之,ros-melodic-can-msgs是一个用于CAN通信的ROS软件包,提供了消息定义和工具,用于在ROS系统中处理和交换CAN数据。通过使用这个软件包,开发人员可以方便地使用ROS构建与CAN设备之间的通信,实现车辆控制和实时系统的开发。 ### 回答3: ros-melodic-can-msgs是ROS的一个软件包,用于处理Controller Area Network(CAN)通信协议的消息。这个软件包提供了在ROS系统中处理CAN消息的功能。 CAN是一种广泛应用于汽车、工业控制和机器人等领域的通信协议,它允许不同的设备通过总线共享数据。ros-melodic-can-msgs软件包的目的是为ROS系统添加对CAN通信的支持。 这个软件包包含了一系列的消息类型,用于定义在ROS系统中传输CAN消息。这些消息类型包括CAN帧消息类型、CAN控制器状态消息类型以及一些其他辅助消息类型。通过这些消息类型,ROS系统可以接收和发送CAN消息,实现与CAN总线上其他设备的通信。 除了消息类型,ros-melodic-can-msgs还提供了一些辅助工具和函数,用于处理CAN消息。这些工具和函数可以用于解析CAN帧消息、生成CAN帧消息以及读取和修改CAN控制器的状态。 使用ros-melodic-can-msgs,开发者可以将CAN通信集成到ROS系统中。他们可以通过订阅CAN消息话题来接收其他设备发送的CAN消息,并可以通过发布CAN消息话题来向其他设备发送CAN消息。这样,开发者可以方便地与CAN总线上的其他设备进行数据交换,并能够利用ROS系统提供的各种功能进行数据处理和分析。 总之,ros-melodic-can-msgs是一个在ROS系统中处理CAN通信的软件包,它提供了一系列的消息类型、工具和函数,使得开发者可以方便地与CAN总线上的设备进行数据交换和通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值