ROS 2 ardent apalone安装和使用说明

举报
zhangrelay 发表于 2021/07/15 05:08:19 2021/07/15
【摘要】 ROS 2 Ardent Apalone是机器人操作系统(2代)第一个正式版。 目前ROS 2和ROS 1 具体资料分别在如下两个网址:  I . ROS 1(代表indigo/kinetic):http://wiki.ros.org/ I I. ROS 2(代表ardent):https://github.com/ros2/ros2/wiki III. ROS 1...

ROS 2 Ardent Apalone是机器人操作系统(2代)第一个正式版。

目前ROS 2和ROS 1 具体资料分别在如下两个网址:

 I . ROS 1(代表indigo/kinetic):http://wiki.ros.org/

I I. ROS 2(代表ardent):https://github.com/ros2/ros2/wiki

III. ROS 1和ROS 2的一些资料:http://blog.csdn.net/zhangrelay/article/details/78418393

ROS十周年刚过,即发布了第一个ROS 2的正式版ardent apalone。



下面依据官网简单介绍一下ROS 2的安装,ROS 2 ardent提供了软件源和源代码编译两种安装使用方式,这和ROS 1是几乎完全一致的。

1. Linux安装(debians)

设置软件源,如下:

$ sudo apt update && sudo apt install curl

$ curl http://repo.ros2.org/repos.key | sudo apt-key add -


  
  1. % Total % Received % Xferd Average Speed Time Time Time Current
  2. Dload Upload Total Spent Left Speed
  3. 100 1679 100 1679 0 0 2887 0 --:--:-- --:--:-- --:--:-- 2889
  4. OK

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

2. 安装ROS 2软件包:

ROS 2的软件包命令如ROS 1,格式为ros-ardent-xxx,例如rviz,如下可以看到:

$ sudo apt-get install ros-ardent-rviz
ros-ardent-rviz2                 ros-ardent-rviz-ogre-vendor
ros-ardent-rviz-assimp-vendor    ros-ardent-rviz-rendering
ros-ardent-rviz-common           ros-ardent-rviz-rendering-tests
ros-ardent-rviz-default-plugins  ros-ardent-rviz-yaml-cpp-vendor

