diff --git a/docs/en/_toc.yaml b/docs/en/_toc.yaml index ba231fd05be58dd83cc67bf5b899b557116e1586..86d82b0c5c7708e8b78851bb6220442d84951fe4 100644 --- a/docs/en/_toc.yaml +++ b/docs/en/_toc.yaml @@ -1,16 +1,12 @@ label: ROS User Guide isManual: true -description: Install, deploy, and use ROS on openEuler. +description: Install, deploy, and use ROS on openEuler sections: - - label: ROS User Guide + - label: Overview href: ./ros_user_guide.md - label: Getting to Know ROS href: ./getting_to_know_ros.md - label: Installation and Deployment href: ./installation_and_deployment.md - - label: Usage - href: ./usage_guide.md - - label: Common Issues and Solutions - href: ./faqs_and_solutions.md - label: Appendix href: ./appendix.md diff --git a/docs/en/faqs_and_solutions.md b/docs/en/faqs_and_solutions.md deleted file mode 100644 index f5933a9ead3745a027a0d2e32590438e052dd47c..0000000000000000000000000000000000000000 --- a/docs/en/faqs_and_solutions.md +++ /dev/null @@ -1,3 +0,0 @@ -# Common Issues and Solutions - -This document is currently not available in English. diff --git a/docs/en/usage_guide.md b/docs/en/usage_guide.md deleted file mode 100644 index fdef6804f1b60f0e5ae25973ca4150ed6254ba08..0000000000000000000000000000000000000000 --- a/docs/en/usage_guide.md +++ /dev/null @@ -1,3 +0,0 @@ -# Usage - -This document is currently not available in English. diff --git a/docs/zh/_toc.yaml b/docs/zh/_toc.yaml index 2d4d0cdc80b04aa5ba6ba598ff2b8e5d8d6f0d87..73534eba7d8aade2db21617641c9648dd16ff94a 100644 --- a/docs/zh/_toc.yaml +++ b/docs/zh/_toc.yaml @@ -1,8 +1,8 @@ label: ROS 用户指南 isManual: true -description: 主要介绍了 openEuler 系统上 ROS 的安装部署与使用方法。 +description: 在 openEuler 系统上安装、部署并使用 ROS sections: - - label: ROS 用户指南 + - label: 概述 href: ./ros_user_guide.md - label: 认识ROS href: ./getting_to_know_ros.md diff --git a/docs/zh/appendix.md b/docs/zh/appendix.md index 4c655afc3676c17c3b97c8840784057fcd4f2665..42e75cb508f555e122a8ed6ac3243e2075698f93 100644 --- a/docs/zh/appendix.md +++ b/docs/zh/appendix.md @@ -1,4 +1,3 @@ # 附录 -更详细的ROS介绍可访问[ROS wiki](https://wiki.ros.org/),[ROS docs](http://docs.ros.org/),[ROS2 docs](https://docs.ros.org/en/humble/index.html) ,[openEuler ROS SIG 详细文档](https://openeuler-ros-docs.readthedocs.io/en/latest/)获取。 - +更详细的ROS介绍可访问[ROS wiki](https://wiki.ros.org/),[ROS docs](http://docs.ros.org/),[ROS2 docs](https://docs.ros.org/en/humble/index.html),[openEuler ROS SIG 详细文档](https://openeuler-ros-docs.readthedocs.io/en/latest/)获取。 diff --git a/docs/zh/base_tutorials/command_line_tool.md b/docs/zh/base_tutorials/command_line_tool.md index a06150d5ef240ded4bfd0c2d61b7c8e6f18dc3bd..4acd67b53884f9ca069e22537ca1a207c6d317db 100644 --- a/docs/zh/base_tutorials/command_line_tool.md +++ b/docs/zh/base_tutorials/command_line_tool.md @@ -2,7 +2,7 @@ ## ROS使用 -ROS 提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下: +ROS 提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下: - rosnode : 操作节点 - rostopic : 操作话题 @@ -11,9 +11,9 @@ ROS 提供了一些实用的命令行工具,可以用于获取不同节点的 - rossrv : 操作srv消息 - rosparam : 操作参数 -另请参考: +另请参考: -http://wiki.ros.org/ROS/CommandLineTools + ## ROS2使用 @@ -43,11 +43,10 @@ Commands: run Run a package specific executable security Various security related sub-commands service Various service related sub-commands - test Run a ROS2 launch test + test Run a ROS 2 launch test topic Various topic related sub-commands trace Trace ROS nodes to get information on their execution wtf Use `wtf` as alias to `doctor` Call `ros2 -h` for more detailed usage. ``` - diff --git a/docs/zh/base_tutorials/create_workspace.md b/docs/zh/base_tutorials/create_workspace.md index 2ffa673205d998f01886b82d5958f9ef147b3bc0..db271c736c0bbb878a511b574ce77f1604f53791 100644 --- a/docs/zh/base_tutorials/create_workspace.md +++ b/docs/zh/base_tutorials/create_workspace.md @@ -1,8 +1,8 @@ # 工作空间和功能包构建 -在前面的章节中,我们已经安装好了openEuler系统和ROS2 Humble完整版 +在前面的章节中,我们已经安装好了openEuler系统和ROS2 Humble完整版。 -本小节将介绍如何创建自己的工作空间构建代码,并简单测试节点间的Topic和Service通信 +本小节将介绍如何创建自己的工作空间构建代码,并简单测试节点间的Topic和Service通信。 ## 创建工作空间 @@ -10,27 +10,27 @@ ROS 工作空间(workspace)是一个具有特定结构的目录,用来存 打开终端,输入以下命令创建一个名为“ros2_ws”的工作空间以及其下的src子目录: -``` +```bash mkdir -p ~/ros2_ws/src ``` 此时src目录下为空,下面我们下载[ros_arm_tutorials](https://gitee.com/xiao_yun_wang/ros_arm_tutorials/tree/ros2-humble/)仓库的代码到src目录下,作为后续测试节点通信的示例源代码: -``` +```bash cd ~/ros2_ws/src git clone -b ros2-humble https://gitee.com/xiao_yun_wang/ros_arm_tutorials.git ``` 下载完成后,我们可以安装tree工具用来查看工作空间下的目录结构: -``` +```bash dnf install tree tree -L 3 ``` ![1](../figures/base_1/003.png) -ros_arm_tutorials 的ros2-humble分支代码共包含以下五个功能包: +ros_arm_tutorials 的 ros2-humble 分支代码共包含以下五个功能包: | 功能包(软件包) | 内容 | | ------------------- | ------------------------------------------------------------ | @@ -38,15 +38,15 @@ ros_arm_tutorials 的ros2-humble分支代码共包含以下五个功能包: | advance_demo | action 的定义和服务端/客户端节点、ROS 常用工具、动态参数配置节点、TF2示例节点、RVIZ Marker发布和显示等 | | myrobot_description | 三自由度机械臂和移动小车的URDF模型 | | xarm_description | XBot-Arm 机械臂 URDF 模型文件包 | -| xarm_moveit_config | 使用配置助手生成的 XBot-Arm 机械臂 MoveIt!配置和启动功能包 | +| xarm_moveit_config | 使用配置助手生成的 XBot-Arm 机械臂 MoveIt! 配置和启动功能包 | 更多说明可参考原仓库 ## 构建功能包 -ROS2使用colcon 构建工具进行源代码的构建,更多信息可参考:[设计文档](https://design.ros2.org/articles/build_tool.html) +ROS2 使用 colcon 构建工具进行源代码的构建,更多信息可参考:[设计文档](https://design.ros2.org/articles/build_tool.html) -默认情况下,colcon会创建以下目录作为 src 目录的同级目录: +默认情况下,colcon 会创建以下目录作为 src 目录的同级目录: - build:存放中间文件。 @@ -56,20 +56,20 @@ ROS2使用colcon 构建工具进行源代码的构建,更多信息可参考: 由于 ament_cmake 等联编类型不支持开发空间的概念,需要安装软件包,因此 colcon 支持选项 --symlink-install。这允许通过更改源代码空间中的文件(如 Python 文件或其他非编译资源)来更改已安装的文件,从而加快迭代速度。 -安装colcon: +安装 colcon: -``` +```bash pip3 install -U pytest colcon-common-extensions ``` -在工作空间的根目录下,使用colcon构建功能包。 +在工作空间的根目录下,使用 colcon 构建功能包。 -``` +```bash cd ~/ros2_ws/ colcon build --symlink-install ``` -构建过程中因使用的cmake版本不一致等原因可能会出现一些warnning,可先忽略。 +构建过程中因使用的 CMake 版本不一致等原因可能会出现一些 warning,可先忽略。 ![1](../figures/base_1/001.png) @@ -79,7 +79,7 @@ colcon build --symlink-install ## 设置环境 -执行 `source ~/ros2_ws/install/setup.bash` 设置环境,或者运行以下命令添加到`.bashrc`中 +执行`source ~/ros2_ws/install/setup.bash`设置环境,或者运行以下命令添加到`.bashrc`中。 ```bash echo "source ~/ros2_ws/install/setup.bash" >> ~/.bashrc @@ -88,35 +88,35 @@ source ~/.bashrc ## 测试Topic通信节点 -ROS2基于分布式的设计,将复杂系统分为许多用于实现不用功能的模块化节点(进程)。不同节点之间通过消息传递数据。Topic话题通信是一种基于发布/订阅的异步通信机制,base_demo功能包中提供了Topic通信的示例代码节点。每个节点都提供了Python与Cpp两种编程方式的实现。 +ROS2基于分布式的设计,将复杂系统分为许多用于实现不同功能的模块化节点(进程)。不同节点之间通过消息传递数据。Topic话题通信是一种基于发布/订阅的异步通信机制,base_demo功能包中提供了Topic通信的示例代码节点。每个节点都提供了Python与Cpp两种编程方式的实现。 打开终端,输入以下命令启动话题发布端的Python节点或者CPP节点: -``` +```bash ros2 run base_demo topic_pub.py ``` or -``` +```bash ros2 run base_demo topic_pub ``` -新开终端,输入`ros2 topic list`可以查看当前的话题列表,其中/robot_info是节点发布的话题 +新开终端,输入`ros2 topic list`可以查看当前的话题列表,其中/robot_info是节点发布的话题。 输入`ros2 topic echo /robot_info`可以看到话题接收到的消息: ![1](../figures/base_1/005.png) -新开终端,输入以下命令启动话题订阅端的Python节点 +新开终端,输入以下命令启动话题订阅端的Python节点: -``` +```bash ros2 run base_demo topic_sub.py ``` 或者启动CPP节点: -``` +```bash ros2 run base_demo topic_sub ``` @@ -130,41 +130,41 @@ Service通信是一种基于请求/响应模式的同步通信方式。base_demo 打开终端,输入以下命令启动Service服务端的Python节点: -``` +```bash ros2 run base_demo service_server.py ``` 或者CPP节点: -``` +```bash ros2 run base_demo service_server ``` 新开终端,输入以下命令启动Service客户端的Python节点: -``` +```bash ros2 run base_demo service_client.py ``` -或者CPP节点: +或者Cpp节点: -``` +```bash ros2 run base_demo service_client ``` -客户端节点启动后会向代码中自定义的服务发送请求,服务端接收到请求的信息后会进行处理并在终端提示“Target object is box”“find box and response”,同时反馈响应信息 +客户端节点启动后会向代码中自定义的服务发送请求,服务端接收到请求的信息后会进行处理并在终端提示“Target object is box”“find box and response”,同时反馈响应信息。 -客户端节点接收到响应后会在终端相应的信息: +客户端节点接收到响应后会在终端显示相应的信息: ![1](../figures/base_1/007.png) -!注意:本小节主要介绍工作空间的创建和代码包的构建,源码编写过程可参考 +**注意**:本小节主要介绍工作空间的创建和代码包的构建,源码编写过程可参考。 [ros_arm_tutorials](https://gitee.com/xiao_yun_wang/ros_arm_tutorials/tree/ros2-humble/) 大家可以参考此教程在openEuler系统上编译构建自己的ROS程序~ -## 参考资料: +## 参考资料 -- https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries.html -- https://gitee.com/xiao_yun_wang/ros_arm_tutorials +- +- diff --git a/docs/zh/base_tutorials/understand_ros2_action.md b/docs/zh/base_tutorials/understand_ros2_action.md index 931ae842a59c3ef7e236d8f223dcbcbd0cf649b4..fcfb84e07d00781201cf76f13af87ca68acf828b 100644 --- a/docs/zh/base_tutorials/understand_ros2_action.md +++ b/docs/zh/base_tutorials/understand_ros2_action.md @@ -1,10 +1,12 @@ # 理解动作 + ## 背景 + 行为是ROS 2中的一种通信类型,用于长时间运行的任务。它们由三个部分组成:目标(goal),反馈(feedback)和结果(result)。 行为是建立在话题(topics)和服务(services)之上的。它们的功能类似于服务,但行为可以被取消。与只返回单个响应的服务不同,行为还提供稳定的反馈。 -动作使用客户端-服务器模型,类似于发布者-订阅者模型(在理解话题中有描述 )。一个"动作客户端"节点向一个"动作服务器"节点发送一个目标,服务器节点确认目标并返回一系列反馈和结果流。 +动作使用客户端-服务器模型,类似于发布者-订阅者模型(在理解话题中有描述)。一个“动作客户端”节点向一个“动作服务器”节点发送一个目标,服务器节点确认目标并返回一系列反馈和结果流。 ![image](../figures/Action-SingleActionClient.gif) @@ -12,7 +14,7 @@ ### 1 设置 -启动两个 turtlesim 节点, `/turtlesim` 和 `/teleop_turtle`. +启动两个 turtlesim 节点,`/turtlesim` 和 `/teleop_turtle`。 打开一个新的终端并运行: @@ -28,42 +30,43 @@ ros2 run turtlesim turtle_teleop_key ### 2 使用动作 -当你启动`/teleop_turtle` 节点时,你将在终端中看到以下消息: +当你启动 `/teleop_turtle` 节点时,你将在终端中看到以下消息: ``` console Use arrow keys to move the turtle. Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rotation. ``` -让我们关注第二行,它对应一个动作。(第一条指令对应之前在 topics 教程 中讨论的 "cmd_vel" 话题。) +让我们关注第二行,它对应一个动作。(第一条指令对应之前在 topics 教程中讨论的 "cmd_vel" 话题。) 请注意,在美国的 QWERTY 键盘上,字母键 `G|B|V|C|D|E|R|T` 组成了围绕 `F` 键的“方框”(如果你没有使用 QWERTY 键盘,请查看 [此链接](https://upload.wikimedia.org/wikipedia/commons/d/da/KB_United_States.svg) -以便跟随)。 每个键在 F 周围的位置对应 turtlesim 中的方向。例如,按下 E 将使乌龟的方向旋转到左上角。 +以便跟随)。每个键在 F 周围的位置对应 turtlesim 中的方向。例如,按下 E 将使乌龟的方向旋转到左上角。 -请注意运行``/turtlesim``节点的终端。每次按下其中一个按键,都会向``/turtlesim``节点中的动作服务器发送一个目标。目标是将乌龟旋转到面向特定方向。当乌龟完成旋转时,应该显示一个传达目标结果的消息: +请注意运行`/turtlesim`节点的终端。每次按下其中一个按键,都会向`/turtlesim`节点中的动作服务器发送一个目标。目标是将乌龟旋转到面向特定方向。当乌龟完成旋转时,应该显示一个传达目标结果的消息: ``` console [INFO] [turtlesim]: Rotation goal completed successfully ``` -按下``F``键将取消正在执行的目标。 +按下`F`键将取消正在执行的目标。 -尝试在乌龟完成旋转之前按下``C``键,然后再按下``F``键。在运行``/turtlesim``节点的终端中,你将看到以下消息: +尝试在乌龟完成旋转之前按下`C`键,然后再按下`F`键。在运行`/turtlesim`节点的终端中,你将看到以下消息: ``` console [INFO] [turtlesim]: Rotation goal canceled ``` -不仅客户端(你在teleop中输入的内容),而且服务器端(``/turtlesim``节点)也可以停止目标的执行。当服务器端选择停止处理目标时,称为“中止”目标。 +不仅客户端(你在teleop中输入的内容),而且服务器端(`/turtlesim`节点)也可以停止目标的执行。当服务器端选择停止处理目标时,称为“中止”目标。 -在第一个旋转完成之前,请尝试按下 D 键,然后按下 G 键。在运行``/turtlesim``节点的终端中,您将看到以下消息: +在第一个旋转完成之前,请尝试按下 D 键,然后按下 G 键。在运行`/turtlesim`节点的终端中,您将看到以下消息: ``` console [WARN] [turtlesim]: Rotation goal received before a previous goal finished. Aborting previous goal ``` 这个动作服务器选择中止第一个目标,因为它收到了一个新的目标。它也可以选择其他操作,比如拒绝新目标或在第一个目标完成后执行第二个目标。不要假设每个动作服务器在收到新目标时都会选择中止当前目标。 + ### 3 ros2节点信息 要查看一个节点提供的动作列表,例如这里的 /turtlesim,请打开一个新的终端并运行以下命令: @@ -72,7 +75,7 @@ Use G|B|V|C|D|E|R|T keys to rotate to absolute orientations. 'F' to cancel a rot ros2 node info /turtlesim ``` -它将返回``/turtlesim``的订阅者、发布者、服务、动作服务器和动作客户端的列表: +它将返回`/turtlesim`的订阅者、发布者、服务、动作服务器和动作客户端的列表: ``` console /turtlesim @@ -105,9 +108,9 @@ ros2 node info /turtlesim Action Clients: ``` -请注意,/turtlesim``中的/turtle1/rotate_absolute``动作位于``动作服务器``下。这意味着``/turtlesim``对``/turtle1/rotate_absolute``动作进行响应并提供反馈。 +请注意,`/turtlesim`中的`/turtle1/rotate_absolute`动作位于**动作服务器**下。这意味着`/turtlesim`对`/turtle1/rotate_absolute`动作进行响应并提供反馈。 -/teleop_turtle``节点的名称为/turtle1/rotate_absolute``,位于``动作客户端``下,这意味着它发送该动作名称的目标。要查看,请运行: +`/teleop_turtle`节点的名称为`/turtle1/rotate_absolute`,位于**动作客户端**下,这意味着它发送该动作名称的目标。要查看,请运行: ``` console ros2 node info /teleop_turtle @@ -152,7 +155,7 @@ ros2 action list /turtle1/rotate_absolute ``` -目前ROS图中只有一个动作。它控制着乌龟的旋转,就像您之前看到的那样。您还已经知道,对于这个动作,有一个动作客户端(位于``/teleop_turtle``)和一个动作服务器(位于``/turtlesim``),可以使用``ros2 node info ``命令查看。 +目前ROS图中只有一个动作。它控制着乌龟的旋转,就像您之前看到的那样。此外,您已经知道,对于这个动作,有一个动作客户端(位于`/teleop_turtle`)和一个动作服务器(位于`/turtlesim`),可以使用`ros2 node info `命令查看。 #### 4.1 ros2 action list -t @@ -168,11 +171,11 @@ ros2 action list -t /turtle1/rotate_absolute [turtlesim/action/RotateAbsolute] ``` -在每个动作名称右侧的括号中(在这种情况下只有``/turtle1/rotate_absolute``),是动作类型``turtlesim/action/RotateAbsolute``。当你想要从命令行或代码中执行一个动作时,你将需要它。 +在每个动作名称右侧的括号中(在这种情况下只有`/turtle1/rotate_absolute`),是动作类型`turtlesim/action/RotateAbsolute`。当你想要从命令行或代码中执行一个动作时,你将需要它。 ### 5 ros2 action info -你可以使用以下命令进一步检查``/turtle1/rotate_absolute``动作: +你可以使用以下命令进一步检查`/turtle1/rotate_absolute`动作: ``` console ros2 action info /turtle1/rotate_absolute @@ -188,13 +191,13 @@ Action servers: 1 /turtlesim ``` -这告诉我们之前在每个节点上运行``ros2 node info``时学到的内容:/teleop_turtle``节点具有一个动作客户端,而/turtlesim``节点具有一个``/turtle1/rotate_absolute``动作的动作服务器。 +这告诉我们之前在每个节点上运行`ros2 node info`时学到的内容:`/teleop_turtle`节点具有一个动作客户端,而`/turtlesim`节点具有一个`/turtle1/rotate_absolute`动作的动作服务器。 ### 6 ros2 interface show 在发送或执行动作目标之前,您还需要了解动作类型的结构。 -回想一下,在运行命令``ros2 action list -t``时,您识别了``/turtle1/rotate_absolute``的类型。在终端中输入以下带有动作类型的命令: +回想一下,在运行命令`ros2 action list -t`时,您识别了`/turtle1/rotate_absolute`的类型。在终端中输入以下带有动作类型的命令: ``` console ros2 interface show turtlesim/action/RotateAbsolute @@ -254,7 +257,7 @@ Goal finished with status: SUCCEEDED ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: -1.57}" --feedback ``` -终端将返回以下消息: +终端将返回以下消息: ``` console Sending goal: @@ -284,13 +287,12 @@ Goal finished with status: SUCCEEDED 一个机器人系统可能会使用动作进行导航。一个动作目标可以告诉机器人前往一个位置。当机器人导航到该位置时,它可以沿途发送更新(即反馈),然后在到达目的地后发送最终结果消息。 -Turtlesim具有一个动作服务器,动作客户端可以向其发送旋转乌龟的目标。在本教程中,您可以内省该动作``/turtle1/rotate_absolute``,以更好地了解动作是什么以及它们是如何工作的。 - +Turtlesim具有一个动作服务器,动作客户端可以向其发送旋转乌龟的目标。在本教程中,您可以内省该动作`/turtle1/rotate_absolute`,以更好地了解动作是什么以及它们是如何工作的。 ## 相关内容 您可以在[ROS 2](https://design.ros2.org/articles/actions.html)了解有关动作设计决策的更多信息。 -本文引用: --1:[https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) +本文引用: --2:[https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) +[1] [https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) +[2] [https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) diff --git a/docs/zh/base_tutorials/understand_ros2_service.md b/docs/zh/base_tutorials/understand_ros2_service.md index 3c1849bdc45c45e03c0eee49098554d5604d33ce..6187973d0ae8af6efd9773591d60cee9fd212e14 100644 --- a/docs/zh/base_tutorials/understand_ros2_service.md +++ b/docs/zh/base_tutorials/understand_ros2_service.md @@ -1,4 +1,3 @@ - # 了解服务 **目标:** 使用命令行工具学习ROS 2中的服务。 @@ -11,12 +10,11 @@ ![image](../figures/Service-MultipleServiceClient.gif) - ## 任务 ### 1 设置 -启动两个 turtlesim 节点, `/turtlesim` and `/teleop_turtle`. +启动两个 turtlesim 节点,`/turtlesim` and `/teleop_turtle`。 打开一个新的终端并运行: @@ -56,22 +54,22 @@ ros2 run turtlesim turtle_teleop_key /turtlesim/set_parameters_atomically ``` -你会发现两个节点都有相同的六个以``parameters``结尾的服务。ROS 2中几乎每个节点都有这些基础设施服务,参数就是构建在这些服务之上的。下一个教程将更多地介绍参数。在本教程中,将省略对参数服务的讨论。 +你会发现两个节点都有相同的六个以`parameters`结尾的服务。ROS 2中几乎每个节点都有这些基础设施服务,参数就是构建在这些服务之上的。下一个教程将更多地介绍参数。在本教程中,将省略对参数服务的讨论。 -现在,让我们专注于turtlesim特定的服务 `/clear`, -`/kill`, `/reset`, `/spawn`, `/turtle1/set_pen`, -`/turtle1/teleport_absolute`,和 `/turtle1/teleport_relative`. +现在,让我们专注于turtlesim特定的服务`/clear`,`/kill`,`/reset`,`/spawn`,`/turtle1/set_pen`,`/turtle1/teleport_absolute`和`/turtle1/teleport_relative`。 ### 3 ros2服务类型 服务具有描述服务的请求和响应数据结构的类型。服务类型的定义类似于话题类型,但服务类型由请求部分和响应部分组成。 要找出服务的类型,请使用以下命令: + ``` console ros2 service type ``` 让我们来看一下 turtlesim 的 `/clear` 服务。在新的终端中,输入以下命令: + ``` console ros2 service type /clear ``` @@ -86,7 +84,7 @@ std_srvs/srv/Empty #### 3.1 ros2 service list -t -要同时查看所有活动服务的类型,可以将 `--show-types` 选项(缩写为``-t``), 附加到``list``命令后面: +要同时查看所有活动服务的类型,可以将 `--show-types` 选项(缩写为`-t`), 附加到`list`命令后面: ``` console ros2 service list -t @@ -148,10 +146,9 @@ ros2 interface show std_srvs/srv/Empty ``` `---` 分隔了请求结构(上方)和响应结构(下方)。但是,正如您之前学到的那样,`Empty` 类型不发送或接收任何数据。因此,它的结构自然为空白。 -让我们来查看一个发送和接收数据的服务类型,比如 `/spawn`。 通过 `ros2 service list -t` 的结果,我们知道 -`/spawn`的类型是 `turtlesim/srv/Spawn`. +让我们来查看一个发送和接收数据的服务类型,比如 `/spawn`。通过 `ros2 service list -t` 的结果,我们知道 `/spawn` 的类型是 `turtlesim/srv/Spawn`。 -要查看`/spawn` 服务的请求和响应参数,请运行以下命令: +要查看 `/spawn` 服务的请求和响应参数,请运行以下命令: ``` console ros2 interface show turtlesim/srv/Spawn @@ -168,19 +165,19 @@ string name # Optional. A unique name will be created and returned if this is e string name ``` - `---` 行上方的信息告诉我们调用 `/spawn` 需要的参数。 `x`, `y` 和`theta` 决定了生成的乌龟的二维姿态,而 `name` 显然是可选的。 +`---` 行上方的信息告诉我们调用 `/spawn` 需要的参数。`x`,`y` 和 `theta` 决定了生成的乌龟的二维姿态,而 `name` 显然是可选的。 下划线以下的信息在这种情况下不是您需要了解的内容,但它可以帮助您理解调用返回的响应的数据类型。 + ### 6 ros2 服务调用 -既然您知道了什么是服务类型,如何找到服务的类型,以及如何找到该类型参数的结构,您可以使用以下命令调用服务 +既然您知道了什么是服务类型,如何找到服务的类型,以及如何找到该类型参数的结构,您可以使用以下命令调用服务: ``` console ros2 service call ``` - `` 部分是可选的。例如,您知道 `Empty` -类型的服务没有任何参数: +`` 部分是可选的。例如,您知道 `Empty` 类型的服务没有任何参数: ``` console ros2 service call /clear std_srvs/srv/Empty @@ -190,7 +187,7 @@ ros2 service call /clear std_srvs/srv/Empty ![image](../figures/clear.png) -现在让我们通过调用``/spawn``并设置参数来生成一个新的乌龟。在从命令行进行服务调用时,输入的````需要使用YAML语法。 +现在让我们通过调用`/spawn`并设置参数来生成一个新的乌龟。在从命令行进行服务调用时,输入的``需要使用YAML语法。 输入以下命令: @@ -220,6 +217,5 @@ turtlesim.srv.Spawn_Response(name='turtle2') 在本教程中,你使用命令行工具来识别、内省和调用服务。 本文引用: --1:[https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) --2:[https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) - +[1]:[https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) +[2]:[https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) diff --git a/docs/zh/base_tutorials/understand_ros2_topics.md b/docs/zh/base_tutorials/understand_ros2_topics.md index a51fdb818cdf08daf51336f486556df213db8829..fa2a87f42be052b32f4d16490720636d47ed924b 100644 --- a/docs/zh/base_tutorials/understand_ros2_topics.md +++ b/docs/zh/base_tutorials/understand_ros2_topics.md @@ -10,8 +10,6 @@ ROS 2将复杂系统分解为许多模块化节点。话题是ROS图中的重要 一个节点可以向任意数量的话题发布数据,并同时订阅任意数量的话题。 - - ![image](../figures/Topic-MultiplePublisherandMultipleSubscriber.gif) 话题是数据在节点之间以及系统不同部分之间传递的主要方式之一。 @@ -34,10 +32,9 @@ ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key ``` - ### 2 rqt_graph -在本教程中,我们将使用``rqt_graph``来可视化节点和话题的变化,以及它们之间的连接。 +在本教程中,我们将使用`rqt_graph`来可视化节点和话题的变化,以及它们之间的连接。 要运行 rqt_graph,请打开一个新的终端并输入以下命令: @@ -59,7 +56,7 @@ rqt_graph是一个图形化内省工具。现在我们将看一些用于内省 ### 3 ros2 topic list -在新终端中运行``ros2 topic list``命令将返回系统中当前活动的所有话题的列表: +在新终端中运行`ros2 topic list`命令将返回系统中当前活动的所有话题的列表: ``` console /parameter_events @@ -68,7 +65,8 @@ rqt_graph是一个图形化内省工具。现在我们将看一些用于内省 /turtle1/color_sensor /turtle1/pose ``` -ros2 topic list -t 将返回相同的话题列表,这次在括号中附加了话题类型: + +`ros2 topic list -t`将返回相同的话题列表,这次在括号中附加了话题类型: ``` console /parameter_events [rcl_interfaces/msg/ParameterEvent] @@ -77,9 +75,10 @@ ros2 topic list -t 将返回相同的话题列表,这次在括号中附加了 /turtle1/color_sensor [turtlesim/msg/Color] /turtle1/pose [turtlesim/msg/Pose] ``` + 特别是类型属性是节点了解它们正在通过话题传输相同信息的方式。 -如果你想知道在 rqt_graph 中所有这些话题的位置,在 隐藏: 下取消选中所有复选框: +如果你想知道在 rqt_graph 中所有这些话题的位置,在“隐藏:”下取消选中所有复选框: ![image](../figures/unhide.png) @@ -101,7 +100,7 @@ ros2 topic echo /turtle1/cmd_vel 刚开始,这个命令不会返回任何数据。这是因为它正在等待 /teleop_turtle 发布一些东西。 -返回到运行``turtle_teleop_key``的终端,并使用箭头键来移动乌龟。同时观察运行``echo``的终端,你将会看到每次移动时发布的位置数据: +返回到运行`turtle_teleop_key`的终端,并使用箭头键来移动乌龟。同时观察运行``echo``的终端,你将会看到每次移动时发布的位置数据: ``` console linear: @@ -119,7 +118,7 @@ angular: ![image](../figures/debug.png) -``/_ros2cli_26646``是刚刚我们运行的``echo``命令创建的节点(数字可能不同)。现在你可以看到发布者正在通过``cmd_vel``话题发布数据,而两个订阅者正在订阅它。 +`/_ros2cli_26646`是刚刚我们运行的`echo`命令创建的节点(数字可能不同)。现在你可以看到发布者正在通过`cmd_vel`话题发布数据,而两个订阅者正在订阅它。 ### 5 ros2 topic info @@ -149,9 +148,9 @@ Subscription count: 2 geometry_msgs/msg/Twist ``` -这意味着在``geometry_msgs``包中有一个名为``Twist``的``msg``。 +这意味着在`geometry_msgs`包中有一个名为`Twist`的`msg`。 -现在我们可以在此类型上运行``ros2 interface show ``以了解其详细信息。具体来说,消息期望的数据结构是什么样的。 +现在我们可以在此类型上运行`ros2 interface show `以了解其详细信息。具体来说,消息期望的数据结构是什么样的。 ``` console ros2 interface show geometry_msgs/msg/Twist @@ -172,7 +171,7 @@ ros2 interface show geometry_msgs/msg/Twist float64 z ``` -这告诉你``/turtlesim``节点期望接收一个带有两个向量``linear``和``angular``的消息,每个向量都有三个元素。如果你回想一下我们使用``echo``命令看到``/teleop_turtle``传递给``/turtlesim``的数据,它具有相同的结构: +这告诉你`/turtlesim`节点期望接收一个带有两个向量`linear`和`angular`的消息,每个向量都有三个元素。如果你回想一下我们使用`echo`命令看到`/teleop_turtle`传递给`/turtlesim`的数据,它具有相同的结构: ``` console linear: @@ -194,7 +193,7 @@ angular: ros2 topic pub '' ``` -'' 参数是您将传递给话题的实际数据,其结构正如您在前一节中了解到的。 +``参数是您将传递给话题的实际数据,其结构正如您在前一节中了解到的。 请注意,这个参数需要以 YAML 语法输入。请输入完整的命令,如下所示: @@ -202,20 +201,20 @@ ros2 topic pub '' ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" ``` -在没有命令行选项时, `ros2 topic pub` 消息频率将稳定运行在 1 Hz. +在没有命令行选项时,`ros2 topic pub` 消息频率将稳定运行在 1 Hz。 ![image](../figures/pub_stream.png) -有时,你想发布数据到话题仅一次(即非持续发送),你可以使用'--once'参数。 +有时,你想发布数据到话题仅一次(即非持续发送),你可以使用`--once`参数。 ``` console ros2 topic pub --once -w 2 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" ``` -`--once` 是个可选择的参数,它的含义是"发布一条消息后退出". +`--once` 是个可选择的参数,它的含义是“发布一条消息后退出”。 -`-w 2` 同样是个可选择的参数,它的含义是"等待两个匹配的订阅". 因为我们有turtlesim和话题的这个两个订阅。 -在终端能看到: +`-w 2` 同样是个可选择的参数,它的含义是“等待两个匹配的订阅”。因为我们有turtlesim和话题的这个两个订阅。 +在终端能看到: ``` console Waiting for at least 2 matching subscription(s)... @@ -223,13 +222,15 @@ publisher: beginning loop publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8)) ``` -并且你会看到你的小乌龟如下图在移动” +并且你会看到你的小乌龟如下图在移动: + ![image](../figures/pub_once.png) -你可以刷新rqt_graph来查看图形化的情况。你会看到``ros2 topic pub ...``节点(/_ros2cli_30358)正在``/turtle1/cmd_vel``话题上发布消息,这些消息被``ros2 topic echo ...``节点(/_ros2cli_26646)和``/turtlesim``节点接收。 +你可以刷新rqt_graph来查看图形化的情况。你会看到`ros2 topic pub ...`节点(/_ros2cli_30358)正在`/turtle1/cmd_vel`话题上发布消息,这些消息被`ros2 topic echo ...`节点(/_ros2cli_26646)和`/turtlesim`节点接收。 + ![image](../figures/rqt_graph2.png) -最后,你可以在``pose``话题上运行``echo``命令,并重新检查rqt_graph: +最后,你可以在`pose`话题上运行`echo`命令,并重新检查rqt_graph: ``` console ros2 topic echo /turtle1/pose @@ -237,17 +238,17 @@ ros2 topic echo /turtle1/pose ![image](../figures/rqt_graph3.png) -你会看到``/turtlesim``节点也在向``pose``话题发布消息,而新的``echo``节点已经订阅了该话题 +你会看到`/turtlesim`节点也在向`pose`话题发布消息,而新的`echo`节点已经订阅了该话题。 -当发布带有时间戳的消息时,`pub` 有两种方法 +当发布带有时间戳的消息时,`pub` 有两种方法 用当前时间自动填写。对于有 -`std_msgs/msg/Header`的消息, header可以设置为 `auto` 以填写 `stamp` 字段. +`std_msgs/msg/Header`的消息,header可以设置为 `auto` 以填写 `stamp` 字段。 ``` console ros2 topic pub /pose geometry_msgs/msg/PoseStamped '{header: "auto", pose: {position: {x: 1.0, y: 2.0, z: 3.0}}}' ``` -如果消息没有使用完整的header, 而只有一个字段 `builtin_interfaces/msg/Time`, 就可以设置成 `now`. +如果消息没有使用完整的header, 而只有一个字段 `builtin_interfaces/msg/Time`,就可以设置成 `now`。 ``` console ros2 topic pub /reference sensor_msgs/msg/TimeReference '{header: "auto", time_ref: "now", source: "dumy"}' @@ -261,22 +262,25 @@ ros2 topic pub /reference sensor_msgs/msg/TimeReference '{header: "auto", time_r ros2 topic hz /turtle1/pose ``` -它将返回``/turtlesim``节点向``pose``话题发布数据的速率。 +它将返回`/turtlesim`节点向`pose`话题发布数据的速率。 ``` console average rate: 59.354 min: 0.005s max: 0.027s std dev: 0.00284s window: 58 ``` -回想一下,您使用``ros2 topic pub --rate 1``将``turtle1/cmd_vel``的速率设置为稳定的1 Hz。如果您使用``turtle1/cmd_vel``而不是``turtle1/pose``运行上述命令,则会看到反映该速率的平均值。 +回想一下,您使用`ros2 topic pub --rate 1`将`turtle1/cmd_vel`的速率设置为稳定的1 Hz。如果您使用`turtle1/cmd_vel`而不是`turtle1/pose`运行上述命令,则会看到反映该速率的平均值。 ### 9 ros2 topic bw 您可以使用以下命令查看一个话题的带宽: + ``` console ros2 topic bw /turtle1/pose ``` + 会返回带宽利用率和向`/turtle1/pose`话题发布的消息数量。 + ``` console Subscribed to [/turtle1/pose] 1.51 KB/s from 62 messages @@ -286,22 +290,24 @@ Subscribed to [/turtle1/pose] ### 10 ros2 topic find 使用以下命令列出给定类型的可用topic列表: + ``` console ros2 topic find ``` -回想一下,`cmd_vel`话题的类型是: +回想一下,`cmd_vel`话题的类型是: + ``` console geometry_msgs/msg/Twist ``` -当有消息时,用 `find` 命令输出可用的topics: +当有消息时,用 `find` 命令输出可用的topics: ``` console ros2 topic find geometry_msgs/msg/Twist ``` -会输出: +会输出: ``` console /turtle1/cmd_vel @@ -309,8 +315,8 @@ ros2 topic find geometry_msgs/msg/Twist ### 11 Clean up -此时你会有很多正在运行的节点。不要忘记在每个终端中输入``Ctrl+C``来停止它们。 +此时你会有很多正在运行的节点。不要忘记在每个终端中输入`Ctrl+C`来停止它们。 本文引用: --1:[https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) --2:[https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) +[1]:[https://fishros.org/doc/ros2/humble/Tutorials.html](https://fishros.org/doc/ros2/humble/Tutorials.html) +[2]:[https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst](https://github.com/ros2/ros2_documentation/blob/humble/source/Tutorials.rst) diff --git a/docs/zh/faqs_and_solutions.md b/docs/zh/faqs_and_solutions.md deleted file mode 100644 index 5a41881407ba05eb31cc26068d821ebb4a23c0f3..0000000000000000000000000000000000000000 --- a/docs/zh/faqs_and_solutions.md +++ /dev/null @@ -1,21 +0,0 @@ -# 常见问题及解决方法 - -## 问题1: - -![](./figures/problem.png) - -原因:出现该警告的原因在于环境变量中同时存在ROS1、ROS2。 - -解决方法:修改环境变量,避免两个版本冲突。 - -```shell -[root@openEuler ~]# vim /opt/ros/humble/share/ros_environment/environment/1.ros_distro.sh -``` - -```shell -# generated from ros_environment/env-hooks/1.ros_distro.sh.in - -#export ROS_DISTRO=humble -``` - -将里面的内容全部注释即可。 diff --git a/docs/zh/getting_to_know_ros.md b/docs/zh/getting_to_know_ros.md index 64224e95944af9cef34ca1b6cdebd9f48f934969..28a7fa0d65b50d47e0d10d8b8248bb60f86fd799 100644 --- a/docs/zh/getting_to_know_ros.md +++ b/docs/zh/getting_to_know_ros.md @@ -29,6 +29,4 @@ ROS总体架构如下图所示: - ROS中最重要的一个概念就是基于发布/订阅模型的“节点”,可以让开发者并行开发低耦合的功能模块,并且便于二次复用。ROS1的通讯系统基于TCPROS/UDPROS,而ROS2的通讯系统基于DDS。DDS是一种分布式实时系统中数据发布/订阅的标准解决方案,下一小节会具体讲解。ROS2内部提供了DDS的抽象层实现,用户不需要关注底层DDS的提供厂家。 - 在ROS1的架构中Nodelet和TCPROS/UDPROS是并列的层次,为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2中也保留了这种数据传输方式,只不过换了一个名字,叫做“Intra-process”,同样也是独立于DDS。 3. 应用层 - - ROS1强依赖于ROS Master,可以想像一旦Master宕机,整个系统会面临如何的窘境。但是从右边ROS2的架构中我们可以发现,之前让人耿耿于怀的Master终于消失了,节点之间使用一种称为“Discovery”的发现机制来获取彼此的信息。 - diff --git a/docs/zh/installation_and_deployment.md b/docs/zh/installation_and_deployment.md index 37cbbe7bc65edbda1f7c9cb82afcd42d8599e429..f637d7fdc34e13e1404842c6152a50cba1efa086 100644 --- a/docs/zh/installation_and_deployment.md +++ b/docs/zh/installation_and_deployment.md @@ -4,11 +4,11 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 -在安装ROS Humble前,需确保已经安装好**openEuler操作系统** 和**系统桌面**。 +在安装ROS Humble前,需确保已经安装好**openEuler操作系统**和**系统桌面**。 ## 环境准备 -* 安装 openEuler 系统,安装方法参考 《[openEuler官方文档安装指南](https://docs.openeuler.org/zh/)》。 +* 安装 openEuler 系统,安装方法参考 [《openEuler官方文档安装指南》](https://docs.openeuler.org/zh/)。 ## 1. 安装ROS @@ -16,10 +16,10 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 **注意**: -- 1.在openEuler 22.03系统上,输入`yum install openeuler-ros`时会自动配置ROS软件源,无需手动配置 -- 2.目前在openEuler 24.03以及其他系统版本上仍需手动添加软件源 -- 3.为方便定位问题以及解决bug,openEuler24.03的ROS软件源推荐使用本教程中设置的软件源,而非openEuler官方源 -- 4.手动配置软件源时注意区分欧拉系统架构(x86、arm or riscv) +- 在openEuler 22.03系统上,输入`yum install openeuler-ros`时会自动配置ROS软件源,无需手动配置 +- 目前在openEuler 24.03以及其他系统版本上仍需手动添加软件源 +- 为方便定位问题以及解决bug,openEuler 24.03的ROS软件源推荐使用本教程中设置的软件源,而非openEuler官方源 +- 手动配置软件源时注意区分欧拉系统架构(x86、ARM or RISC-V) #### 1. 设置软件源 @@ -29,7 +29,7 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 - x86架构软件源配置: - ``` + ```bash bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo [openEulerROS-humble] name=openEulerROS-humble @@ -39,10 +39,9 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 EOF' ``` - - ARM架构软件源配置: - ``` + ```bash bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo [openEulerROS-humble] name=openEulerROS-humble @@ -52,10 +51,9 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 EOF' ``` - - RISC-V架构软件源配置: - ``` + ```bash bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo [openEulerROS-humble] name=openEulerROS-humble @@ -65,50 +63,50 @@ openEuler ROS的开发测试可参考后续的基础教程各个专题教程。 EOF' ``` -#### 2.安装ros-humble +#### 2. 安装ros-humble 依次输入以下命令安装ROS Humble所有软件包: -``` +```bash dnf update dnf install "ros-humble-*" --skip-broken --exclude=ros-humble-generate-parameter-library-example ``` 也可输入以下命令安装单独软件包: -``` +```bash yum install ros-humble- # or dnf install ros-humble- ``` -例如输入以下命令安装ROS Humble基础包和turtlesim包 +例如输入以下命令安装ROS Humble基础包和turtlesim包: -``` +```bash yum install ros-humble-ros-base ros-humble-turtlesim ``` -运行如下命令,查看安装是否成功。如果回显有对应软件包,表示安装成功。 +运行如下命令,查看安装是否成功。如果回显有对应软件包,表示安装成功: ```shell [root@openEuler ~]# rpm -q ros-humble ``` -1. 安装上述软件包后,编辑 `~/.bashrc` 追加以下内容 +安装上述软件包后,编辑 `~/.bashrc` 追加以下内容: ```bash source /opt/ros/humble/setup.bash ``` -或者输入以下命令将上述语句写入~/.bashrc文件 +或者输入以下命令将上述语句写入 `~/.bashrc` 文件: -``` +```bash echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc ``` -随后输入`source ~/.bashrc`来激活ROS环境变量的设置 +随后输入`source ~/.bashrc`来激活ROS环境变量的设置。 -#### 3.测试小乌龟 +#### 3. 测试小乌龟 1. 启动小乌龟 @@ -130,7 +128,7 @@ echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc ### 2. ros-noetic -#### 1.设置软件源 +#### 1. 设置软件源 下面以openEuler 24.03为例介绍软件源的配置过程。 @@ -138,7 +136,7 @@ echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc - x86架构软件源配置: -``` +```bash bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo [openEulerROS-Noetic] name=openEulerROS-Noetic @@ -150,7 +148,7 @@ EOF' - ARM架构软件源配置: -``` +```bash bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo [openEulerROS-Noetic] name=openEulerROS-Noetic @@ -160,9 +158,9 @@ gpgcheck=0 EOF' ``` -#### 2.安装ros-noetic +#### 2. 安装ros-noetic -安装ros-noetic 软件包 +安装ros-noetic 软件包。 ```shell [root@openEuler ~]# yum install openeuler-ros @@ -175,25 +173,25 @@ EOF' [root@openEuler ~]# rpm -q ros-noetic ``` -安装上述软件包后,编辑 `~/.bashrc` 追加以下内容 +安装上述软件包后,编辑 `~/.bashrc` 追加以下内容。 ```shell [root@openEuler ~]# source /opt/ros/noetic/setup.bash ``` -或者输入以下命令将上述语句写入~/.bashrc文件 +或者输入以下命令将上述语句写入~/.bashrc文件。 ```shell [root@openEuler ~]# echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc ``` - 随后输入`source ~/.bashrc`来激活ROS环境变量的设置 + 随后输入`source ~/.bashrc`来激活ROS环境变量的设置。 -#### 3.测试小乌龟 +#### 3. 测试小乌龟 安装ROS后,打开终端输入以下命令启动小乌龟仿真测试: -``` +```bash rosrun turtlesim turtlesim_node ``` @@ -201,10 +199,10 @@ rosrun turtlesim turtlesim_node 新开终端,输入以下命令启动键盘控制节点,在英文输入法下,可以根据终端提示按下键盘的上下左右键控制小乌龟运动: -``` +```bash rosrun turtlesim turtle_teleop_key ``` ![image](./figures/turtlesim_noetic-2.png) -若小乌龟仿真测试通过,则说明openEuler ROS Noetic已成功安装. +若小乌龟仿真测试通过,则说明openEuler ROS Noetic已成功安装。 diff --git a/docs/zh/ros_user_guide.md b/docs/zh/ros_user_guide.md index 3d3a626379948ca4a0585a166dc3bd22d022cf3f..13fe19818749687f9782151624db359da1f7fab6 100644 --- a/docs/zh/ros_user_guide.md +++ b/docs/zh/ros_user_guide.md @@ -4,5 +4,4 @@ 本文档适用于使用openEuler系统并希望了解和使用ROS的社区开发者、开源爱好者以及相关合作伙伴。使用人员需要具备基本的Linux操作系统知识。 -若在使用ROS的过程中遇到问题,可到ROS sig的门户仓库兼文档仓库提交issue:[openEuler ROS](https://gitee.com/openeuler/ros) - +若在使用ROS的过程中遇到问题,可到ROS SIG的门户仓库兼文档仓库提交issue:[openEuler ROS](https://gitee.com/openeuler/ros) diff --git a/docs/zh/usage_guide.md b/docs/zh/usage_guide.md deleted file mode 100644 index b3a6f25386497642ca51e62c834ed39b0d71fe1c..0000000000000000000000000000000000000000 --- a/docs/zh/usage_guide.md +++ /dev/null @@ -1,57 +0,0 @@ -# 使用方法 - -## ROS使用 - -ROS 提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下: - -- rosnode : 操作节点 -- rostopic : 操作话题 -- rosservice : 操作服务 -- rosmsg : 操作msg消息 -- rossrv : 操作srv消息 -- rosparam : 操作参数 - -另请参考: - -http://wiki.ros.org/ROS/CommandLineTools - -## ROS2使用 - -```shell -# 命令help -[root@openEuler ~]# ros2 --help -usage: 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 exit - -Commands: - action Various action related sub-commands - bag Various rosbag related sub-commands - component Various component related sub-commands - daemon Various daemon related sub-commands - doctor Check ROS setup and other potential issues - interface Show information about ROS interfaces - launch Run a launch file - lifecycle Various lifecycle related sub-commands - multicast Various multicast related sub-commands - node Various node related sub-commands - param Various param 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 - test Run a ROS2 launch test - topic Various topic related sub-commands - trace Trace ROS nodes to get information on their execution - wtf Use `wtf` as alias to `doctor` - - Call `ros2 -h` for more detailed usage. -``` - -## 注意事项 - -* 新打开终端需要执行“source /opt/ros/foxy/local_setup.bash”或“source /opt/ros/noetic/setup.bash”命令。 -