Windows安装ros2(Jazzy版本+win10/win11)-4.构建ros2结点

打印 上一主题 下一主题

主题 831|帖子 831|积分 2493

在之前的文章中仅将情况安装到了可以运行ros2结点,接下来本章将完善Ros2开辟情况,使其可以构建Ros2结点。本教程以python开辟构建结点为参考。
1. 完善ros2开辟情况

1.1 下载并安装git

https://git-scm.com/downloads
选好安装位置, 一路next即可。
1.2 下载并安装vscode

https://code.visualstudio.com/
一路下一步, 不过这里要注意勾选

打开vscode, 安装以下插件:

  1. TONGYI Lingma
  2. C/C++
  3. Material Icon Theme
  4. CMake
  5. CMake Tools
  6. IntelliCode
  7. Python
  8. Python Debugger
  9. Pylance
  10. python-snippets
  11. Python Type Hint
  12. ROS
  13. ROS Snippets
复制代码
1.3 下载并安装 openCV

https://opencv.org/releases/
下载windows版本
可能会被浏览器误判不安全文件,保留即可


然后运行, 可能还会被拦截, 点击更多信息, 然后仍要运行

然后解压, 路径自界说, 这里我的解压位置是C:\WorkSpace\Ros2\resources

然后输入以下下令设置情况变量, 注意, 要利用你解压的opencv的路径。
  1. setx /m OpenCV_DIR C:\WorkSpace\Ros2\resources\opencv
复制代码

情况变量已经设置上了, 这里也可以打开情况变量瞅一眼



1.4 安装QT

安装QT 5.12.12, 运行图形化页面需要用到
下载地址: https://download.qt.io/archive/qt/5.12/5.12.12/

选择qt安装路径, 假设这里安装位置是 C:\Qt\Qt5.12.12 (尽量别选启动盘)

把这四个选上就行, 后续有需要可以继承增补安装

其他的一顿同意, 下一步, 就安装完了.
然后管理员模式打开终端, 输入以下下令将qt的情况变量设置好, 请注意, 值和你的安装位置有关, 假如安装在其他位置了, 请更换路径.
  1. setx /m Qt5_DIR C:\Qt\Qt5.12.12\5.12.12\msvc2017_64
  2. setx /m QT_QPA_PLATFORM_PLUGIN_PATH C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\plugins\platforms
复制代码
设置完可以在电脑的情况变量中检查下是否有Qt5_DIR 和 QT_QPA_PLATFORM_PLUGIN_PATH两个键, 没有手动加上, 在用户变量或者系统变量中加上都可以, 值为上面下令中的
1.5 安装tf相关包

