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。

----ROS 2 Bouncy Bolson发布!----机器翻译----
查看我们的安装说明和教程,并试一试!我们很高兴听到您的反馈和此版本将启用的应用程序!
要了解此版本中的内容,请务必阅读Bouncy发布页面。
我们希望在此版本中强调一些功能和改进:
- 新的和改进的ROS 2发布。
- 静态重新映射节点名称/主题以及通过命令行传递参数。
- 用于处理生命周期状态和参数的新命令行工具。
- 采用colcon作为推荐的构建工具。
- 支持二进制文件中所有三个受支持的RMW实现。
- 针对ROS 2原生rosbag实施的基础工作。
- 多个RViz显示移植到ROS 2。
- 安全性:除了RTI Connext之外,eProsima Fast-RTPS现在还提供访问控制支持。
- 支持ROS 2构建服务器场上的第三方软件包提交和“开发工作” 。
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'
----
图示如下:

----
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' ' '`

----
3-环境设置
ROS 1.0和ROS 2.0并存问题。
source /opt/ros/$ROS_DISTRO/setup.bash
在bash中写选择版本的Code即可,效果如下:


----
4-示例测试
4.1 talker-listener
T1:
ros2 run demo_nodes_cpp talker
T2:
ros2 run demo_nodes_py listener

4.2 help


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()

4.4 Run-time Compostion

4.5 image_tools



4.6 tf realtime 稍后补充
4.7 rviz2



4.8 ROS1和ROS2桥接


----
ROS 2 Bouncy使用教程稍后再做补充。
----英文原文----
ROS 2 Bouncy Bolson Released! By Tully Foote on July 2, 2018 5:43 PM更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv11932