ubuntu+ros新手笔记(三):21讲没讲到的MoveIt2
1 安装MoveIt2
安装参照在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手
-
安装
MoveIt2可以选择自己编译源码安装,或者直接从二进制安装。
个人建议直接二进制安装,可以省很多事。sudo apt install ros-humble-moveit
-
moveit-setup-assistant
这是一个配套moveit的配置助手,有了它就可以方便地进行很多初始化的工作。
sudo apt install ros-humble-moveit-setup-assistant
顺便把别的东西也装了:
sudo apt install ros-humble-moveit-*
-
启动moveit_setup_assistant
ros2 run moveit_setup_assistant moveit_setup_assistant
弹出如下界面表示安装成功!
2 运行并学习MoveIt2的tutorials
参照MoveIt教程
2.1 源码准备
- 创建工作空间
mkdir -p ~/ws_moveit/src
- 下载教程源码
cd ~/ws_moveit/src git clone -b humble https://github.com/moveit/moveit2_tutorials
- 下载剩余源码
出现红色字表示拉取失败,我重复到第3次才拉取成功。。。拉取成功是这样的:vcs import --recursive < moveit2_tutorials/moveit2_tutorials.repos
在tutorials同一层文件夹多出了刚刚拉取成功的文件夹:
2.2 开始编译–好多错 @_@
安装colcon mixin,不然编译报错
sudo apt install python3-colcon-common-extensions
sudo apt install python3-colcon-mixin
colcon mixin add default https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
colcon mixin update default
开始编译:
cd ~/ws_moveit
colcon build --mixin release
报错了。。。。
2.2.1. No module named ‘catkin_pkg’ (已解决)
ModuleNotFoundError: No module named 'catkin_pkg'
奇怪!
pip list
明明有catkin_pkg
啊
这是python环境的原因,有catkin_pkg的是系统自带的python环境,但是不知道为什么colcon build自动用的是anaconda的base环境,而base环境里没有catkin_pkg,所以报错了。。。
在base环境中安装
conda activate base
pip install catkin_pkg
或者:为 ROS 2 强制指定 Python 解释器
如果需要同时使用 Anaconda 和 ROS 2,可以为 ROS 2 工具链强制指定 Python 解释器路径。
在运行 colcon build 前,设置以下环境变量:
export PYTHON_EXECUTABLE=/usr/bin/python3
再次
colcon build --mixin release
2.2.2. No module named ‘em’(错的,对的在2.2.3)
ModuleNotFoundError: No module named 'em'
安装em
pip install em
再次
colcon build --mixin release
2.2.3. module ‘em’ has no attribute ‘Interpreter’(已解决)
AttributeError: module 'em' has no attribute 'Interpreter'
附带另一个错
AttributeError: 'NoneType' object has no attribute 'shutdown'
嘻嘻,2.2.2 错了
应该是
pip uninstall em
pip uninstall empy
pip install empy==3.3.4
2.2.4 No module named ‘lark’(已解决)
ModuleNotFoundError: No module named 'lark'
安装
pip install lark
多个python环境共存,容易分不清是在哪个环境里,所以我把anaconda卸载了
2.2.5 error: no matching function for call to ‘hardware_interface::(已解决)
终于不是缺包的错了!
[ 87%] Built target test_crc_utils
[ 87%] Built target test_data_utils
/home/xj/ws_moveit/src/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp: In member function ‘virtual void robotiq_driver::test::TestRobotiqGripperHardwareInterface_load_urdf_Test::TestBody()’:
/home/xj/ws_moveit/src/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp:79:114: error: no matching function for call to ‘hardware_interface::ResourceManager::ResourceManager(std::string&, rclcpp::node_interfaces::NodeClockInterface::SharedPtr, rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr)’79 | hardware_interface::ResourceManager rm(urdf, node.get_node_clock_interface(), node.get_node_logging_interface());| ^
In file included from /home/xj/ws_moveit/src/ros2_robotiq_gripper/robotiq_driver/tests/test_robotiq_gripper_hardware_interface.cpp:31:
/opt/ros/humble/include/hardware_interface/resource_manager.hpp:66:12: note: candidate: ‘hardware_interface::ResourceManager::ResourceManager(const string&, bool, bool)’66 | explicit ResourceManager(| ^~~~~~~~~~~~~~~
/opt/ros/humble/include/hardware_interface/resource_manager.hpp:67:36: note: no known conversion for argument 2 from ‘rclcpp::node_interfaces::NodeClockInterface::SharedPtr’ {aka ‘std::shared_ptr<rclcpp::node_interfaces::NodeClockInterface>’} to ‘bool’67 | const std::string & urdf, bool validate_interfaces = true, bool activate_all = false);| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/ros/humble/include/hardware_interface/resource_manager.hpp:49:3: note: candidate: ‘hardware_interface::ResourceManager::ResourceManager()’49 | ResourceManager();| ^~~~~~~~~~~~~~~
/opt/ros/humble/include/hardware_interface/resource_manager.hpp:49:3: note: candidate expects 0 arguments, 3 provided
目前这个错我还看不懂,请教一下chatgpt:
这个错误是因为
hardware_interface::ResourceManager
的构造函数在 ROS 2 Humble
版本中发生了变化。在你的代码中,调用的ResourceManager
构造函数与当前 ROS 2 Humble 提供的 API 不匹配。
问题原因
根据 Humble 版本的 hardware_interface::ResourceManager,其构造函数定义如下:
explicit ResourceManager(
const std::string & urdf,
bool validate_interfaces = true,
bool activate_all = false);
参数变化:不再接受 rclcpp::node_interfaces::NodeClockInterface::SharedPtr
和 rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr
。
解决方法:更新代码,调用当前的 ResourceManager 构造函数签名。
解决方案
你需要修改 test_robotiq_gripper_hardware_interface.cpp
文件的第 79 行,将错误的参数调整为符合 Humble API。
- 原始代码:
hardware_interface::ResourceManager rm( urdf, node.get_node_clock_interface(), node.get_node_logging_interface());
- 修改后的代码:
根据 Humble 版本的构造函数,去掉多余的参数,只传递 urdf 字符串:hardware_interface::ResourceManager rm(urdf);
完整解释
validate_interfaces
和 activate_all
的默认值分别是 true
和 false
。因此,除非你有特殊需求,否则直接传入 urdf 字符串即可。
如果需要自定义 validate_interfaces
和 activate_all
,可以显式传入:
hardware_interface::ResourceManager rm(urdf, true, false);
验证修改
保存修改后的文件。
重新编译项目:
总结
原因:ROS 2 Humble 中 hardware_interface::ResourceManager 的 API 已更改。
解决:调整构造函数调用,移除多余的参数,符合新的函数签名。
2.2.6 ImportError: cannot import name ‘soft_unicode’ from ‘markupsafe’
ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/usr/local/lib/python3.10/dist-packages/markupsafe/__init__.py)
这个错误是由于 markupsafe 版本不兼容 导致的。在较新的 markupsafe 版本(如 2.1.0 及以上)中,soft_unicode 已被移除,而某些旧版本的 jinja2 依赖于它。
解决方案
-
降级 markupsafe 版本(我降级的这个)
将 markupsafe 降级到兼容的版本(如 2.0.1):pip install 'markupsafe==2.0.1' --user
-
升级 jinja2 版本
如果你的项目依赖较新版本的 markupsafe,可以通过升级 jinja2 来解决兼容性问题。pip install --upgrade jinja2 --user
jinja2 的新版本(如 3.1.0 及以上)已经去除了对 soft_unicode 的依赖。
3. 检查 Python 包版本
确保你的环境中 jinja2 和 markupsafe 版本正确。使用以下命令查看当前版本:pip show jinja2 markupsafe
我的输出:
Name: Jinja2 Version: 2.10.3Name: MarkupSafe Version: 3.0.2
总结
降级 markupsafe 到 2.0.1。(我降级的这个)
升级 jinja2 到最新版本(推荐)。
确保正确的 Python 包被加载,避免多环境冲突。
2.2.7 编译成功辣!
然后source一下,
source ~/ws_moveit/install/setup.bash
或者添加路径到.bashrc
echo 'source ~/ws_moveit/install/setup.bash' >> ~/.bashrc
3. 导入urdf文件,控制机器人
由于目前还没有找到专用于MoveIt2的视频教程,先参照这个教程:4.ROS机械臂开发中的主角MoveIt!
没有错误略过,有错误记录解决方案~~
3.1 在Solidworks中配置并导出机器人的urdf文件
Solidworks to urdf
3.2 在RViz2中可视化机械臂
3.3 在MoveIt2中对机械臂进行运动控制
3.4
相关文章:

