ros项目dual_arm_pick-place(moveit和gazebo联合仿真)(一)

目录

  • 前言
  • 正文
    • 创建功能包
    • 具体代码
    • 运行
  • 总结

前言

dual_arm_pick-place项目中,实现了两套的moveit和gazebo联合仿真

启动文件分别是bringup_moveit.launcharm_bringup_moveit.launch

在这里插入图片描述
在这里插入图片描述

在这个项目中,我将代码重新创建了一个包,co_simulation,这个包里面只需要五个文件**(两个yaml文件,三个launch文件)**,我尝试后,就能够实现联合仿真,而且调用的是我自己创建的moveit配置助手包marm_moveit_config

这个意思是说,理论上来说,我们不需要对moveit配置助手包内容进行任何改变操作,就能够实现联合仿真。

但是,不好意思的是,目前我只在这里进行了测试,其他项目中,还没来得及测试,但是,我觉得,肯定会遇到一些问题。

不过,本项目是可以完全放心使用的。

正文

这里需要注意的是,我上文中说的是五个文件,有同学会问,这里不是六个嘛。

  • bringup_moveit_config.launch是使用的我自己创建的moveit配置助手创建的包marm_moveit_config,里面内容没有更改。
  • bringup_moveit.launch使用的是作者使用moveit配置助手创建的marmbots包。

两种我都试过了,都可以实现联合仿真。所以我才说的,不需要修改moveit配置助手包就能使用。

在这里插入图片描述

创建功能包

catkin_create_pkg co_simulation urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins

我这里创建功能包,喜欢多写一些依赖项。

项目树长这样

├── CMakeLists.txt
├── config
│   ├── joint_state_controller.yaml
│   └── trajectory_controller.yaml
├── launch
│   ├── bringup_gazebo.launch
│   ├── bringup_moveit_config.launch
│   ├── bringup_moveit.launch
│   └── controller_utils.launch
└── package.xml

具体代码

co_simulation/config/joint_state_controller.yaml

joint_state_controller:type: joint_state_controller/JointStateControllerpublish_rate: 50  

co_simulation/config/trajectory_controller.yaml

arma_trajectory_controller:type: "position_controllers/JointTrajectoryController"joints:- joint1a- joint2a- joint3a- joint4a- joint5a- joint6aconstraints:goal_time: 0.6stopped_velocity_tolerance: 0.05joint1a: {trajectory: 0.1, goal: 0.1}joint2a: {trajectory: 0.1, goal: 0.1}joint3a: {trajectory: 0.1, goal: 0.1}joint4a: {trajectory: 0.1, goal: 0.1}joint5a: {trajectory: 0.1, goal: 0.1}joint6a: {trajectory: 0.1, goal: 0.1}stop_trajectory_duration: 0.5state_publish_rate:  25action_monitor_rate: 10armb_trajectory_controller:type: "position_controllers/JointTrajectoryController"joints:- joint1b- joint2b- joint3b- joint4b- joint5b- joint6bconstraints:goal_time: 0.6stopped_velocity_tolerance: 0.05joint1b: {trajectory: 0.1, goal: 0.1}joint2b: {trajectory: 0.1, goal: 0.1}joint3b: {trajectory: 0.1, goal: 0.1}joint4b: {trajectory: 0.1, goal: 0.1}joint5b: {trajectory: 0.1, goal: 0.1}joint6b: {trajectory: 0.1, goal: 0.1}stop_trajectory_duration: 0.5state_publish_rate:  25action_monitor_rate: 10#notice that the grippers joint2 mimics joint1
#this is why it is not listed under the hand controllers
handa_controller:type: "position_controllers/JointTrajectoryController"joints:- finger_joint1agains:finger_joint1a:  {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}handb_controller:type: "position_controllers/JointTrajectoryController"joints:- finger_joint1bgains:finger_joint1b:  {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}

co_simulation/launch/bringup_gazebo.launch

<?xml version="1.0"?>
<launch>
<!-- 打开gazebo仿真 --><!-- Launch empty Gazebo world --><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="use_sim_time" value="true" /><!-- <arg name="world_name" value="$(find test_gazebos_att)/worlds/test_attacher.world"/> --><arg name="gui" value="true" /><arg name="paused" value="false" /><arg name="debug" value="false" /></include><!-- Load the robot description file--><param name="robot_description" command="$(find xacro)/xacro  '$(find marm_description)/urdf/arms2b.xacro'" /><!-- Spawn the robot over the robot_description param--><node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -param robot_description -model arms" />
</launch>

co_simulation/launch/bringup_moveit_config.launch

