ros2学习笔记-工程创建

ros2开发环境搭建

1.ubuntu与windows复制粘贴:
    sudo apt-get autoremove open-vm-tools
    sudo apt-get install open-vm-tools-desktop
    reboot

2.1键安装ros2与vscode:
    wget http://fishros.com/install -O fishros && . fishros
    1.vscode 安装插件 :
        chinese
        C/C++ IntelliSense
        python
        Makefile Tools
        CMake    
        CMake Highlight
        CMake Tools
        vscode-icons
        ROS
        Msg Language Support
        XML
        URDF
        IntelliCode
        Markdown
        Markdown All in One
        

3.安装cmake:
    sudo apt install cmake
4.安装git:
    sudo apt install git

5.测试安装
    启动倾听者:ros2 run demo_nodes_py listener
    启动说话者:ros2 run demo_nodes_py listener
    
    涂鸦乌龟:
        ros2 run turtlesim turtlesim_node
        ros2 run turtlesim turtle_teleop_key

ros2开发笔记

1.ros2简介:
    要说ROS2替代ROS,ROS就是机器人操作系统,英文全称(Robot Operating System),但ROS本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac)上的软件库和工具集。

ROS出生于2007年,ROS的出现解决了机器人各个组件之间的通信问题,同时基于ROS的完善的通信机制,越来越多的优秀的机器人算法集成到了ROS中来。

现在的ROS功能已经变得非常的丰富和强大。但随着对ROS功能上要求越来越多,一些原始的架构和设计不能够满足目前的使用需求,这也是ROS2出现的原因。

ROS2继承了ROS原有的优秀之处,同时又带来了很多新的功能,ROS2相对于ROS更加的强大。

2.ros2底层是dds,ros对dds进行了一些封装,封装的库为rclcpp(给C++使用),rclpy(给python3使用)。

3.ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个节点负责控制车轮转动,一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等)。

4.节点之间通讯方式:
    话题-topics
    服务-services
    动作-Action
    参数-parameters

5.ROS2工作空间
    ros2 run 包名字 可执行文件名字

那你有没有想过,我们想找到一个节点(可执行文件),就必须要先知道它在哪个包,那问题就来了,想要找到某个包,该去哪里找?

答案就是:工作空间

注意:一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在。

6.功能包是什么
    功能包可以理解为存放节点的地方,ROS2中功能包根据编译方式的不同分为三种类型。

    ament_python,适用于python程序
    cmake,适用于C++
    ament_cmake,适用于C++程序,是cmake的增强版
7.功能包获取的两种方式
    1.安装获取
        sudo apt install ros-<version>-package_name
        安装获取会自动放置到系统目录,不用再次手动source。
    2. 手动编译获取
        什么时候需要手动编译呢?一般我们能安装的功能包都是作者编译好程序将可执行文件上传到仓库            中,然后我们才能够通过apt进行安装,如果作者还没来得及测试上传,或者忘记了测试上传,就会找不到对应的包,这时候就需要手动编译安装了。

        另外一种就是我们需要对包的源码进行修改,这个时候也需要自己编译修改。    
8.与功能包相关的指令 ros2 pkg
    create       Create a new ROS2 package
    executables  Output a list of package specific executables
    list         Output a list of available packages
    prefix       Output the prefix path of a package
    xml          Output the XML of the package manifest or a specific tag
            
    1.创建功能包
        ros2 pkg create <package-name>  --build-type  {cmake,ament_cmake,ament_python}  --dependencies <依赖名字>
    2.列出所有可执行文件
        ros2 pkg executables
    3.列出特定功能包的可执行文件(例如 turtlesim)
        ros2 pkg executables turtlesim
    4.列出所有的包
        ros2 pkg list
    5.输出某个包所在路径的前缀
        ros2 pkg prefix  <package-name>
    6.列出包的清单描述文件
        每一个功能包都有一个标配的manifest.xml文件,用于记录这个包的名字,构建工具,编译信息,拥有者,干啥用的等信息。

        通过这个信息,就可以自动为该功能包安装依赖,构建时确定编译顺序等
    查看小乌龟模拟器功能包的信息。

    ros2 pkg xml turtlesim                 
        
