ubuntu+ros新手笔记(三):21讲没讲到的MoveIt2

1 安装MoveIt2

安装参照在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手

  1. 安装

    MoveIt2可以选择自己编译源码安装,或者直接从二进制安装。
    个人建议直接二进制安装,可以省很多事。

    sudo apt install ros-humble-moveit
    
  2. moveit-setup-assistant

    这是一个配套moveit的配置助手,有了它就可以方便地进行很多初始化的工作。

    sudo apt install ros-humble-moveit-setup-assistant
    

    顺便把别的东西也装了:

    sudo apt install ros-humble-moveit-*
    
  3. 启动moveit_setup_assistant

     ros2 run moveit_setup_assistant moveit_setup_assistant
    

    弹出如下界面表示安装成功!在这里插入图片描述

2 运行并学习MoveIt2的tutorials

参照MoveIt教程

2.1 源码准备

  1. 创建工作空间
    mkdir -p ~/ws_moveit/src
    
  2. 下载教程源码
    cd ~/ws_moveit/src
    git clone -b humble https://github.com/moveit/moveit2_tutorials
    
  3. 下载剩余源码
    vcs import --recursive < moveit2_tutorials/moveit2_tutorials.repos
    
    出现红色字表示拉取失败,我重复到第3次才拉取成功。。。拉取成功是这样的:
    在这里插入图片描述在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::SharedPtrrclcpp::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_interfacesactivate_all 的默认值分别是 truefalse。因此,除非你有特殊需求,否则直接传入 urdf 字符串即可。
如果需要自定义 validate_interfacesactivate_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 依赖于它。
解决方案

  1. 降级 markupsafe 版本(我降级的这个)
    将 markupsafe 降级到兼容的版本(如 2.0.1):

    pip install 'markupsafe==2.0.1' --user
    
  2. 升级 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.3
    
    Name: 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文件

配置方法与视频教程3.如何从零创建一个机器人模型完全一致。
用到的小工具:sw_urdf_exporter

注意用这个小工具的坐标系是自动生成的,由于坐标系错了会导致机器人的关节轴也出错,所以除了为每个joint配置旋转轴之外,还要定义轴对应的坐标系,这里要注意:(1)基座坐标系默认 Origin_global;(2)为了与机器人理论研究保持一致,关节坐标系的z轴必须与旋转轴平行,如果已经确定了运动学求解模型,最好z轴方向也要与求解模型里的z轴方向一致,这样方便后面关节角度–末端位姿的对应。 也可以在配置完后,导出文件前检查坐标系和旋转轴,然后再导出文件,这样修改也是有效的。

sw_urdf_exporter导出的文件夹是用于 ROS1 系统的,他的display.launch文件还不能用于ROS 2,因此要按照ROS 2的格式修改成display.launch.py文件。修改过程见下一节:

3.2 在RViz2中可视化机械臂

在Rviz2中正常启动。
在这里插入图片描述

3.3 在MoveIt2中对机械臂进行运动控制

是因为这里报错吗????
在这里插入图片描述打开Global Status Warn查看报错详情:
在这里插入图片描述
奇怪,Global OptionsFixed Frame明明有 base_link 呀,为什么Global Status里面没有 base_link 呢?
报错详情:

Global Status: Warn
Fixed Frame
No tf data. Actual error: Frame [base_link] does not exist

打印信息非常多,这里有一行红字,不知道会不会影响机器人功能:

在这里插入图片描述

报错:获取机器人当前状态失败

[move_group-2] [INFO] [1734573869.409753231] [move_group.moveit.moveit.ros.current_state_monitor]: Didn't receive robot state (joint angles) with recent timestamp within 1.000000 seconds. Requested time 1734573868.409614, but latest received state has time 0.000000.
[move_group-2] Check clock synchronization if your are running ROS across multiple machines!
[move_group-2] [WARN] [1734573869.409812549] [move_group.moveit.moveit.ros.planning_scene_monitor]: Failed to fetch current robot state.
[move_group-2] [INFO] [1734573869.409865499] [move_group.moveit.moveit.ros.move_group.move_action]: Planning request received for MoveGroup action. Forwarding to planning pipeline.

在这里插入图片描述

ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(cat /home/xj/ws_ok/src/ok3_moveit_config/config/ok3.urdf)"
ros2 topic echo /tf_static

在这里插入图片描述
但是! 正常应该是下图这样的啊!!!
在一个终端输入ros2 launch ros2_control_demo_example_7 view_r6bot.launch.py,然后在另一个终端应该显示:

ros2 topic info /joint_states //打印话题相关的信息
ros2 topic echo /tf_static  //打印话题消息内容

在这里插入图片描述
以及

ros2 topic echo /joint_states

在这里插入图片描述

3.4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维 mysql、redis 、RocketMQ性能排查

MySQL查看数据库连接数 1. SHOW STATUS命令-查询当前的连接数 MySQL 提供了一个 SHOW STATUS 命令&#xff0c;可以用来查看服务器的状态信息&#xff0c;包括当前的连接数。 SHOW STATUS LIKE Threads_connected;这个命令会返回当前连接到服务器的线程数&#xff0c;即当前…

jmeter连接mysql

查询mysql数据库版本 SELECT VERSION(); 下载jmeter mysql 驱动jar包&#xff0c;版本低于mysql版本&#xff0c;放在jmeter的lib 路径下 MySQL :: Download MySQL Connector/J (Archived Versions) 添加JDBC Connection Configuration 填写 variable name 及数据库信息 注意…

Docker的容器