<?xml version="1.0"?>
<launch><!-- Run the main MoveIt executable with trajectory execution --><include file="$(find marm_moveit_config)/launch/move_group.launch"><arg name="allow_trajectory_execution" value="true" /><arg name="moveit_controller_manager" value="ros_control" /><arg name="fake_execution_type" value="interpolate" /><arg name="info" value="true" /><arg name="debug" value="false" /><arg name="pipeline" value="ompl" /><arg name="load_robot_description" value="true" /></include><!-- Start the simulated robot in an empty Gazebo world --><include file="$(find co_simulation)/launch/bringup_gazebo.launch" /><!-- Start the controllers and robot state publisher--><include file="$(find co_simulation)/launch/controller_utils.launch"/><!-- Start moveit_rviz with the motion planning plugin --><include file="$(find marm_moveit_config)/launch/moveit_rviz.launch"><arg name="rviz_config" value="$(find marm_moveit_config)/launch/moveit.rviz" /></include></launch>

co_simulation/launch/bringup_moveit.launch

<?xml version="1.0"?>
<launch><!-- Run the main MoveIt executable with trajectory execution --><include file="$(find marmbots)/launch/move_group.launch"><arg name="allow_trajectory_execution" value="true" /><arg name="moveit_controller_manager" value="ros_control" /><arg name="fake_execution_type" value="interpolate" /><arg name="info" value="true" /><arg name="debug" value="false" /><arg name="pipeline" value="ompl" /><arg name="load_robot_description" value="true" /></include><!-- Start the simulated robot in an empty Gazebo world --><include file="$(find co_simulation)/launch/bringup_gazebo.launch" /><!-- Start the controllers and robot state publisher--><include file="$(find co_simulation)/launch/controller_utils.launch"/><!-- Start moveit_rviz with the motion planning plugin --><include file="$(find marmbots)/launch/moveit_rviz.launch"><arg name="rviz_config" value="$(find marmbots)/launch/moveit.rviz" /></include></launch>

co_simulation/launch/controller_utils.launch

<?xml version="1.0"?>
<launch><!-- Robot state publisher --><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"><param name="publish_frequency" type="double" value="50.0" /><param name="tf_prefix" type="string" value="" /></node><!-- Joint state controller --><rosparam file="$(find co_simulation)/config/joint_state_controller.yaml" command="load" /><node name="joint_state_controller_spawner" pkg="controller_manager" type="spawner" args="joint_state_controller" respawn="false" output="screen" /><!-- Joint trajectory controller --><rosparam file="$(find co_simulation)/config/trajectory_controller.yaml" command="load" /><node name="arms_trajectory_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="arma_trajectory_controller armb_trajectory_controller handa_controller handb_controller" /></launch>

运行

以下两个命令都可以实现

roslaunch co_simulation bringup_moveit.launch 
roslaunch co_simulation bringup_moveit_config.launch 

总结

用这种方式实现联合仿真比较简单,但是,不太清楚,其他的项目,能否用这种方式去实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…

MySQL生产环境备份脚本

全量备份脚本&#xff0c;其中BakDir&#xff0c;ZlbakDir&#xff0c;LogFile需要自己创建 #!/bin/bash export LANGen_US.UTF-8# 指定备份目录 BakDir/root/beifen/data/mysqlbak/data/allbak # 指定增量备份目录 ZlbakDir/root/beifen/data/mysqlbak/data/zlbak # 备份日志…

HTTP multipart/form-data 请求

序言 最近在写项目的过程中有一个需求是利用 HTTP 协议传输图片和视频&#xff0c;经过查询方法相应的方法发现使用 multipart/form-data 的方式&#xff0c;这是最常见处理二进制文件的表单编码类型。  学习了一下午&#xff0c;现在总结一下使用的方法和相关的知识点&#x…

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…

day09性能测试(1)——纯理论

document.querySelector(video).playbackRate 2.5 //可以写任何数字 【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、性能测试概念 2、功能测试 vs 性能测试 3、小结&#xff08;习题&#xff09; 4、性能测试的策略 4.1 基准测试 4.2 负载测试 …

内部类和Object类

匿名对象 格式&#xff1a; 匿名对象只可以调用一次成员 &#xff1a; 1. 调用一次成员变量 &#xff1a; new 类名(实参).成员变量名&#xff1b; 2.调用一次成员方法&#xff1a; new 类名(实参).成员方法名(实参)&#xff1b; 匿名对象存在的必要&#xff1a;为了提高…

Python的3D可视化库vedo 1-3 (visual模块)网格对象的线和面、图片的属性

文章目录 4 MeshVisual4.1 线条4.1.1 线宽和颜色4.1.2 线条渲染为管 4.2 曲面4.2.1 物体展示为实心或框架4.2.2 曲面插值4.2.3 面的剔除 4.3 纹理4.4 相机跟随 5 ImageVisual5.1 图片属性5.1.1 占用内存大小5.1.2 颜色标量范围 5.2 渲染属性5.2.1 透明度5.2.2 亮度5.2.3 对比度…