9.colcon编译工具
    colcon其实是一个功能包构建工具,这个工具用来做什么的呢?

    简单点说就是用来编译代码的,上几节跟大家讲了如何进行ROS2工作空间的创建,但没有说如何进行编译,其实就是用colcon。ROS2默认是没有安装colcon的。
    1.安装colcon
        如果使用一键安装ROS2,会帮你安装好这个工具,以防万一我们再装一次,打开终端复制粘贴进去即可。
        sudo apt-get install python3-colcon-common-extensions

    2. 只编译一个包
        colcon build --packages-select YOUR_PKG_NAME
    3. 不编译测试单元
        colcon build --packages-select YOUR_PKG_NAME  --cmake-args -DBUILD_TESTING=0
    4.编译所有包
        colcon build
    5.运行编译的包的测试
        colcon test
    6.允许通过更改src下的部分文件来改变install(重要)
        每次调整 python 脚本时都不必重新build了
        colcon build --symlink-install

9.ros2程序编写

        ros2的程序与运行需要在cli(命令行)里面输入:

ros2 run pkg_name node_name #如果不知到包里面的节点名字,可以使用 ros2 pkg executables pkg_name 显示出来包里面能运行的所有的节点名字。

        所以ros2的每个程序可以比为一个包,而节点可以当作程序(包)的输入参数。 已经存在的apt管理的包可以直接通过apt命令安装,自己编译包需要使用ros2包创建。

        ros2的程序包使用命令创建:

ros2 pkg create pkg_name --build-type ament_cmake --dependencies rclcpp #rclcpp是ros2程序的依赖项。

         创建后的目录树如:

└── pkg_name
    ├── CMakeLists.txt
    ├── include
    │   └── pkg_name
    ├── package.xml
    └── src

        编写的程序C++文件需要放置在src目录,然后在CMakeLists.txt里面末尾添加:

add_executable(node_name src/main.cpp)
ament_target_dependencies(node_name rclcpp)
install(TARGETS
  node_name
  DESTINATION lib/${PROJECT_NAME}
)
#注意:node_name对应自己想生成的节点名字,main.cpp对应自己的C++文件。

       在src文件里面放置编写好的文件,使用colcon工具进行编译,编译完成之后source  ./install/setup.bash 环境变量,运行生成的节点:

colcon build #编译生成install等文件夹,以及执行文件和中间文件放置在各个目录里面。
source ./install/setup.bash #在命令行里面添加环境变量。
ros2 run pkg_name node_name #执行生成的节点。

        编译后文件夹里面内容如下:

klppc@klppc-Vostro-3449:~/ws/ros2learn/test/pkg_name$ colcon build
Starting >>> pkg_name
Finished <<< pkg_name [6.16s]                  