ubuntu+ros新手笔记(三):21讲没讲到的MoveIt2
1 安装MoveIt2 安装参照在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手 安装 MoveIt2可以选择自己编译源码安装,或者直接从二进制安装。 个人建议直接二进制安装,可以省很多事。 sudo apt install ros-humble-moveitmoveit-setup-assistan…...

Android Studio创建新项目并引入第三方so外部aar库驱动NFC读写器读写IC卡
本示例使用设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单,选择 要创建的项目模版,点击 Next 二、输入项目名称…...

window QT/C++ 与 lua交互(mingw + lua + LuaBridge + luasocket)
一、环境与准备工作 测试环境:win10 编译器:mingw QT版本:QT5.12.3 下载三种源码: LuaBridge源码:https://github.com/vinniefalco/LuaBridge LUA源码(本测试用的是5.3.5):https://www.lua.org/download.html luasocket源码:https://github.com/diegonehab/luasocket 目…...
中阳科技:量化模型驱动的智能交易革命
在金融市场飞速发展的今天,量化交易作为科技与金融的深度融合,正推动市场格局向智能化转型。中阳科技凭借先进的数据分析技术与算法研发能力,探索量化模型的升级与优化,为投资者提供高效、智能的交易解决方案。 量化交易的本质与价…...

电子应用设计方案-56:智能书柜系统方案设计
智能书柜系统方案设计 一、引言 随着数字化时代的发展和人们对知识获取的需求增加,智能书柜作为一种创新的图书管理和存储解决方案,能够提供更高效、便捷和个性化的服务。本方案旨在设计一款功能齐全、智能化程度高的智能书柜系统。 二、系统概述 1. 系…...

