热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ROS1和ROS2的前世、今生、安装使用说明与资料汇总

----ROS2ArdentApalone发布----现在,最常用的ROSindigo或ROSKinetic等都是1.0时代的ROS,这个时代的ROS有一个master(roscore)。

----ROS 2 Ardent Apalone发布----

现在,最常用的ROS indigo或ROS Kinetic等都是1.0时代的ROS,这个时代的ROS有一个master(roscore)。


历经10年发展,不断壮大。那么问题来了为什么会有ROS 2.0?

要想搞清楚这个问题,需要参考ROS 2.0设计网址:http://design.ros2.org/

这里摘录一段话,选自Why ROS 2.0:

Why not just enhance ROS 1

In principle, the changes described above could be integrated into the existing core ROS code. E.g., new transport technologies could be added to roscpp and rospy. We considered this option and concluded that, given the intrusive nature of the changes that would be required to achieve the benefits that we are seeking, there is too much risk associated with changing the current ROS system that is relied upon by so many people. We want ROS 1 as it exists today to keep working and be unaffected by the development of ROS 2. So ROS 2 will be built as a parallel set of packages that can be installed alongside and interoperate with ROS 1 (e.g., through message bridges).

----

为什么不改进完善ROS 1.0?

从本质上来说,上面描述的更改都可以集成到现有的ROS核心代码中。如,新的传输机制可以添加到roscpp和rospy中。但是当我们考虑到下面问题时,就能理解这个结论,即这些改进和优化对原有系统会造成入侵式的变化,改变当前ROS系统有非常大的风险,当前有很多功能是开发人员依赖原ROS系统开发的。于是,我们既继续维护ROS 1.0,不受ROS 2.0的影响,同时进行ROS 2.0的设计。ROS 2.0与ROS 1.0并行不悖,同时通过消息桥接进行通信。

----

下面放几张图,大家感受一下两者的差别:

图1,架构图


Master没了,节点平等了,无主节点了。DDS是什么?数据分发服务。我想到了微软的DSS(分布式软件服务)。

图2,数据发布与订阅

    

需要了解更多内容,推荐古月居ROS 2.0探索总结+ROS 1.0和ROS 2.0到底用哪个呢?

ROS1与ROS2的区别?http://design.ros2.org/articles/changes.html

ROS 1和ROS 2之间的区别

本文概述了ROS 2与ROS 1相比所做的更改。

原作者:德克托马斯

前言

尽可能简短地描述每一个变化,但是给熟悉ROS 1的读者提供足够的上下文和理由。如果有更多的外部信息可用(例如其他文章),应该将其链接到。

某些描述的功能尚不可用,并标有⏳。

平台和依赖关系

平台

ROS 1仅在Ubuntu上进行CI测试。社区在其他Linux版本以及OS X上积极支持。

ROS 2目前在Ubuntu Xenial,OS X El Capitan以及Windows 10上进行了CI测试和支持(请参阅ci.ros2.org)。

语言

C ++标准

ROS 1的核心是针对C ++ 03,并没有在其API中使用C ++ 11功能。ROS 2广泛使用C ++ 11,并使用C ++ 14的某些部分。在未来,ROS 2可能会开始使用C ++ 17,只要它在所有主要平台上受支持。

蟒蛇

ROS 1是针对Python 2. ROS 2至少需要Python版本3.5。

重用现有的中间件

ROS 1使用自定义序列化格式,自定义传输协议以及自定义中央发现机制。ROS 2有一个抽象的中间件接口,通过它提供序列化,传输和发现。目前这个接口的所有实现都是基于DDS标准的。这使得ROS 2能够提供各种服务质量的策略,从而改善通过不同网络的通信。

建立系统

有关构建系统的更多信息,请参见柔夷花序文章。

支持CMake旁边的其他构建系统

每个ROS包都是一个CMake项目。在ROS 2中,可以轻松地支持其他构建系统。现在构建工具支持CMake旁边的纯Python包。

