【ROS2】ROS2 基础学习教程 、movelt学习
主要博主 参考资料:
ROS系列:
b站荔枝橙
b战哈萨克斯坦x
《ROS 2机器人开发从入门到实践》6.2.2 在RViz中显示机器人_哔哩哔哩_bilibili
动手学ROS2–鱼香肉丝
古月居ros2教程
北京华清智能科技 ros教程
moveit系列:
爱喝青柑普洱的鸭梨-moveit基础入门
moveit humble官网
Youtube&b站实战项目:
leran robotics with ros很不错 里面系列课程都可以 但是不是放出全部,部分收费
b站:后来老师up主 机械臂仿真简单demo全教程
automatic Addison YouTube很不错
https://automaticaddison.com/
使用ROS与Movelt实现大象机器人myCobot 280机械臂运动轨迹规划和控制
其他:
ROS2导入机械臂URDF竟有这些坑?SO-ARM100 Rivz可视化避坑指南_ros2导入机械臂urdf竟有这些坑?so-arm100 rivz可视化避坑指南-CSDN博客
https://medium.com/@kabilankb2003/training-so-100-robot-for-cube-lifting-in-isaac-lab-from-simulation-to-intelligent-control-with-9e81f94c6d6e
Lerobot. so-100 仿真環境數據搜集_哔哩哔哩_bilibili
lerobot_so100_sim仿真操控_哔哩哔哩_bilibili
逆映射唯一的个人空间-逆映射唯一个人主页-哔哩哔哩视频
28BoundlessHope的个人空间-28BoundlessHope个人主页-哔哩哔哩视频
11jzzz的个人空间-11jzzz个人主页-哔哩哔哩视频
ros2 手动安装-不建议,建议使用鱼香ros一键安装
1 ROS入门学习
古月居ROS2入门教程:
https://book.guyuehome.com/ROS2/2.%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5/2.1_%E5%B7%A5%E4%BD%9C%E7%A9%BA%E9%97%B4/
1.1 工作空间
下载古月居项目编译报错,原因是直接使用了Anaconda 环境
临时停用Anaconda 环境
永久停用Anaconda 环境
1.2 gazebo
gazebo启动不了,安装之后
xzl@xzl-HP99:~/Desktop$ ros2 launch gazebo_ros gazebo.launch.py [INFO] [launch]: All log files can be found below /home/xzl/.ros/log/2025-05-26-00-10-53-007034-xzl-HP99-76311 [INFO] [launch]: Default logging verbosity is set to INFO [INFO] [gzserver-1]: process started with pid [76312] [INFO] [gzclient-2]: process started with pid [76314] [gzclient-2] gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gazebo::rendering::Camera; typename boost::detail::sp_member_access::type = gazebo::rendering::Camera*]: 断言 “px != 0” 失败。 [ERROR] [gzclient-2]: process has died [pid 76314, exit code -6, cmd ‘gzclient --gui-client-plugin=libgazebo_ros_eol_gui.so’].
本质就是第一个连接解决方案,没source setup文件
source /usr/share/gazebo/setup.sh
后面学习新的东西时候,就将gazebo变了,变成gazebo fortress长期支持版本,最终使用ign gazebo能启动就代表gazebo安装好了。
同时也要安装ros相应版本和gazebo集成。
sudo apt-get install ros-${ROS_DISTRO}-ros-gz
Binary Installation on Ubuntu — Gazebo fortress documentation
gazebo 启动失败_gzclient process has died-CSDN博客
启动gazebo失败报错
使用gazebo的官方模型库文件_gazebo官网的模型数据-CSDN博客
gazebo报错 | 鱼香ROS
1.3 其他难点(后续需重新研究)
通行接口是如何从cmake文件编译到各类文件的?
话题、服务、动作回调函数是如何执行的?回调函背后的机制是啥?
参数是如何在需要重新编译的情况下动态设置的,看视频第一遍没看懂?
launch资源重映射的例子?
tf坐标系里面没有太搞明白代码如何操作的?
2 moviet学习
2.1 Tutorials
Getting Started
可以参考爱喝青柑普洱的鸭梨,主要就是如何创建工作空间和编译,注意编译内存不够非常容易崩了,所以最好参考文档,加上–parallel-workers 1,一个个编译。
MoveIt Quickstart in RViz
主要介绍了rviz的面板怎么用,一个正常的机械臂,各个规划按钮怎么使用
Your First C++ MoveIt Project
主要讲解了一个简单的c++代码,如何从初始状态规划到目标状态,并且在rviz中显示。注意编译时候可以参用增量编译,参考爱喝青柑普洱的鸭梨 colcon build --packages-select hello_moveit 单独编译这一个包
Visualizing In RViz
这一讲,主要讲的是如何使用代码控制rivzvisualtools
Planning Around Objects
这一讲,主要讲的是环境中添加了碰撞对象,如何使用代码控制rivzvisualtools,并且规划执行
3 youtube视频&实战
以automatic Addison为主线:
系列1 ROS基础
install ros2 jazzy
其中可以将ros的setup.bash echo到.~/bashrc里面,这样每次打开shell自动导入环境变量
安装gazebo 22.04版本 ,我的是按照古月居ros2教程进行安装,最终老是崩溃的原因放到csdn里面了,没source setup文件
domainid可以让机器人在不同的域中工作,默认都是0
后面由于YouTube时长原因,时间太长了,就直接读了这个教育网站的博客
但是其中从urdf开始还是看的网站
urdf 小车的轮子是旋转的joint
rosdep installb -i --from… 的命令会检查项目中的pacay.xml文件哪些没安装,自动帮你安装了
xacrao 更简单 更加灵活
mycobot280 里面有很多的不同结构的文件
夹爪:
urdf 的prefix指的是命名前缀
mimic标签 主控制器移动一个单位,引用主控制器其他的关节结构将要移动的位置长度
小车的urdf xacrao文件imu系列 可以在gazebo标签里面增加topic这样仿真里面就可以看到imu模拟测量的点云了
几何碰撞通常将不规则的地方简化,比如车子直接简化为长方体
gazebo的使用,gazebo 世界模型和urdf一样,本质就是urdf,只不过里面一个个嵌套了,机器人控制文件
所有的机械臂控制都需要一个控制的yaml文件,自己新的机械臂导入时候setup助手会帮助生成一个
controlleryaml里面有 很多控制的参数
gazebo中的机械夹爪怎么关闭的,可以通过gz topic发送符合controller控制的信息然后,可以使用topic发送对应上的msg的,然后对应格式msg 的topic就可以关闭夹爪
后续可以使用其他封装的服务比如action ,使用ros action来执行命令
当前也可以使用脚本来执行操作,比如是Python和c++ 直接spin自旋然后 就可以使用脚本然后launch不断发布话题
gazebo中的虚拟深度相机图像可以回传到rivz中
机器人有很多参数化的技巧,可以使用c++脚本来先设定一个参数,然后再设定一个参数来改变他,从而可以使得不用改变脚本的情况下重参数化
动作action的ros写法,??? YouTube笔记讲的很好,粗略了看了下,没看完
话题重映射类似java接口一样,可以重映射应该
系列2 导航章节
传感器融合:采用卡尔曼滤波
slam建图:amcl 自适应蒙特卡洛定位,采用粒子滤波算法,slam导航也有例子,也要创建yaml文件然后进行导航处理
导航实操章节也有
nav2 simple commander api可以使用此api控制机器人的运动,路径规划,以及各种任务
系列3 movelt系列
1.sdrf文件是对urdf文件的一个补充 里面有很多不错的博客内容
不同规划器之间的区别,ompl,pilz椭圆曲线的规划适合搅拌东西 类似一个抓取的仿真的任务,分为不同的阶段
moveit2 任务构造器 不同阶段的概念比官方文解释的清楚,生成器,传播器,连接器。任务规划中容器的概念,包装器,串行,并行(替代,后备,合并阶段),包括日志中各类箭头的解释,不同的指向是不一样的,具体含义可以看博客内容
gazebo官方文档里面 fortess里面 使用gazebo项目 里面有一个卢森堡大学的课程还不错 卢森堡 大学的movelt2 里面有深度相机拍摄轨迹规划的场景
系列4 自己动手实操
movelt官方文档系列实操笔记
0 preface 序言
- colcon build报错:
colcon build --mixin release usage: colcon [-h] [–log-base LOG_BASE] [–log-level LOG_LEVEL] {build,extension-points,extensions,graph,info,list,metadata,mixin,test,test-result,version-check} … colcon: error: Mixin ‘release’ is not available for ‘build’
按照豆包最终解决了:但是他这里说的有错,最终也只是拉取在线的default配置,没有自己定义,最终编译成功
如果 default mixin 中确实没有 release 配置,或者你想自定义配置,可以创建自己的 mixin 文件:
2 moveit 第一个c++入门项目,编译报错,原因在于粘贴的文件不一样
colcon build --packages-select hello_moveit
将该成如下:
#include <moveit/move_group_interface/move_group_interface.h>
3 第一个c++项目,按要求改之源码之后,会编译报错,原因暂未解决,但是b站播主视频并未讲解到这里。
解决方案:又是文档改了导致不兼容了
auto move_group_interface = MoveGroupInterface(node, “panda_arm”);
【Moveit2】第一个C++ Moveit程序_moveit c+±CSDN博客
automatic Addison 系列实操
实操到:Movelt系列 automatic addison
- 您的第一个c++项目 总是规划失败 原因是日志好像只支持关节空间 不支持末端姿态
效果:
gazebo ros2 rivz+movelt 联合仿真
过程:
使用这个命令时候,报错是因为mycobot_description编译好之后,shell未重载
ros2 launch urdf_tutorial display.launch.py model:=/home/ubuntu/ros2_ws/src/mycobot_ros2/mycobot_description/urdf/robots/mycobot_280.urdf.xacro
source install/setup.bash
直接使用youtube博客的官方案例那样topic控制命令不生效
使用这样可以
ros2 topic pub /diff_drive_base_controller/cmd_vel_unstamped geometry_msgs/msg/Twist “{linear: {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.5}}” --rate 5
怎么跑博客的house.world,直接使用gz命令是不行的,
要改2个方面,
1个环境变量 ,这个改成类似这个:
export IGN_GAZEBO_RESOURCE_PATH=“$HOME/world_tutorial”
1个 用这个启动house world
ign gazebo
启动成功,最终报这个错
moviet+rviz联合仿真
规划器选不到,日志有好几个报错
OMPL 规划适配器参数类型不匹配(导致规划管道加载失败)
机器人模型关节定义不匹配(影响模型解析)
次要报错:脚本中gz命令未找到
按照gpt 的数组改成字符串改了,
还有部分报错会一直刷屏,需要继续改
后来仔细的研究了下几个问题,
第一个 expected [string] got [string_array] 错误的核心原因。yaml格式不对
Using CHOMP Planner — MoveIt Documentation: Humble documentation
moveit 后面总是带这个_metic找不到的错误
https://github.com/ros-controls/gazebo_ros2_control/issues/173
我这里在后缀都添加了一个mimic
后来就好了,github上面有很多相似的问题
https://github.com/ros-controls/gz_ros2_control/issues/96
https://github.com/art-e-fact/crane_x7_description/pull/1
https://github.com/ROBOTIS-GIT/turtlebot3_manipulation/issues/66
https://github.com/ros-controls/gz_ros2_control/blob/e2a475104b67134cebb697ed533fc3523dfe3924/ign_ros2_control/src/ign_system.cpp#L290
https://github.com/moveit/moveit2/blob/92ca89dca4fee679bc63a53bde9a992415a4d29e/moveit_core/robot_model/src/robot_model.cpp#L1301
https://github.com/ros-controls/gazebo_ros2_control/issues/173
https://github.com/ros-controls/gazebo_ros2_control/issues/173
https://robotics.stackexchange.com/questions/25107/ros2-moveit-cant-find-mimic-joint
您的第一个c++ movelt项目
将头文件改成hpp->h
改了头文件之后,仍然报错,找不到对应的函数
里面的函数给改变了
您的第一个c++ 项目
这个cpp项目,
shell 1是这样的
shell2是这样的
但是不生效 rivz 的规划还是都偏向于 0.0.0
曲面轨迹自己demo 系列实操
实操到:豆包自动生成油箱检测项目 在ubantu ws_learning_test下面(但stl文件法线一直无法加载)