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.pswp.cn/web/62399.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62399.shtml
英文地址,請注明出處:http://en.pswp.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安裝與配置 將包上傳到 /…

如何使用靜態IP代理?【詳細教程】

靜態IP地址是手動分配給設備或伺服器的固定不變的 IP。與動態 IP 地址不同&#xff0c;動態 IP 地址由 DHCP 伺服器自動分配&#xff0c;並且會隨時間而變化。??????? 如何獲取和設置靜態IP地址 一、檢查是否需要靜態IP&#xff1f; 在配置靜態 IP 之前&#xff0c;請…

監控組態軟件的構成與功能

監控組態軟件的構成包括系統開發環境、圖形界面系統、實時數據庫系統等。其功能包括數據采集與控制、人機交互界面、數據處理與存儲等。 監控組態軟件的構成&#xff1a; 系統開發環境&#xff1a;這是自動化工程設計工程師為實施其控制方案&#xff0c;在組態軟件的支持下進行…

Java 基礎之 XQuery:強大的 XML 查詢語言

一、什么是 XQuery XQuery 是一種函數式語言&#xff0c;專門用于檢索以 XML 格式存儲的信息。它負責從 XML 文檔中查找和提取元素及屬性&#xff0c;在網絡服務中有著廣泛的應用&#xff0c;比如提取信息、生成摘要報告、進行數據轉換等。 XQuery 是 W3C 設計的一種針對于 X…

day09性能測試(1)——純理論

document.querySelector(video).playbackRate 2.5 //可以寫任何數字 【沒有所謂的運氣&#x1f36c;&#xff0c;只有絕對的努力?】 目錄 1、性能測試概念 2、功能測試 vs 性能測試 3、小結&#xff08;習題&#xff09; 4、性能測試的策略 4.1 基準測試 4.2 負載測試 …

docker-3.docker權限問題

docker權限,每次開機都要重新sudo 目錄 1.簡介2.解決辦法1:當前用戶添加到docker用戶組(這個方法還是缺權限??)3.解決辦法2:臨時更改Docker socket文件權限1.簡介 Ubuntu下Docker提示permission denied (權限不足)解決辦法 安裝docker后,執行docker ps命令時提示 perm…

easyExcel實現表頭批注

背景&#xff1a; 網上大部分都不能直接使用&#xff0c;為此總結一個方便入手且可用的工具&#xff0c;用自定義注解實現 依賴包&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>…

內部類和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 對比度…

19 設計模式之享元模式(電影院座位預定案例)

一、享元模式的定義 享元模式是一種結構型設計模式&#xff0c;它通過共享對象來支持大量細粒度的對象&#xff0c;減少內存消耗。享元模式的核心思想是&#xff1a;將對象分為共享部分和非共享部分&#xff0c;只有共享部分是被多個對象共享的&#xff0c;而非共享部分則是每個…

使用redis 的stream 做消息中間件 多線程消費消息

1.redis stream 特點 1.支持消息持久化 2.消費者組模式 3.消息確認機制 4. 消息重試機制 5. 死信隊列2. 消息生產者服務 2.1 如下代碼Service Slf4j public class StreamMessageProducer {Autowiredprivate StringRedisTemplate redisTemplate;private static final String S…

Python100道練習題

Python100道練習題 BIlibili 1、兩數之和 num1 20 num2 22result num1 num2print(result)2、一百以內的偶數 list1 []for i in range(1,100):if i % 2 0:list1.append(i) print(list1)3、一百以內的奇數 # 方法一 list1 [] for i in range(1,100):if i % 2 ! 0:lis…

Java轉C之并發和多線程

提綱&#xff1a; 概念介紹與對比概述 簡述Java與C在并發和多線程方面的核心區別解釋C11標準、POSIX、C11 <threads.h>、Pthread等名詞 Java多線程與并發回顧 線程、Runnable、ExecutorService概念說明同步關鍵字與工具類含義 C并發基礎 沒有Java式的內置線程類&#xf…

Ubuntu系統本地化搭建Maxakb+Ollama

安裝docker 最詳細的ubuntu 安裝 docker教程-騰訊云開發者社區-騰訊云 安裝Ollama Ollama官網 執行命令&#xff1a; curl -fsSL https://ollama.com/install.sh | sh安裝完成后下載模型 執行命令&#xff1a; ollama run llama3.3:70b安裝MaxKb 執行命令&#xff1a; d…

基于JAVA的旅游網站系統設計

摘要 隨著信息技術和網絡技術的迅速發展&#xff0c;人們的生活質量和觀念也在發生著改變&#xff0c;各地爭相發展旅游業&#xff0c;傳統的 旅游社已經無法滿足人們的需求&#xff0c;旅游網站將突破傳統在時間和地域的限制&#xff0c;成為方便、快捷、安全、可靠的旅游 方…

【Flux.jl】 卷積神經網絡

Flux.jl 是包含卷積神經網絡的, 但是官方API文件中沒有給出一個完整的程序框架, 只是對所需神經元給了局部解釋, 此外對 model-zoo 模型動物園中的案例沒有及時跟著 Flux.jl 的版本更新, 也無法運行出來結果。 因此本文搭建了一個完整可訓練的卷積神經網絡。 Conv 卷積算子…

H5游戲出海如何獲得更多增長機會?

海外H5小游戲的崛起給了國內眾多中小廠商出海發展的機會&#xff0c;開發者如何在海外市場獲得更多的增長機會&#xff1f;#APP出海# H5游戲如何在海外獲得核心用戶&#xff1f; HTML5游戲的開發與運營者們首先可以利用量多質高的HTML5游戲&#xff0c;維持海外用戶粘性&…