Python包

在ROS 1中,使用Python代码的软件包只能使用setup.py文件中可用功能的一小部分,因为setup.py文件是由CMake内的自定义逻辑处理的。在ROS 2中,一个Python包可以使用setup.py文件中的任何东西,例如入口点,因为它们被调用python3 setup.py install

环境设置

在ROS 1中,构建工具会生成脚本,这些脚本必须来源以便在能够使用构建的ROS软件包之前设置环境。这种方法只有在使用ROS特定的构建工具构建ROS包时才有效。

在ROS 2中,环境设置分为特定于包的脚本和特定于工作空间的脚本。每个软件包都提供了必要的脚本,使其在构建后可用。构建工具只调用特定于工作空间的脚本,然后调用特定于包的脚本。

没有非隔离的构建

在ROS 1中,可以在单个CMake上下文中构建多个包。虽然这加快了构建步骤,但是每个包都需要确保正确定义了交叉包目标依赖关系。另外所有的软件包共享相同的命名空间,导致目标名称冲突等。

在ROS 2中,只支持隔离的构建,即每个包都是独立构建的。安装空间可以是隔离的或合并的。

没有开发空间

在ROS 1中,可以在不安装包的情况下构建包。从开发空间与源空间结合起来,系统已经可以使用。但是每个软件包都必须积极支持开发空间,例如环境钩子和CMake代码。

在ROS 2中,必须先安装一个软件包,然后才能使用它。

ROS 1中的开发空间的一个原因是使开发人员能够更改文件,例如Python代码或启动文件,并直接使用修改后的代码,而无需重新编译软件包。在ROS 2中保留了这个好处,可以选择性地用符号链接替换安装步骤中的复制操作。

支持catkin_simple用例

在ROS 1中,包catkin_simple旨在使编写ROS包的CMake代码变得更容易。在许多情况下,它不能实现这个目标,这通常是由于像开发空间这样的支持功能所必需的设计的限制。

在ROS 2中,CMake API进行了重组,以支持这个用例。

对没有清单的软件包的最小支持

在ROS 1中,构建系统只考虑具有清单文件的包。在ROS 2中,可以在没有清单文件的文件夹中检测具有支持的构建系统的包。如果软件包遵循惯例,甚至有可能检测到一些缺失的元信息(如依赖关系)。

消息,服务

有关更多信息,请参阅ROS接口定义文章。

C ++中的分隔名称空间

在ROS 1中,.msg和.srv文件可以具有相同的名称,但生成的代码会发生冲突。请求和响应部分的服务也是如此。

在ROS 2中,生成的代码使用单独的名称空间来保证它是无冲突的。

Python中的同名

为消息和服务生成的Python代码当前在ROS 1和ROS 2中使用相同的模块和类名称。因此,它们不能在单个应用程序中导入。如果需要,这个决定可能会被重新审视。

消息定义中的可选默认值

在ROS 2中,消息中的原始值现在可以具有默认值,在消息构建时设置。非原始字段(即字符串数组,嵌套消息)的默认值不可能(⏳)。

数组和字符串的可选上限

为了计算消息在内存中的最大大小,这是必要的,这允许用动态大小预分配消息。这对性能和实时用例很有用。

统一持续时间和时间类型

在ROS 1中,持续时间和时间类型是在客户端库中定义的。数据结构的成员名称在C ++(sec,nsec)和Python(secs,nsecs)中是不同的。

在ROS 2中,这些类型被定义为消息,因此在不同的语言中是一致的。

从标题消息中删除序列字段

该领域已被弃用了很长一段时间,并没有在ROS 1中一贯设置。

客户端库

跨语言

主题命名空间(⏳)

目前ROS 2不支持主题名称中的命名空间。这主要是由于DDS主题名称中有效字符的限制。一个设计文档描述了如何在未来应该加入。

通知