Summary: 1 package finished [8.63s]
klppc@klppc-Vostro-3449:~/ws/ros2learn/test/pkg_name$ ls
build  CMakeLists.txt  include  install  log  package.xml  src
klppc@klppc-Vostro-3449:~/ws/ros2learn/test/pkg_name$ tree .
.
├── build
│   ├── COLCON_IGNORE
│   └── pkg_name
│       ├── ament_cmake_core
│       │   ├── package.cmake
│       │   ├── pkg_nameConfig.cmake
│       │   ├── pkg_nameConfig-version.cmake
│       │   └── stamps
│       │       ├── ament_prefix_path.sh.stamp
│       │       ├── nameConfig.cmake.in.stamp
│       │       ├── nameConfig-version.cmake.in.stamp
│       │       ├── package_xml_2_cmake.py.stamp
│       │       ├── package.xml.stamp
│       │       ├── path.sh.stamp
│       │       └── templates_2_cmake.py.stamp
│       ├── ament_cmake_environment_hooks
│       │   ├── ament_prefix_path.dsv
│       │   ├── local_setup.bash
│       │   ├── local_setup.dsv
│       │   ├── local_setup.sh
│       │   ├── local_setup.zsh
│       │   ├── package.dsv
│       │   └── path.dsv
│       ├── ament_cmake_index
│       │   └── share
│       │       └── ament_index
│       │           └── resource_index
│       │               ├── package_run_dependencies
│       │               │   └── pkg_name
│       │               ├── packages
│       │               │   └── pkg_name
│       │               └── parent_prefix_path
│       │                   └── pkg_name
│       ├── ament_cmake_package_templates
│       │   └── templates.cmake
│       ├── ament_cmake_uninstall_target
│       │   └── ament_cmake_uninstall_target.cmake
│       ├── ament_cppcheck
│       ├── ament_lint_cmake
│       ├── ament_uncrustify
│       ├── ament_xmllint
│       ├── cmake_args.last
│       ├── CMakeCache.txt
│       ├── CMakeFiles
│       │   ├── 3.22.1
│       │   │   ├── CMakeCCompiler.cmake
│       │   │   ├── CMakeCXXCompiler.cmake
│       │   │   ├── CMakeDetermineCompilerABI_C.bin
│       │   │   ├── CMakeDetermineCompilerABI_CXX.bin
│       │   │   ├── CMakeSystem.cmake
│       │   │   ├── CompilerIdC
│       │   │   │   ├── a.out
│       │   │   │   ├── CMakeCCompilerId.c
│       │   │   │   └── tmp
│       │   │   └── CompilerIdCXX
│       │   │       ├── a.out
│       │   │       ├── CMakeCXXCompilerId.cpp
│       │   │       └── tmp
│       │   ├── cmake.check_cache
│       │   ├── CMakeDirectoryInformation.cmake
│       │   ├── CMakeOutput.log
│       │   ├── CMakeRuleHashes.txt
│       │   ├── CMakeTmp
│       │   ├── Makefile2
│       │   ├── Makefile.cmake
│       │   ├── pkg_name_uninstall.dir
│       │   │   ├── build.make
│       │   │   ├── cmake_clean.cmake
│       │   │   ├── compiler_depend.make
│       │   │   ├── compiler_depend.ts
│       │   │   ├── DependInfo.cmake
│       │   │   └── progress.make
│       │   ├── progress.marks
│       │   ├── TargetDirectories.txt
│       │   └── uninstall.dir
│       │       ├── build.make
│       │       ├── cmake_clean.cmake
│       │       ├── compiler_depend.make
│       │       ├── compiler_depend.ts
│       │       ├── DependInfo.cmake
│       │       └── progress.make
│       ├── cmake_install.cmake
│       ├── colcon_build.rc
│       ├── colcon_command_prefix_build.sh
│       ├── colcon_command_prefix_build.sh.env
│       ├── CTestConfiguration.ini
│       ├── CTestCustom.cmake
│       ├── CTestTestfile.cmake
│       ├── install_manifest.txt
│       └── Makefile
├── CMakeLists.txt
├── include
│   └── pkg_name
├── install
│   ├── COLCON_IGNORE
│   ├── local_setup.bash
│   ├── local_setup.ps1
│   ├── local_setup.sh
│   ├── _local_setup_util_ps1.py
│   ├── _local_setup_util_sh.py
│   ├── local_setup.zsh
│   ├── pkg_name
│   │   └── share
│   │       ├── ament_index
│   │       │   └── resource_index
│   │       │       ├── package_run_dependencies
│   │       │       │   └── pkg_name
│   │       │       ├── packages
│   │       │       │   └── pkg_name
│   │       │       └── parent_prefix_path
│   │       │           └── pkg_name
│   │       ├── colcon-core
│   │       │   └── packages
│   │       │       └── pkg_name
│   │       └── pkg_name
│   │           ├── cmake
│   │           │   ├── pkg_nameConfig.cmake
│   │           │   └── pkg_nameConfig-version.cmake
│   │           ├── environment
│   │           │   ├── ament_prefix_path.dsv
│   │           │   ├── ament_prefix_path.sh
│   │           │   ├── path.dsv
│   │           │   └── path.sh
│   │           ├── hook
│   │           │   ├── cmake_prefix_path.dsv
│   │           │   ├── cmake_prefix_path.ps1
│   │           │   └── cmake_prefix_path.sh
│   │           ├── local_setup.bash
│   │           ├── local_setup.dsv
│   │           ├── local_setup.sh
│   │           ├── local_setup.zsh
│   │           ├── package.bash
│   │           ├── package.dsv
│   │           ├── package.ps1
│   │           ├── package.sh
│   │           ├── package.xml
│   │           └── package.zsh
│   ├── setup.bash
│   ├── setup.ps1
│   ├── setup.sh
│   └── setup.zsh
├── log
│   ├── build_2023-10-15_18-34-40
│   │   ├── events.log
│   │   ├── logger_all.log
│   │   └── pkg_name
│   │       ├── command.log
│   │       ├── stderr.log
│   │       ├── stdout.log
│   │       ├── stdout_stderr.log
│   │       └── streams.log
│   ├── COLCON_IGNORE
│   ├── latest -> latest_build
│   └── latest_build -> build_2023-10-15_18-34-40
├── package.xml
└── src
    └── main.cpp