基于JAVA的旅游网站系统设计

摘要 随着信息技术和网络技术的迅速发展&#xff0c;人们的生活质量和观念也在发生着改变&#xff0c;各地争相发展旅游业&#xff0c;传统的 旅游社已经无法满足人们的需求&#xff0c;旅游网站将突破传统在时间和地域的限制&#xff0c;成为方便、快捷、安全、可靠的旅游 方…

H5游戏出海如何获得更多增长机会?

海外H5小游戏的崛起给了国内众多中小厂商出海发展的机会&#xff0c;开发者如何在海外市场获得更多的增长机会&#xff1f;#APP出海# H5游戏如何在海外获得核心用户&#xff1f; HTML5游戏的开发与运营者们首先可以利用量多质高的HTML5游戏&#xff0c;维持海外用户粘性&…

国际荐酒师Peter助力第六届地博会,推动地理标志产品国际化发展

国际荐酒师Peter Lisicky助力第六届知交会暨地博会&#xff0c;推动地理标志产品国际化发展 第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会于2024年12月9日至11日在中新广州知识城盛大举行&#xff0c;吸引了全球众多行业专家、企业代表及相关机构齐聚一…

2024 亚马逊云科技re:Invent:Werner Vogels架构哲学,大道至简 六大经验助力架构优化

在2024亚马逊云科技re:Invent全球大会第四天的主题演讲中&#xff0c;亚马逊副总裁兼CTO Dr.Werner Vogels分享了 The Way of Simplexity&#xff0c;繁简之道&#xff0c;浓缩了Werner在亚马逊20年构建架构的经验。 Werner表示&#xff0c;复杂性总是会“悄无声息”地渗透进来…

ThinkPHP框架审计--基础

基础入门 搭建好thinkphp 查看版本方法&#xff0c;全局搜version 根据开发手册可以大致了解该框架的路由 例如访问url http://127.0.0.1:8094/index.php/index/index/index 对应代码位置 例如在代码下面添加新方法 那么访问这个方法的url就是 http://127.0.0.1:8094/index.…

如何在vue中使用ECharts

一. 打开ECharts官网,点击快速入门 下面是ECharts官网的链接 https://echarts.apache.org/ 二.在vue中使用 1.首先先引入Echarts js文件 如下图&#xff0c;下面的第一张图片是官网的实现&#xff0c;第二章图片是我根据官网的实现 2.给ECharts 创建一个DOM容器 3. 使用ec…

网络原理之 IP 协议

目录 1. IP 协议报文格式 2. 网段划分 3. 地址管理 1) 动态分配 2) NAT 机制 (网络地址转换) 3) IPv6 4. 路由选择 1. IP 协议报文格式 IP 协议是网络层的重点协议。 网络层要做的事情&#xff0c;主要就是两方面&#xff1a; 1) 地址管理 制定一系列的规则&#xff…

HyperMesh CFD功能详解:后处理功能Part 2

Clips Clips 按钮包含两个工具。Box Clip用于空间上的裁剪&#xff0c;Scalar Clip可以根据物理量的范围裁剪。 示例&#xff1a;Box Clips 裁剪 示例&#xff1a;Scalar Clips 裁剪 通过裁剪&#xff0c;仅显示density范围是10~20的等值面 示例&#xff1a;显示效果控制 部分透…

Java项目实战II基于微信小程序的跑腿系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的现代生活中&…

【机器学习与数据挖掘实战案例01】基于支持向量回归的市财政收入分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支&#xff0c;专注于让计算机系统通过数据学习和改进。它利用统计和计算方法&#xff0c;使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

JavaEE 【知识改变命运】03 多线程(3)

文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因&#xff1a;1.线程是抢占式的2. 多线程修改同一个变量&#xff08;程序的要求&#xff09;3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…

【力扣】409.最长回文串

问题描述 思路解析 因为同时包含大小写字母&#xff0c;直接创建个ASCII表大小的桶来标记又因为是要回文子串&#xff0c;所以偶数个数的一定可以那么同时&#xff0c;对于出现奇数次数的&#xff0c;我没需要他们的次数-1&#xff0c;变为偶数&#xff0c;并且可以标记出现过…

计算机视觉在科学研究(数字化)中的实际应用

计算机视觉是一种利用计算机技术来解析和理解图像和视频的方法。.随着计算机技术的不断发展&#xff0c;计算机视觉被广泛应用于科学研究领域&#xff0c;为科学家提供了无限的可能。 一、生命科学领域 在生命科学领域&#xff0c;计算机视觉被广泛用于图像识别、分类和测量等…