在ROS 1中,关于ROS图的所有信息都必须从主站查询。在ROS 2中,更改将发布,例如,如果参数已更改,则会发出通知。

具有生命周期的组件

在ROS 1中,每个节点通常都有自己的主要功能。在ROS 2中,建议从具有生命周期的组件中继承子类。

生命周期可以被像roslaunch这样的工具用来以确定性的方式启动一个由许多组件组成的系统(⏳)。

有关更多信息,请参阅节点生命周期文章。

参数和动态重新配置

在ROS 1中,全局参数和节点特定的动态重新配置参数是两个单独的概念。在ROS 2中,正在使用统一的方法。它类似于动态重新配置,名为“全局参数服务器”(⏳)的节点将接受无条件设置值的请求。在ROS 1中,所有这些信息都需要被调查,因为ROS 2的变化将被公布以通知其他实体。

欲了解更多信息,请参阅参数设计文章。

行动(⏳)

ROS 2目前没有行动的概念。它将在未来作为可抢占服务器和反馈发布者的组合加入。

线程模型

在ROS 1中,开发人员只能选择单线程执行或多线程执行。在ROS 2中,更多的粒度执行模型可以在C ++中使用(例如跨越多个节点),并且自定义执行器可以轻松实现。对于Python来说,执行模型还没有实现。

ROS图表

在ROS 1中,节点和主题只能在启动时重新映射。在ROS 2中,对重映射的支持尚未实现(⏳)。目标是启用重新映射以及别名,不仅在启动时间,而且在运行时。

在ROS 1中,节点名称是唯一的,当启动具有相同名称的新节点时,通过关闭现有节点来强制实施。在ROS 2中,节点名称的唯一性还没有被强制执行。

C和C ++

支持实时

ROS 1不支持编写实时代码,而是依赖于Orocos等外部框架。在ROS 2中,当使用合适的RTOS和仔细编写的用户代码时,可以编写实时节点。

C ++

节点与Nodelet

在ROS 1中,节点和节点的API是不同的,并且需要开发者在编程时决定节点到进程的映射。在ROS 2中,建议将每个组件编译成一个共享库,然后可以在单独的进程中加载​​它,或与其他组件(如ROS 1 nodelets)共享相同的进程。这使得可以在部署时选择流程布局。

每个进程允许多个节点

在ROS 1中,不可能在一个进程中创建多个节点。这是由于API本身,也是由于内部的实施决定。在ROS 2中,可以在一个进程中创建多个节点。

工具

roslaunch(⏳)

在ROS 1中,roslaunch文件是用XML定义的,功能非常有限。在ROS 2中,启动文件是用Python编写的,可以使用更复杂的逻辑,如条件等。当前状态只提供最小的功能来运行使用多个进程的测试。

资源查找

在ROS 1中,通过基于ROS_PACKAGE_PATH搜索文件系统来查找各种资源(包,消息,插件等)。当ROS_PACKAGE_PATH中的树很大时,这可能导致性能较差,并且缓存产生不一致的状态。

在ROS 2中,资源可以在编译时在索引处注册,然后在运行时被有效查询。有关更多信息,请参阅资源索引的文档

打包

ABI版本控制(⏳)

由于它假定ABI不兼容,ROS 1重建所有下游软件包。为了避免这种大的开销,ROS 2包应该能够声明它的ABI,以尽可能避免重建下游包。

Windows二进制包(⏳)

ROS 1只能从Windows上的源代码(也只适用于几个ROS软件包,不受支持)构建。ROS 2将提供基于Chocolatey的二进制包。


~~~~

~~~~

小乌龟动起来


relaybot@relaybot-desktop:~$ rosnode list /ros_bridge/rosout/turtlesimrelaybot@relaybot-desktop:~$ ros2 node list teleop_turtleros_bridgeros_bridgeteleop_turtlerelaybot@relaybot-desktop:~$ ros2 topic list/color_sensor/parameter_events/pose/turtle1/cmd_velrelaybot@relaybot-desktop:~$ rostopic list /rosout/rosout_agg/turtle1/cmd_vel/turtle1/color_sensor/turtle1/pose