目录 1. 什么是容器&#xff1f;2. 容器的生命周期2.1 容器处理OOM事件2.2 容器异常退出2.3 容器暂停 3. 容器命令详解3.1 容器命令清单3.2 docker create命令3.3 docker run命令3.4 docker ps命令3.5 docker logs命令3.6 docker attach命令3.7 docker exec命令3.8 docker stat…

JAVA题目笔记(二十六)反射

一、保存信息 Student类&#xff1a; package testpackage;import java.io.IOException;public class Student {private String name;private String area;public String testfield;private int age;public Student() {}public Student(String name, String area, int age) {t…

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

皮肤伤口分割数据集labelme格式248张5类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;284 标注数量(json文件个数)&#xff1a;284 标注类别数&#xff1a;5 标注类别名称:["bruises","burns","cu…

Ollama配置与webUI本地部署-学习记录

Ollama 前言一、Ollama的下载与安装设置(windows)1.下载2.安装与配置1.查看环境变量&#xff1a;2.设置环境变量&#xff1a;3.设置变量 二、使用步骤1.查找模型2.使用Ollama1.下载模型2.使用 三、WebUI部署WebUI 总结 前言 Ollama是一款可以开始使用本地的大型语言模型。启动…

vscode不同项目使用不同插件

转载请注明出处&#xff1a;小帆的帆的博客 在使用vscode开发不同项目时可能会用到不同的插件。手动管理不够优雅&#xff0c;本文介绍使用Profiles的方式的来管理不同项目的插件。 手动管理不同项目的插件 本来vscode安装了有三个插件 这时需要新建一个项目&#xff0c;新…

数据结构 ——前缀树查词典的实现

数据结构 ——前缀树查词典的实现 一、前缀树的概念 前缀树是一种多叉树结构&#xff0c;主要用于存储字符串。每个节点代表一个字符&#xff0c;路径从根节点到叶节点表示一个完整的字符串。前缀树的关键特征是 共享前缀&#xff0c;也就是说&#xff0c;如果两个字符串有相…

H5 中 van-popup 的使用以及题目的切换

H5 中 van-popup 的使用以及题目的切换 在移动端开发中&#xff0c;弹窗组件是一个常见的需求。vant 是一个轻量、可靠的移动端 Vue 组件库&#xff0c;其中的 van-popup 组件可以方便地实现弹窗效果。本文将介绍如何使用 van-popup 实现题目详情的弹窗展示&#xff0c;并实现…

leetcode 36.有效的数独

1.题目要求: 2.题目步骤: 写好判断函数 3.题目代码: class Solution { public:bool isvalid(vector<vector<char>>& board,char num,int row,int col){//先找左下标int leftrow row - 1;while(leftrow > 0){if(board[leftrow][col] num){return fals…

ElasticSearch中的深度分页问题

在使用 ElasticSearch 进行搜索时&#xff0c;很多小伙伴会遇到“深度分页”问题。当需要获取大量的分页数据时&#xff0c;查询性能会急剧下降&#xff0c;甚至导致集群负载过高。这篇文章将深入剖析 ElasticSearch 深度分页的成因、危害&#xff0c;并提供一些常用的优化方案…

Eureka学习笔记-服务端

Eureka学习笔记 服务端 模块设计 Resources &#xff1a;这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外&#xff0c;其他的 Server 在同步 Registry 时也需要调用这些接口。Controller &#xff1a;这里提…

快速上手:利用 FFmpeg 合并音频文件的实用教程

FFmpeg 是一个强大的多媒体处理工具&#xff0c;能够轻松地对音频、视频进行编辑和转换。本文将介绍如何使用 FFmpeg 来合并&#xff08;拼接&#xff09;多个音频文件为一个单一文件。无论您是想要创建播客、音乐混音还是其他任何形式的音频项目&#xff0c;这都是一个非常实用…

在 CUDA C/C++ 中使用共享內存

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长(4700字),期望您…

Linux文件属性 --- 硬链接、所有者、所属组

三、硬链接数 1.目录 使用“ll”命令查看&#xff0c;在文件权限的后面有一列数字&#xff0c;这是文件的硬链接数。 对于目录&#xff0c;硬链接的数量是它具有的直接子目录的数量加上其父目录和自身。 下图的“qwe”目录就是“abc”目录的直接子目录。 2.文件 对于文件可…

RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索

01. 背景 混合搜索(Hybrid Search)作为RAG应用中Retrieve重要的一环&#xff0c;通常指的是将向量搜索与基于关键词的搜索&#xff08;全文检索&#xff09;相结合&#xff0c;并使用RRF算法合并、并重排两种不同检索的结果&#xff0c;最终来提高数据的召回率。全文检索与语义…

SpringAI人工智能开发框架002---SpringAI项目搭建_依赖导入_maven仓库引入_接口中转

然后看依赖.可以看到 看一下官网springAI的最新版本看到是0.8.1 这里我们用1.0.0这个最新的,快照版 1.0.0-snapshot 然后再来看,需要导入这个 spring-ai-openai-spring-boot-starter 这个依赖是openai的.

机器学习之偏差

机器学习中的偏差&#xff08;Bias&#xff09;是指模型的预测值与真实值之间的系统性误差&#xff0c;或者说模型无法准确捕捉数据中复杂模式的能力。偏差通常与模型的假设或学习能力有关&#xff0c;过高的偏差会导致模型的性能不佳&#xff0c;表现为欠拟合。 偏差的来源 模…

(css)鼠标移入或点击改变背景图片

(css)鼠标移入或点击改变背景图片 html <div class"mapTip"><divv-for"(item, index) of legendList":key"index"class"mapTipOne":class"{ active: change index }"click"legendHandle(item, index)"…