ROS 1和ROS 2同步开发发行,目前最新ROS 1的版本号为M,而ROS 2的版本号为B,ROS 2 Bouncy正式发布。

目前,ROS packages for Ardent状态为maintained(186);for Bouncy状态为developed(63)。

请等待正式发布。已经正式发布,2018年7月3日。

参考链接:http://www.ros.org/news/2018/07/ros-2-bouncy-bolson-released.html

ROS 2 Bouncy Bolson支持Ubuntu 18.04, Ubuntu 16.04, Mac OS X 10.12, Windows 10。

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ubuntu

----ROS 2 Bouncy Bolson发布!----机器翻译----

查看我们的安装说明和教程,并试一试!我们很高兴听到您的反馈和此版本将启用的应用程序!

要了解此版本中的内容,请务必阅读Bouncy发布页面

我们希望在此版本中强调一些功能和改进:

Bouncy Bolson是第二个非beta版本的ROS 2,将支持错误修复和平台更新(特别是关于滚动依赖关系,如Windows和MacOS)一年,支持将于2019年6月结束。虽然我们的目标是将API保持为尽可能稳定,我们无法保证版本之间的100%API兼容性。检查功能页面和ROS 2路线图,以评估ROS 2是否已准备好用于您的应用程序,或者您是否可以从ROS 1切换到ROS 2,因为它将取决于您的用例的确切功能集和要求。

与往常一样,我们邀请您试用新软件,提供反馈,报告错误和建议功能(并提供代码!):https://github.com/ros2/ros2/wiki/Contact我们也邀请您发布你的ROS 2套餐在Bouncy!这是一个教程

我们还想宣布下一个ROS 2版本的名称:Crystal Clemmys

友好的ROS 2团队

----

ROS 1和ROS 2同步学习推荐:

1. 在Ubuntu 16.04中使用ROS 1 Kinetic和ROS 2 Ardent;

2. 在Ubuntu 18.04中使用ROS 1 Melodic和ROS 2 Bouncy。

下面简单介绍一下通过Debian Packages安装ROS 2 Bouncy:

具体内容,推荐参考官网教程:https://github.com/ros2/ros2/wiki/Linux-Install-Debians

根多关于ROS 2的详细内容参考如下:

1:( https://github.com/ros2/ros2/wiki

2:( https://github.com/fkromer/awesome-ros2

请注意:ROS 2 Bouncy对应Ubuntu Bionic(18.04 LTS);ROS 2 Ardent对应Ubuntu Xenial(16.04 LTS)。

1-设置安装源

主要分为如下两步:

1.1

sudo apt update && sudo apt install curl
curl http://repo.ros2.org/repos.key | sudo apt-key add -
----

1.2

sudo sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
----

图示如下:

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_sed_02

----

2-安装ROS 2软件包

同样分为如下两步:

2.1

export ROS_DISTRO=bouncy
----

2.2

旧:

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

新:

sudo apt update
sudo apt install `apt list "ros-$ROS_DISTRO-*" 2> /dev/null | \
  grep '/' | awk -F/ '{print $1}' | \
  grep -v -e ros-$ROS_DISTRO-ros1-bridge \
  -e ros-$ROS_DISTRO-turtlebot2- \
  -e "ros-$ROS_DISTRO.*-dbgsym" \
  -e "ros-$ROS_DISTRO-.*opensplice" \
  -e "ros-$ROS_DISTRO-.*connext" | tr '\n' ' '`
在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_sed_03

----

3-环境设置

ROS 1.0和ROS 2.0并存问题。

source /opt/ros/$ROS_DISTRO/setup.bash

在bash中写选择版本的Code即可,效果如下:

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_sed_04

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_Bouncy_05

----

4-示例测试

4.1 talker-listener

T1:
ros2 run demo_nodes_cpp talker
T2:
ros2 run demo_nodes_py listener

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_sed_06


4.2 help

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ROS2_07

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_python_08


4.3 Launch

# Copyright 2018 Open Source Robotics Foundation, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Launch a lifecycle talker and a lifecycle listener."""

import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))  # noqa
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', 'launch'))  # noqa