$ ros2 run ros1_bridge dynamic_bridgeCreated 2 to 1 bridge for service /clearCreated 2 to 1 bridge for service /resetcreated 2to1 bridge for topic '/turtle1/cmd_vel' with ROS 2 type 'geometry_msgs/Twist' and ROS 1 type ''[INFO] [ros1_bridge]: Passing message from ROS 2 ROS2_T to ROS 1 ROS1_T (showing msg only once per type) (ros2_callback() at /tmp/binarydeb/ros-r2b3-ros1-bridge-0.0.3/include/ros1_bridge/factory.hpp:144)


下面介绍一下ROS 2.0的安装和使用

官方wiki: https://github.com/ros2/ros2/wiki

这里有一点需要特别说明,ROS 2.0是支持Linux,Mac OS X和Windows,但仍然是使用Ubuntu最方便。

安装过程比较简单,直接使用Debian包即可,简单说一下,参考链接:https://github.com/ros2/ros2/wiki/Installation

设置安装源:

sudo apt update && sudo apt install curlcurl http://repo.ros2.org/repos.key | sudo apt-key add -
sudo sh -c 'echo "deb http://repo.ros2.org/ubuntu/main xenial main" > /etc/apt/sources.list.d/ros2-latest.list'

安装ROS 2.0软件包:

sudo apt updatesudo apt install `apt list ros-r2b3-* 2> /dev/null | grep "/" | awk -F/ '{print $1}' | grep -v -e ros-r2b3-ros1-bridge -e ros-r2b3-turtlebot2- | tr "\n" " "`

环境配置:

source /opt/ros/r2b3/setup.bash

如果需要与ROS 1.0通信

sudo apt updatesudo apt install ros-r2b3-ros1-bridge ros-r2b3-turtlebot2-*

具体安装请参考英文原版网址。

----

下面我们来测试一下ROS 2.0。

老方法在一个终端发送消息,另一个终端接受消息:

ros2 run demo_nodes_cpp talker

ros2 run demo_nodes_py listener



发布TF数据:

ros2 run tf2_ros static_transform_publisher -- 1 2 3 0.5 0.1 -1.0 foo bar

ros2 run tf2_ros tf2_echo -- foo bar



测试USB摄像头:

ros2 run image_tools cam2image

ros2 run image_tools showimage



----

ROS 1.0和ROS 2.0的示例:

1. 简单的发布和订阅

需要四个终端,需要注意环境配置:



2.  图像传输




3. 服务


ros2.0的命令与ros1.0保持了比较好的兼容性。示例如下:


relaybot@relaybot-desktop:~$ ros2 pkg executablesamcl amclastra_camera astra_camera_nodeastra_camera create_udev_rulescartographer_ros cartographer_nodecomposition api_compositioncomposition api_composition_clicomposition dlopen_compositioncomposition linktime_compositioncomposition manual_compositiondemo_nodes_cpp add_two_ints_clientdemo_nodes_cpp add_two_ints_client_asyncdemo_nodes_cpp add_two_ints_serverdemo_nodes_cpp allocator_tutorialdemo_nodes_cpp imu_listenerdemo_nodes_cpp list_parametersdemo_nodes_cpp list_parameters_asyncdemo_nodes_cpp listenerdemo_nodes_cpp listener_best_effortdemo_nodes_cpp one_off_timerdemo_nodes_cpp parameter_eventsdemo_nodes_cpp parameter_events_asyncdemo_nodes_cpp parameter_nodedemo_nodes_cpp reuse_timerdemo_nodes_cpp ros2paramdemo_nodes_cpp set_and_get_parametersdemo_nodes_cpp set_and_get_parameters_asyncdemo_nodes_cpp talkerdemo_nodes_cpp_native talkerdemo_nodes_py add_two_ints_clientdemo_nodes_py add_two_ints_client_asyncdemo_nodes_py add_two_ints_serverdemo_nodes_py listenerdemo_nodes_py listener_qosdemo_nodes_py talkerdemo_nodes_py talker_qosdepthimage_to_laserscan depthimage_to_laserscan_nodedepthimage_to_pointcloud2 depthimage_to_pointcloud2_nodedummy_map_server dummy_map_serverdummy_sensors dummy_joint_statesdummy_sensors dummy_laserexamples_rclcpp_minimal_client client_mainexamples_rclcpp_minimal_composition composition_composedexamples_rclcpp_minimal_composition composition_publisherexamples_rclcpp_minimal_composition composition_subscriberexamples_rclcpp_minimal_publisher publisher_lambdaexamples_rclcpp_minimal_publisher publisher_member_functionexamples_rclcpp_minimal_publisher publisher_not_composableexamples_rclcpp_minimal_service service_mainexamples_rclcpp_minimal_subscriber subscriber_lambdaexamples_rclcpp_minimal_subscriber subscriber_member_functionexamples_rclcpp_minimal_subscriber subscriber_not_composableexamples_rclcpp_minimal_timer timer_lambdaexamples_rclcpp_minimal_timer timer_member_functionexamples_rclpy_executors callback_groupexamples_rclpy_executors composedexamples_rclpy_executors custom_callback_groupexamples_rclpy_executors custom_executorexamples_rclpy_executors listenerexamples_rclpy_executors talkerexamples_rclpy_minimal_client clientexamples_rclpy_minimal_client client_asyncexamples_rclpy_minimal_client client_async_member_functionexamples_rclpy_minimal_publisher publisher_local_functionexamples_rclpy_minimal_publisher publisher_member_functionexamples_rclpy_minimal_publisher publisher_old_schoolexamples_rclpy_minimal_service serviceexamples_rclpy_minimal_service service_member_functionexamples_rclpy_minimal_subscriber subscriber_lambdaexamples_rclpy_minimal_subscriber subscriber_member_functionexamples_rclpy_minimal_subscriber subscriber_old_schoolimage_tools cam2imageimage_tools showimageintra_process_demo camera_nodeintra_process_demo cyclic_pipelineintra_process_demo image_pipeline_all_in_oneintra_process_demo image_pipeline_with_two_image_viewintra_process_demo image_view_nodeintra_process_demo two_node_pipelineintra_process_demo watermark_nodejoy joy_nodelifecycle lifecycle_listenerlifecycle lifecycle_service_clientlifecycle lifecycle_service_client_py.pylifecycle lifecycle_talkermap_server map_savermap_server map_serverrobot_state_publisher robot_state_publisherros1_bridge dynamic_bridgeros1_bridge ros1_bridge_generate_factoriesros1_bridge parameter_bridgeros1_bridge simple_bridgeros1_bridge simple_bridge_1_to_2ros1_bridge simple_bridge_2_to_1ros1_bridge static_bridgeros1_bridge test_ros2_client_cppros1_bridge test_ros2_server_cpprosidl_generator_c rosidl_generator_crosidl_generator_cpp rosidl_generator_cpprosidl_generator_dds_idl rosidl_generator_dds_idlrosidl_generator_py rosidl_generator_pyrosidl_typesupport_c rosidl_typesupport_crosidl_typesupport_cpp rosidl_typesupport_cpprosidl_typesupport_introspection_c rosidl_typesupport_introspection_crosidl_typesupport_introspection_cpp rosidl_typesupport_introspection_cpprosidl_typesupport_opensplice_c rosidl_typesupport_opensplice_crosidl_typesupport_opensplice_cpp rosidl_typesupport_opensplice_cppteleop_twist_joy teleop_nodeteleop_twist_keyboard teleop_twist_keyboardtf2_ros static_transform_publishertf2_ros tf2_echotf2_ros tf2_monitortopic_monitor data_publishertopic_monitor launch_depth_demotopic_monitor launch_fragmentation_demotopic_monitor launch_reliability_demotopic_monitor topic_monitorturtlebot2_drivers dumb_teleopturtlebot2_drivers kobuki_nodeturtlebot2_follower followerrelaybot@relaybot-desktop:~$ 