使用下面命令安装ROS 2 ardent全部包,注意,ros-ardent-ros1-bridge和ros-ardent-turtlebot2-*需要ROS 1的支持(需安装ROS Kinetic,需要请点击链接:http://blog.csdn.net/zhangrelay/article/details/51364622):

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


保持足够耐心等待安装结束,ROS 2已有的软件包如下:


  
  1. Display all 183 possibilities? (y or n)
  2. ros-ardent-actionlib-msgs ros-ardent-ament-uncrustify ros-ardent-lifecycle-msgs ros-ardent-rosidl-typesupport-interface
  3. ros-ardent-amcl ros-ardent-astra-camera ros-ardent-logging-demo ros-ardent-rosidl-typesupport-introspection-c
  4. ros-ardent-ament-clang-format ros-ardent-builtin-interfaces ros-ardent-map-server ros-ardent-rosidl-typesupport-introspection-cpp
  5. ros-ardent-ament-cmake ros-ardent-cartographer ros-ardent-nav-msgs ros-ardent-rosidl-typesupport-opensplice-c
  6. ros-ardent-ament-cmake-auto ros-ardent-cartographer-ros ros-ardent-opensplice-cmake-module ros-ardent-rosidl-typesupport-opensplice-cpp
  7. ros-ardent-ament-cmake-clang-format ros-ardent-cartographer-ros-msgs ros-ardent-orocos-kdl ros-ardent-ros-workspace
  8. ros-ardent-ament-cmake-copyright ros-ardent-class-loader ros-ardent-osrf-pycommon ros-ardent-rttest
  9. ros-ardent-ament-cmake-core ros-ardent-common-interfaces ros-ardent-pcl-conversions ros-ardent-rviz2
  10. ros-ardent-ament-cmake-cppcheck ros-ardent-composition ros-ardent-pendulum-control ros-ardent-rviz-assimp-vendor
  11. ros-ardent-ament-cmake-cpplint ros-ardent-console-bridge ros-ardent-pendulum-msgs ros-ardent-rviz-common
  12. ros-ardent-ament-cmake-export-definitions ros-ardent-demo-nodes-cpp ros-ardent-pluginlib ros-ardent-rviz-default-plugins
  13. ros-ardent-ament-cmake-export-dependencies ros-ardent-demo-nodes-cpp-native ros-ardent-poco-vendor ros-ardent-rviz-ogre-vendor
  14. ros-ardent-ament-cmake-export-include-directories ros-ardent-demo-nodes-py ros-ardent-python-cmake-module ros-ardent-rviz-rendering
  15. ros-ardent-ament-cmake-export-interfaces ros-ardent-depthimage-to-laserscan ros-ardent-rcl ros-ardent-rviz-rendering-tests
  16. ros-ardent-ament-cmake-export-libraries ros-ardent-depthimage-to-pointcloud2 ros-ardent-rclcpp ros-ardent-rviz-yaml-cpp-vendor
  17. ros-ardent-ament-cmake-export-link-flags ros-ardent-diagnostic-msgs ros-ardent-rclcpp-lifecycle ros-ardent-sensor-msgs
  18. ros-ardent-ament-cmake-flake8 ros-ardent-dummy-map-server ros-ardent-rcl-interfaces ros-ardent-shape-msgs
  19. ros-ardent-ament-cmake-gmock ros-ardent-dummy-robot-bringup ros-ardent-rcl-lifecycle ros-ardent-sros2
  20. ros-ardent-ament-cmake-gtest ros-ardent-dummy-sensors ros-ardent-rclpy ros-ardent-std-msgs
  21. ros-ardent-ament-cmake-include-directories ros-ardent-example-interfaces ros-ardent-rcutils ros-ardent-std-srvs
  22. ros-ardent-ament-cmake-libraries ros-ardent-examples-rclcpp-minimal-client ros-ardent-resource-retriever ros-ardent-stereo-msgs
  23. ros-ardent-ament-cmake-lint-cmake ros-ardent-examples-rclcpp-minimal-composition ros-ardent-rmw ros-ardent-teleop-twist-joy
  24. ros-ardent-ament-cmake-nose ros-ardent-examples-rclcpp-minimal-publisher ros-ardent-rmw-fastrtps-cpp ros-ardent-teleop-twist-keyboard
  25. ros-ardent-ament-cmake-pep257 ros-ardent-examples-rclcpp-minimal-service ros-ardent-rmw-implementation ros-ardent-test-msgs
  26. ros-ardent-ament-cmake-pep8 ros-ardent-examples-rclcpp-minimal-subscriber ros-ardent-rmw-implementation-cmake ros-ardent-tf2
  27. ros-ardent-ament-cmake-pyflakes ros-ardent-examples-rclcpp-minimal-timer ros-ardent-rmw-opensplice-cpp ros-ardent-tf2-eigen
  28. ros-ardent-ament-cmake-pytest ros-ardent-examples-rclpy-executors ros-ardent-robot-state-publisher ros-ardent-tf2-geometry-msgs
  29. ros-ardent-ament-cmake-python ros-ardent-examples-rclpy-minimal-client ros-ardent-ros1-bridge ros-ardent-tf2-msgs
  30. ros-ardent-ament-cmake-ros ros-ardent-examples-rclpy-minimal-publisher ros-ardent-ros2cli ros-ardent-tf2-ros
  31. ros-ardent-ament-cmake-target-dependencies ros-ardent-examples-rclpy-minimal-service ros-ardent-ros2msg ros-ardent-tinyxml2-vendor
  32. ros-ardent-ament-cmake-test ros-ardent-examples-rclpy-minimal-subscriber ros-ardent-ros2node ros-ardent-tinyxml-vendor
  33. ros-ardent-ament-cmake-uncrustify ros-ardent-fastcdr ros-ardent-ros2pkg ros-ardent-tlsf
  34. ros-ardent-ament-copyright ros-ardent-fastrtps ros-ardent-ros2run ros-ardent-tlsf-cpp
  35. ros-ardent-ament-cppcheck ros-ardent-fastrtps-cmake-module ros-ardent-ros2service ros-ardent-topic-monitor
  36. ros-ardent-ament-cpplint ros-ardent-geometry-msgs ros-ardent-ros2srv ros-ardent-trajectory-msgs
  37. ros-ardent-ament-flake8 ros-ardent-gmock-vendor ros-ardent-ros2topic ros-ardent-turtlebot2-amcl
  38. ros-ardent-ament-index-cpp ros-ardent-gtest-vendor ros-ardent-rosidl-cmake ros-ardent-turtlebot2-cartographer
  39. ros-ardent-ament-index-python ros-ardent-image-geometry ros-ardent-rosidl-default-generators ros-ardent-turtlebot2-drivers
  40. ros-ardent-ament-lint-auto ros-ardent-image-tools ros-ardent-rosidl-default-runtime ros-ardent-turtlebot2-follower
  41. ros-ardent-ament-lint-cmake ros-ardent-intra-process-demo ros-ardent-rosidl-generator-c ros-ardent-turtlebot2-teleop
  42. ros-ardent-ament-lint-common ros-ardent-joy ros-ardent-rosidl-generator-cpp ros-ardent-uncrustify
  43. ros-ardent-ament-package ros-ardent-kdl-parser ros-ardent-rosidl-generator-dds-idl ros-ardent-urdf
  44. ros-ardent-ament-pep257 ros-ardent-launch ros-ardent-rosidl-generator-py ros-ardent-urdfdom
  45. ros-ardent-ament-pep8 ros-ardent-launch-testing ros-ardent-rosidl-parser ros-ardent-urdfdom-headers
  46. ros-ardent-ament-pyflakes ros-ardent-libcurl-vendor ros-ardent-rosidl-typesupport-c ros-ardent-visualization-msgs
  47. ros-ardent-ament-tools ros-ardent-lifecycle ros-ardent-rosidl-typesupport-cpp

3. 环境设置

这个也和ROS 1是保持一致的,如下:

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


如果有Python包argcomplete(版本0.8.5或更高),可以导入如下文件获取命令行工具:

$ source /opt/ros/ardent/share/ros2cli/environment/ros2-argcomplete.bash


4. 选择RMW实现

默认情况下,RMW使用FastRPTS,通过设置环境变量RMW_IMPLEMENTATION=rmw_opensplice_cpp,可以切换为OpenSplice。


5. 使用ROS 1功能包的附加包

在ROS 2和ROS 1都安装配置完成的系统,可以通过ros1_bridge同时使用,如果使用Docker可以避免环境之间的切换等配置,安装如下包:

$ sudo apt install ros-ardent-ros1-bridge ros-ardent-turtlebot2-*


如果之前安装过ROS 2 b3版本,在配置时会出现一些警告,最佳解决方法是卸载beta版本。


  
  1. $ source /opt/ros/ardent/setup.bash
  2. Warning: OSPL_URI was already set to [[file:///opt/ros/r2b3/share/opensplice_cmake_module/config/ros_ospl.xml]]. This will not override it to the default [[file:///opt/ros/ardent/share/opensplice_cmake_module/config/ros_ospl.xml]]. Please make sure this is the config that you want.

$ sudo apt-get remove ros-r2b3-*


6. 测试

使用消息收发进行测试,如下,如正常则安装完成,进入教程进行学习:




源码安装请参考官网,推荐优先阅读官网。


----


----

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,只要它在所有主要平台上受支持。

Python

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

重用现有的中间件

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

建立系统

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

支持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的二进制包。


附件(相关资料):

-ROS 2-

ROS 2

机器人操作系统(ROS)是一套软件库和工具,可帮助您构建机器人应用程序。从驱动程序到最先进的算法,以及功能强大的开发人员工具,ROS都可以为您的下一个机器人项目提供所需的内容。这都是开源的。

在这里,您将找到关于如何安装和使用ROS 2的软件的文档,ROS 2正在大力开发之中。请参阅下面有关ROS 2的更多信息。

如果您正在寻找有关ROS 1的信息(即,ROS已经存在10多年,现在可能会用到),请查看ROS网站文档wiki

在继续阅读之前,请阅读功能页面以了解当前ROS 2版本的内容。

安装

请参阅安装页面

教程和功能

ROS 2正在大力发展。您可以检查出的教程页面看到一系列的什么系统可以在当前状态下做的,如果它适合你的工程实例今天取决于具体的要求。有关当前功能的详细信息,请参阅功能

计划

ROS 2目前计划每六个月发布一个新版本(这是ROS 1的两倍),以便社区成员有机会提供有关不断发展的系统的早期反馈。有关即将推出的ROS 2功能的详细信息,请参阅路线图

约定

有关如何为ROS 2开发做出贡献的详细信息,请参阅贡献页面开发人员指南

报告或提出问题

查看联系页面

关于ROS 2

自2007年启动ROS以来,机器人和ROS社区发生了很大变化。ROS 2项目的目标是适应这些变化,充分利用ROS 1的优点,改进不是什么。有一个关于ROS 2的动机完整的文章在这里

在哪里可以找到更多信息

design.ros2.org上有关于ROS 2设计的各种文章,例如:为什么要使用ROS 2.0?DDS上的ROS,以及ROS 1和ROS 2之间的变化

ROS 2的代码是开源的,分解成各种版本库。您可以在ros2 github组织中找到大多数存储库的代码

docs.ros2.org包含有关ROS 2内部设计和组织的最新详细信息。

awesome-ros2是ROS 2软件包和资源的“备忘单”风格快速参考,它将获得(希望)在精选列表的列表中列出,以帮助GitHub用户了解ROS 2。

以下是关于ROS 2的ROSCon讲座,并提供了有关ROS 2和各种演示工作的信息:

标题 类型 链接
ROS 2推动机器人发展未来的愿景 ROSCon 2017演示文稿 幻灯片 / 视频
ROS 2更新 - alpha发布摘要,架构概述 ROSCon 2016演示文稿 幻灯片 / 视频
评估ROS2通信层的弹性 ROSCon 2016演示文稿 幻灯片 / 视频
ROS 2的状态 - 演示和背后的技术 ROSCon 2015演示文稿 幻灯片 / 视频
ROS 2在“小型”嵌入式系统上 ROSCon 2015演示文稿 幻灯片 / 视频
ROS和ROS 2.0中的实时控制 ROSCon 2015演示文稿 幻灯片 / 视频
你为什么要使用ROS 2 ROSCon 2014演示文稿 幻灯片 / 视频
下一代ROS:建立在DDS上 ROSCon 2014演示文稿 幻灯片 / 视频

-ROS 1-

ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议。

ROS:

  • 安装

    • 在你的机器上安装ROS。

    入门

    • 学习ROS的相关概念、客户端函数库以及技术梗概等。

    教程

    • ROS手把手教程,提供每一步详细操作命令。

    贡献

    • 如何加入ROS社区,比如分享你的代码。

    支持

    • 遇到问题可以从这里寻求支持和帮助。

软件:

机器人/硬件:

出版物、课程以及活动:

  • 论文

    • 带开源代码的ROS相关论文。

    书籍

    • 出版书籍,包括文档、教程和开源代码等。

    课程

    • 使用或教授ROS的课程。

    活动

    • 历史活动和相关资料。

ROS中国:

世界各地wiki镜像站点。


----





文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/78778590

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。