宠物兔需要洗澡吗?
在宠物兔的养护领域,“宠物兔需要洗澡吗” 这个问题一直备受争议。其实,这不能简单地一概而论,而要综合多方面因素考量。 兔子本身是爱干净的动物,它们日常会通过自我舔舐来打理毛发。从这个角度讲,如果兔子生活环境较…...
ubuntu升级python版本
Ubuntu升级Python版本 解压缩文件: 下载完成后,解压缩文件: tar -xf Python-3.12.0.tgz编译并安装: 进入解压后的目录,然后配置和安装Python: codecd Python-3.12.0 ./configure --enable-optimizations ma…...

《Time Ghost》的制作:使用 DOTS ECS 制作更为复杂的大型环境
*基于 Unity 6 引擎制作的 demo 《Time Ghost》 开始《Time Ghost》项目时的目标之一是提升在 Unity 中构建大型户外环境的构建标准。为了实现这一目标,我们要有处理更为复杂的场景的能力、有足够的工具支持,同时它对引擎的核心图形、光照、后处理、渲染…...
详细描述一下 Elasticsearch 更新和删除文档的过程。
1、删 除 和 更 新 也 都 是 写 操 作 , 但 是 Elasticsearch 中的 文 档 是 不 可 变 的 , 因 此 不 能被 删 除 或 者 改 动 以 展 示 其 变 更 ; 2、磁盘 上 的 每 个 段 都 有 一 个 相 应 的 .del 文件 。当删 除 请 求 发 送 后 &#…...