relaybot@relaybot-desktop:~$ ros2 topic -husage: ros2 topic [-h] [--include-hidden-topics]                  Call `ros2 topic  -h` for more detailed usage. ...Various topic related sub-commandsoptional arguments:  -h, --help            show this help message and exit  --include-hidden-topics                        Consider hidden topics as wellCommands:  echo  Output messages from a topic  list  Output a list of available topics  pub   Publish a message to a topic  Call `ros2 topic  -h` for more detailed usage.relaybot@relaybot-desktop:~$ ros2 topic list/parameter_eventsrelaybot@relaybot-desktop:~$ ros2 node listros_bridgerelaybot@relaybot-desktop:~$ relaybot@relaybot-desktop:~$ ros2 --helpusage: ros2 [-h] Call `ros2  -h` for more detailed usage. ...ros2 is an extensible command-line tool for ROS 2.optional arguments:  -h, --help            show this help message and exitCommands:  daemon    Various daemon related sub-commands  msg       Various msg related sub-commands  node      Various node related sub-commands  pkg       Various package related sub-commands  run       Run a package specific executable  security  Various security related sub-commands  service   Various service related sub-commands  srv       Various srv related sub-commands  topic     Various topic related sub-commands  Call `ros2  -h` for more detailed usage.


资料汇总:

------

机器人操作系统(ROS)的2.0时代(ROS 2.0) 

一个精心设计的机器人操作系统2.0版本(ROS 2.0)资源和库的列表

内容

  • 软件
  • 文档
  • 图书
  • 培训
  • 演讲

软件包(或库)

  • 示例
    • examples / rclcpp - C ++示例。
    • examples / rclpy - Python示例。
    • rcljava_examples - 包含如何使用rcljava API的示例的软件包。
    • ros2_talker_android,ros2_listener_android - 用于ROS2 Java绑定的Android应用程序示例。
  • “系统”绑定
    • rclandroid - Android API for ROS2。
    • rclnodejs - Node.js版本的ROS2.0客户端。
    • riot-ros2 - 该项目使ROS2能够使用RIOT操作系统在微控制器上运行。
  • 客户端库
    • rclcpp - C ++的ROS客户端库。
    • rclpy - 用于Python的ROS客户端库。
    • rcljava - 用于Java的ROS客户端库。
    • rclobjc - Objective C的ROS客户端库(适用于iOS)。
    • rclc - C的ROS客户端库
    • rosserial - 用于小型嵌入式设备(如Arduino)的ROS客户端库。
  • IDL生成器
    • rosidl_generator_java - 在Java中生成ROS接口。
    • rosidl_generator_objc - 生成Objective C中的ROS接口。
    • rosidl_generator_cpp - 在C ++中生成ROS接口。
    • rosidl_generator_py - 在Python中生成ROS接口。
    • rosidl_generator_c - 在C中生成ROS接口
  • RMW(ROS中间件接口)
    • rmw - 包含ROS中间件API。
    • rmw_connext_cpp - 使用C ++中的RTI Connext静态代码生成实现ROS中间件接口。
    • rmw_fastrtps_cpp - 使用C ++中的eProsima FastRTPS静态代码实现ROS中间件界面。
    • rmw_opensplice_cpp - 使用C ++中的PrismTech OpenSplice静态代码生成实现ROS中间件界面。
  • 编译系统(Linux)
    • meta-ros2 - 用于OpenEmbedded Linux的ROS 2层
  • 编译系统(ROS2)
    • ament_cmake_export_jars - 将Java归档导出到CMake中的ament构建系统中的下游程序包的功能。
    • rmw_implementation_cmake - 可以发现和枚举可用实现的CMake功能。