把tf_transformations的git项目下到当地
(https://github.com/DLu/tf_transformations)[https://github.com/DLu/tf_transformations]
手动下载, 或者通过在终端中输入以下下令将项目下到当地
  1. git clone https://github.com/DLu/tf_transformations.git
复制代码
在终端中切换至该项目的文件夹下, 然后执行以下下令
  1. pip install .
复制代码

安装完成之后,再把 transforms3d安装下
  1. pip install transforms3d
复制代码
2. 创建pkg

https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Creating-Your-First-ROS2-Package.html
在之前的教程中,打开终端后会默认打开powershell7, 并且也会主动执行local_setup.ps1了
2.1 创建工作区以及包

找一个地方创建一个文件夹作为工作区, 随意定名, 比方定名为dev_ws
然后在这个工作区中创建一个src文件夹, 这两步可以合并通过下令行的方式创建,mkdir dev_ws/src

然后进入src文件夹, 在src文件夹中创建ros2的包(以python程序为学习教程), 下令:
  1. ros2 pkg create --build-type ament_python --license Apache-2.0 my_ros_empty_pkg
复制代码
此中的 my_ros_empty_pkg 为自界说的ros2的包, 此下令创建的包中不包罗节点

当然也是可以通过下令创建一个自带输出语句的python程序作为节点,当然该节点中未利用到任何ros2相关的代码,仅仅是python输出语句, 下令:
  1. ros2 pkg create --build-type ament_python --license Apache-2.0 --node-name my_node my_node_package
复制代码
此中my_node 为节点名, my_node_package为包名

2.2 构建节点

包,节点都有了, 现在就可以构建运行了, 回到工作区根目次中运行colcon build
,即可构建成功

上面圈出来的地方这个报错可以忽略不影响ros2节点的构建与利用, 当然也是可以通过在构建时增加参数以忽略构建这部分报错的内容, colcon build
--event-handlers desktop_notification-

可以看得到没有报错了, 现在节点已经构建完了, 就可以利用了, 不过需要重要的是, 之前运行的local_setup.ps1是ros2模版代码中的,它只会初始化模版代码中相关的情况变量,设置模版代码的包与节点信息,此时假如直接运行新构建的节点,会报找不到包的错误的, 如下:

只需要运行新构建的工作区中的setup.ps1即可在当前终端的情况变量中设置上当前工作区中的包与节点,再次运行便不会报错了。

以上便是以ros2的方式执行一个python文件, 注意是这里并没有称之为节点, 由于此中其实没有任何ros2节点的内容, 可以打开代码看看里面长啥样:

只不过是利用ros2的构建工具colcon构建了我们的整个工作区的代码, 其构建完成的可执行文件在如下位置:

这个位置也是ros2搜刮package以及搜刮node的路径, 假如把构建好的可执行文件乱动位置的话就找不到节点了,当然假如复制一个可执行文件以及可执行文件-script.py文件, ros2也就会以为你有一个新的节点了,运行这个拷贝的可执行文件程序都是ok的



2.3 编写发布者订阅者节点

接下来我们要构建一个真正利用到ros2节点信息的c++程序了,起首我们参考官方教程, 下载官方提供的两个cpp文档, 别忘记要到包中的src再下载cpp文件. 我们就移动到之前创建的包my_ros_pkg中下载把,下载下令:
  1. curl https://raw.githubusercontent.com/ros2/examples/humble/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py -o publisher_member_function.py
  2. curl https://raw.githubusercontent.com/ros2/examples/humble/rclpy/topics/minimal_subscriber/examples_rclpy_minimal_subscriber/subscriber_member_function.py -o subscriber_member_function.py
复制代码

代码已经有了, 接下来需要做的就是在py_pubsub包的setup.py和package.xml文件中写入节点与依赖信息。
回到dev_ws目次下,然后在控制台中打开vscode, 下令:
  1. code .
复制代码
这里务须要在终端里打开整个项目! 由于此种方式vscode会帮你设置好情况, 否则开辟时导入的包都找不到(虽然通过colcon build
没问题), 不利于开辟



在 package.xml文件中输入依赖项并生存
  1. <exec_depend>rclpy</exec_depend>
  2. <exec_depend>std_msgs</exec_depend>
复制代码

在 setup.py 中写入节点入口并生存
  1. 'talker = py_pubsub.publisher_member_function:main',
  2. 'listener = py_pubsub.subscriber_member_function:main',
复制代码

打开终端, 在dev_ws 工作空间下构建项目
  1. colcon build
复制代码
  1. # Tips 还有两个下令后期开辟是也会经常用到, 指定package构建与指定文件夹构建,可以收藏下colcon build
  2. --packages-select your_package_namecolcon build
  3. --base-paths path/to/your/folder
复制代码

运行当前项目的情况设置文件, 然后就可以执行发布者, 订阅者节点了, 假如弹出请求网络访问的窗口记得点击答应。
  1. install\setup.ps1
  2. ros2 run py_pubsub talker
复制代码

再打开一个终端标签页, 切换到dev_ws工作空间, 运行install\setup.ps1后也就可以运行订阅者节点了
  1. install\setup.ps1
  2. ros2 run py_pubsub listener
复制代码


这里可以把当前工作空间的install\setup.ps1文件也可以如之前的文章<3.下载ros2并运行案例结点>中最后所写, 添加到$profile的最下方一行执行。
3. 在vscode中直接运行python节点

由于上一个文章给powershell7也增加了启动执行ros2的情况初始化文件local_setup.ps1, 以是我们也可以直接在vscode中运行节点, 此种方式没有经由ros2托管, 缺少其他ros2的附加本领。
但是假如python文件中利用了其他自界说python module的内容(如ros2中自界说了一个消息), 则需要额外在控制台中执行此项目的setup.ps1,假如不执行的话, 直接运行该py文件会报错, 提示ModuleNotFoundError: No module named ‘xxx’
当然也是可以通过如上文<3.下载ros2并运行案例结点>的方式, 将运行此项目的setup.ps1放入powershell7的启动执行中,即管理员运行ps7终端执行以下下令, 此中
echo ‘C:\WorkSpace\Ros2\dev_ws\install\local_setup.ps1’ >> $profile
如许就可以正常运行了



4. 下载并运行古月居教程代码

https://github.com/guyuehome/ros2_21_tutorials
通过git把代码下载到dev_ws/src中, 起首切换到dev_ws/src, 然后执行以下下令:
  1. git clone https://github.com/guyuehome/ros2_21_tutorials.git
复制代码
假如没有挂梯子可能会失败, 此时可以手动把项目下载下来, 解压后移动到src中

移动后应入以下结构


在dev_ws中通过终端打开vscode, 然后打开topic_webcam_pub.py文件,在文件最下方输入以下下令,然后再点击运行python
  1. if __name__ == '__main__':
  2.     main()
复制代码

假如是在捏造机中运行, 可能不会唤起摄像头, 但是程序是在正常执行的,分析执行ros2节点通过cv_bridge发送图片信息的程序也是可以正常运行的。可以自行在终端里构建后运行其相应的图片发布者节点以及图片接收者节点。

构建后分别运行两个节点的下令如下
  1. # 图片发布者节点
  2. ros2 run learning_topic topic_webcam_pub
  3. # 图片接收者节点
  4. ros2 run learning_topic topic_webcam_sub
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表