OpenCV与Qt5开发卡尺找圆工具
文章目录 前言一、卡尺原理二、1D边缘提取三、圆拟合四、软件实现结束语 基于OpenCV与Qt5构建卡尺找圆工具 前言 博主近期基于海康Vision Master4.0做了一个工业视觉工程项目,其中就使用到了海康VM的找圆工具,然后博主根据其中的技术原理,也…...
【网络安全】Web Timing 和竞争条件攻击:揭开隐藏的攻击面
Web Timing 和竞争条件攻击:揭开隐藏的攻击面 在传统的 Web 应用中,漏洞的发现和利用通常相对容易理解。如果代码存在问题,我们可以通过发送特定输入来强制 Web 应用执行非预期的操作。这种情况下,输入和输出之间往往有直接关系&…...

分立器件---运算放大器关键参数
运算放大器 关键参数 1、供电电压:有单电源电压、双电源电压,双电源电压尽量两个电源都接。如图LM358B,供电电压可以是20V或者是40V和GND。 2、输入偏置电流IB:当运放输出直流电压为零时,运放两个输入端流进或者流出直流电流的平均值。同向输入端电流IB+与反向输入端电流…...

Stable Diffusion Controlnet常用控制类型解析与实战课程 4
本节内容,是stable diffusion Controlnet常用控制类型解析与实战的第四节课程。上节课程,我们陆续讲解了几个与图像风格约束相关的控制类型,本节课程我们再学习一些实用价值较高的控制类型,看一看他们提供了哪些控制思路。 一&…...
Linux 本地编译安装 gcc9
这里演示非sudo权限的本地linux 用户安装 gcc9 下载源代码: 可以从GCC官方网站或其镜像站点下载GCC 9的源代码压缩包。使用wget或curl命令,这通常不需要额外权限 wget https://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.gz tar -xf gcc-9.5.0.tar…...
SpringBoot 自定义事件
在Spring Boot中,自定义事件和监听器是一种强大的机制,允许你在应用程序的不同部分之间进行解耦通信。你可以定义自定义事件,并在需要的时候发布这些事件,同时让其他组件通过监听器来响应这些事件。 以下是如何在Spring Boot中创…...
unity shader中的逐像素光源和逐顶点光源
在Unity Shader中,逐像素光源和逐顶点光源是两种不同的光照计算方法,它们之间存在显著的区别。 一、基本原理 逐顶点光源:这种方法在顶点着色器中计算每个顶点的光照值。然后,在片段着色器中,通过插值算法将这些顶点…...

MongoDB-副本集
一、什么是 MongoDB 副本集? 1.副本集的定义 MongoDB 的副本集(Replica Set)是一组 MongoDB 服务器实例,它们存储同一数据集的副本,确保数据的高可用性和可靠性。副本集中的每个节点都有相同的数据副本,但…...
【图像处理lec7】图像恢复、去噪
目录 一、图像退化与恢复概述 二、图像退化中的噪声模型 1、使用 imnoise 函数添加噪声 (1)imnoise 函数的概述 (2)函数语法 (3)支持的噪声类型与具体语法 (4)噪声类型的详细…...
C# 连接ClickHouse 数据库
在 C# 中连接 ClickHouse 数据库,您可以使用 ClickHouse.Client 库。这个库提供了对 ClickHouse 数据库的高效访问。以下是详细的步骤指南,帮助您在 C# 项目中连接和操作 ClickHouse 数据库。 1. 安装 ClickHouse.Client 包 首先,您需要在您…...
在安卓Android应用中实现二维码图像的保存与条形码文本合并
在开发Android应用时,我们经常需要处理图像和文本数据,特别是当涉及到二维码生成和条形码信息展示时。本文将介绍如何在Android应用中实现一个功能,即将二维码图像保存到设备存储,并在图像下方添加条形码文本信息。为了实现这一功…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...