文档

  • ROS 2设计 - 指导和指导ROS 2.0设计工作的文章。
  • ROS 2文档(概述) - 有关ROS 2内部设计和组织的详细信息。
  • ROS 2维基 - 入口点用于查找有关ROS 2的所有信息。

图书

没有书出版

培训班

还没有课程

演讲

  • ROSCon 2017
    • 推出用于机器人未来开发的ROS 2.0愿景    幻灯片 视频
    • ROS2改进和细节调整    幻灯片 视频
    • 在Turtlebot2使用ROS2实现SLAM    幻灯片 视频
    • 使用ROS2进行基于视觉的操作与工业机器人    幻灯片 视频
  • ROSCon 2016
    • ROS 2更新    幻灯片 视频
    • 评估ROS2通信层的扩展性    幻灯片 视频
  • ROSCon 2015
    • “小”嵌入式系统上的ROS 2    幻灯片 视频
    • ROS 2状态 - 演示和背后的技术    幻灯片 视频
    • ROS 2的实时性能    幻灯片 视频

------

发布Ardent Apalone
Chris Lalancette  


ROS 2 Ardent Apalone(代号“ardent”; 2017年12月)

欢迎使用Ardent Apalone的ROS 2软件的第一个非beta版本

支持的平台

这个版本的ROS 2支持三种平台:

  • Ubuntu 16.04(Xenial)
  • Mac OS X 10.12(Sierra)
  • Windows 10

所有3个平台都提供了二进制包以及如何从源代码编译的说明(请参阅安装说明以及文档)。

特征

  • 分布式发现,发布/订阅,请求/响应通信
    • 由C API提供
    • 使用不同的供应商实施:
      • eProsima的FastRTPS以及凌华的OpenSplice(来自二进制和源代码)
      • RTI的Connext(仅来自源)
    • 许多服务质量的设置处理非理想的网络
    • DDS安全支持(使用Connext和FastRTPS)
  • C ++和Python 3客户端库
    • 在C中共享通用代码来统一实现
    • 执行模型与节点分离,可组合的节点
    • 节点特定的参数(仅在C ++ atm中)
    • 生命周期(仅在C ++ atm中)
    • 可选的使用相同API的进程内通信(仅在C ++中)
  • 消息定义(包含数组和字符串以及默认值)
  • 命令行工具(例如ros2 run
  • rviz 与几个显示类型(Windows版本可能会在几个星期后)
  • 基于文件系统的资源索引(查询信息无递归爬行)
  • pub / sub的实时安全代码路径(仅兼容DDS实现)
  • ROS 1和ROS 2之间的桥梁
  • HSR演示参见Beta 3
  • Turtlebot演示请参阅Beta 2

有关更详细的说明,请参阅功能页面。

自Beta 3发布以来的更改

自Beta 3版本以来的改进:

  • rviz
  • C ++中消息数据结构的不同初始化选项
  • 记录API改进,现在也用于演示
  • 用C ++支持不同的时钟
  • Python客户端库中的等待服务支持
  • REP 149的实现草案指定了包清单文件的格式3

已知的问题

  • FastRTPS性能与更大的数据,如图像演示
  • 使用Connext,目前不允许具有相同基本名称但名称空间不同的两个主题具有不同的类型(请参见问题)。
  • 节点名称(例如使用ros2 node list)的列表在某些rmw实现中不起作用。
  • 在Windows上,尝试中止使用时,Python启动文件可能会挂起Ctrl-C(请参阅问题)。为了继续使用被挂起命令阻塞的shell,可能需要使用进程监视器来结束挂起的Python进程。

------

ROS 2 Ardent Apalone发布
ros2



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
author-avatar
kas8288408
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有