import launch
import launch.actions
import launch.events

from launch_ros import get_default_launch_description
import launch_ros.actions
import launch_ros.events
import launch_ros.events.lifecycle

import lifecycle_msgs.msg


def main(argv=sys.argv[1:]):
    """Main."""
    ld = launch.LaunchDescription()

    # Prepare the talker node.
    talker_node = launch_ros.actions.LifecycleNode(
        node_name='talker',
        package='lifecycle', node_executable='lifecycle_talker', output='screen')

    # When the talker reaches the 'inactive' state, make it take the 'activate' transition.
    register_event_handler_for_talker_reaches_inactive_state = launch.actions.RegisterEventHandler(
        launch_ros.event_handlers.OnStateTransition(
            target_lifecycle_node=talker_node, goal_state='inactive',
            entities=[
                launch.actions.LogInfo(
                    msg="node 'talker' reached the 'inactive' state, 'activating'."),
                launch.actions.EmitEvent(event=launch_ros.events.lifecycle.ChangeState(
                    lifecycle_node_matcher=launch.events.process.matches_action(talker_node),
                    transition_id=lifecycle_msgs.msg.Transition.TRANSITION_ACTIVATE,
                )),
            ],
        )
    )

    # When the talker node reaches the 'active' state, log a message and start the listener node.
    register_event_handler_for_talker_reaches_active_state = launch.actions.RegisterEventHandler(
        launch_ros.event_handlers.OnStateTransition(
            target_lifecycle_node=talker_node, goal_state='active',
            entities=[
                launch.actions.LogInfo(
                    msg="node 'talker' reached the 'active' state, launching 'listener'."),
                launch_ros.actions.LifecycleNode(
                    node_name='listener',
                    package='lifecycle', node_executable='lifecycle_listener', output='screen'),
            ],
        )
    )

    # Make the talker node take the 'configure' transition.
    emit_event_to_request_that_talker_does_configure_transition = launch.actions.EmitEvent(
        event=launch_ros.events.lifecycle.ChangeState(
            lifecycle_node_matcher=launch.events.process.matches_action(talker_node),
            transition_id=lifecycle_msgs.msg.Transition.TRANSITION_CONFIGURE,
        )
    )

    # Add the actions to the launch description.
    # The order they are added reflects the order in which they will be executed.
    ld.add_action(register_event_handler_for_talker_reaches_inactive_state)
    ld.add_action(register_event_handler_for_talker_reaches_active_state)
    ld.add_action(talker_node)
    ld.add_action(emit_event_to_request_that_talker_does_configure_transition)

    print('Starting introspection of launch description...')
    print('')

    print(launch.LaunchIntrospector().format_launch_description(ld))

    print('')
    print('Starting launch of launch description...')
    print('')

    # ls = LaunchService(argv=argv, debug=True)
    ls = launch.LaunchService(argv=argv)
    ls.include_launch_description(get_default_launch_description(prefix_output_with_name=False))
    ls.include_launch_description(ld)
    return ls.run()


if __name__ == '__main__':
main()

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_python_09


4.4 Run-time Compostion

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_sed_10


4.5 image_tools

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ROS2_11

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ROS2_12

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_Bouncy_13


4.6 tf realtime 稍后补充在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ubuntu_14


4.7 rviz2

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_python_15

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_Bouncy_16

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_python_17


4.8 ROS1和ROS2桥接

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_Bouncy_18

在Ubuntu 18.04 LTS安装ROS 2 Bouncy版机器人操作系统_ubuntu_19

----

ROS 2 Bouncy使用教程稍后再做补充。

----英文原文----

ROS 2 Bouncy Bolson Released! By Tully Foote on July 2, 2018 5:43 PM

更多文章请关注《万象专栏》