49 directories, 108 files

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ROS2 Web Bridge是一个开源的软件包,旨在使ROS2(Robot Operating System 2)与Web端进行通信和交互。它提供了一种简单而强大的方式,通过WebSocket协议将ROS2系统中的数据传输到Web浏览器。 ROS2 Web Bridge允许Web开发人员使用常见的Web技术(例如JavaScript)直接与ROS2系统进行交互。它提供了一个轻量级的接口,可以订阅和发布ROS2主题,并在Web浏览器中实时显示传感器数据、控制机器人等。 此外,ROS2 Web Bridge还支持ROS2服务和动作。它允许Web应用程序在Web端调用ROS2服务,从而实现与ROS2节点的双向通信。通过一个用户友好的Web界面,用户可以发送控制命令给机器人,执行任务并获得实时反馈。 ROS2 Web Bridge的主要优点之一是其跨平台性。它基于WebSocket协议,因此可以在不同的操作系统和设备上使用,无论是在PC端还是移动设备上。 此外,ROS2 Web Bridge还支持认证和授权机制,以确保通信安全。这对于确保只有被授权的用户可以访问和控制ROS2系统非常重要。 总的来说,ROS2 Web Bridge为ROS2系统提供了一种简便而强大的方式,使Web开发人员能够与ROS2系统进行交互。它扩展了ROS2的功能,使得机器人开发更加灵活和可视化。 ### 回答2: ros2-web-bridge是一种用于在ROS 2和Web应用程序之间进行通信的桥接工具。ROS 2是机器人操作系统的第二代版本,而Web应用程序是通过Web浏览器访问的应用程序。 ros2-web-bridge有几个主要功能。首先,它允许ROS 2中的节点直接与通过Web浏览器访问的Web应用程序进行通信。这使得在Web界面上实时监控和控制ROS 2系统变得更加容易。例如,可以使用ros2-web-bridge将传感器数据从ROS 2节点发送到Web应用程序,以便在Web界面上实时显示传感器数据。同时,还可以将来自Web界面的用户输入发送到ROS 2节点,以便远程控制机器人或系统。 其次,ros2-web-bridge还提供了一些工具和API,用于将ROS 2中的消息和服务转换为Web格式。这使得可以轻松地在ROS 2和Web应用程序之间进行数据传输和交互。它支持使用ROS 2的套接字和JSON进行通信,并提供了将消息和服务转换为JSON格式以及反向转换的功能。这样,ROS 2节点可以与通过Web浏览器访问的Web应用程序进行无缝通信。 总而言之,ros2-web-bridge为ROS 2和Web应用程序之间的通信提供了一个便捷的桥梁。它简化了ROS 2系统与Web界面之间的集成,并提供了实时数据传输和远程控制的能力。这对于构建基于ROS 2的机器人或系统的开发者和使用者来说是非常方便的工具。 ### 回答3: ros2-web-bridge是一个用于将ROS 2和Web技术进行连接的工具。它提供了一个桥接器,使得可以通过Web浏览器与ROS 2通信。这个工具是建立在ROS 2和Web Socket之间的通信基础上的。 通过ros2-web-bridge,我们可以在Web浏览器中实时地订阅和发布ROS 2的消息。这使得我们可以通过Web界面来控制ROS 2的机器人,或者将ROS 2的数据可视化展示出来。这对于远程监控、远程操作和数据可视化都非常有用。 ros2-web-bridge使用ROS 2提供的接口来与ROS 2系统进行通信。它将ROS 2的消息转换为适用于Web Socket的格式,并在浏览器和ROS 2之间建立起适配的连接。通过这种方式,Web界面就能够与ROS 2系统进行实时的双向通信。 ROS 2中的消息传递方式是异步的,而Web浏览器通常使用同步的方式进行通信。ros2-web-bridge通过在ROS 2和Web Socket之间进行适配和转换,使得二者能够协同工作。这意味着ROS 2中的数据可以通过ros2-web-bridge传输到Web浏览器,并在该浏览器中进行处理和展示。 总的来说,ros2-web-bridge是一个功能强大的工具,它架起了ROS 2和Web技术之间的桥梁。它使得我们可以通过Web浏览器来与ROS 2进行通信,进而实现远程操作和数据可视化的目的。通过ros2-web-bridge,我们可以更加灵活和方便地利用ROS 2的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值