170111-机械臂gazebo基础

前言

  • 依然是基础

参考

Mastering ROS for Robotics Programming.2015

学习记录

概述

  • 需要安装以下包
sudo apt-get install ros-jade-gazebo-ros-pkgs ros-jade-gazeboros ros-jade-gazebo-msgs ros-jade-gazebo-plugins
  • gazebo_ros_msgs: ROS包,为Gazebo提供ros方面的接口
  • gazebo-msgs: 为ros提供gazebo方面的接口
  • gazebo-plugins: gazebo plugins for sensors and actuators
  • gazebo-ros-control: 包含标准的控制器

制作xacro文件

添加颜色和纹理

<gazebo reference="bottom_link">
<material>Gazebo/White</material>
</gazebo>
<gazebo reference="base_link">
<material>Gazebo/White</material>
</gazebo>
<gazebo reference="shoulder_pan_link">
<material>Gazebo/Red</material>
</gazebo>

添加换能信息

  • 定义这种信息是为了将关节和马达(激励)联系起来,下面是定义transmission的宏
<xacro:macro name="transmission_block" params="joint_name">
<transmission name="tran1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${joint_name}">
<hardwareInterface>PositionJointInterface</
hardwareInterface>
</joint>
<actuator name="motor1">
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
  • Here, the "> is the joint in which we link the actuators. The element is the type of transmission. Currently, transmission_interface/SimpleTransmission is only supported. The element is the type of hardware interface to load (position, velocity, or effort interfaces). The hardware interface is loaded by the gazebo_ros_control plugin; we can see more about this plugin in the next section.

添加gazebo_ros_control插件

  • 在xacro文件下添加这些文件
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.
so">
<robotNamespace>/seven_dof_arm</robotNamespace>
</plugin>
</gazebo>
  • The default hardware interfaces are JointStateInterface, EffortJointInterface, and VelocityJointInterface.

添加一个3D传感器

制作环境启动文件

roslaunch seven_dof_arm_gazebo seven_dof_arm_world.launch

在RViz中查看图像

rosrun rviz rviz -f /rgbd_camera_optical_frame

使用ROS Controllers来移动机械臂各个关节

概述

  • 对于每一个关节,我们都必须定义一个ROS Controller,这个控制器必须兼容硬件平台,这个硬件平台在xacro的中已经定义好。
  • 一个控制器往往拥有一个PID控制律,这个控制律根据给定的点位置来输出一定的反馈输出给电机,来实现闭环控制。
  • ros controller不会直接与硬件联系,而是与硬件接口联系(很好理解),硬件接口的作用是解释ROS控制器发送过来的数据信息,解决一些冲突问题。
  • 在典型的机械臂中,需要定义好位置控制器,速度控制器,力矩控制器等等。这些控制器都在ros_control包中。
  • 接下来我们学习如何配置这些控制器。

理解ros_control包

  • 这一个大包实现了机器人控制器robot controllers, controller managers控制器管理器, hardware interface硬件接口,不同的换能接口transmission interface和控制工具箱control toolboxes.
  • 主要包括以下包:
    • control_toolbox: 包含PID控制器和sine控制器
    • controller_interface: 包含控制机接口的基类
    • controller_manager: 这个包能够加载,卸载,启动和停止控制器
    • controller_manager_msgs: 为控制器管理器提供消息和服务的实现
    • hardware_interface: 硬件接口的基类
    • transmission_interface: 换能接口类,(差速,四杆机构,关节状态,位置,速度)

不同种类的ros控制器和硬件接口

  • 标准的ROS控制器有:

    • joint_pisition_controller: 简单的关节位置控制器
    • joint_state_controller: 控制器,发送joint state消息
    • joint_effort_controller: 关节力矩控制器
  • 一般使用的硬件接口是:
    • Joint Command Interface: 发送关节信息给硬件
    • Effort Joint Interface:
    • Velocity Joint Interface:
    • Position Joint Interface:
    • Joint State Interface: 这个接口会从激励器的编码器处获得传感信息

ROS控制器与Gazebo连接

设置joint state controllers and joint position controllers

为两个控制器写配置文件,名字为xxx_control.yaml
  • 这是一个总的配置文件,规定每一个控制器分别发送和接收何种消息
cyton_gamma_1500_arm:
  # Publish all joint states -----------------------------------
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50 

  # Position Controllers ---------------------------------------
  joint1_position_controller:
    type: position_controllers/JointPositionController
    joint: shoulder_roll_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint2_position_controller:
    type: position_controllers/JointPositionController
    joint: shoulder_pitch_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint3_position_controller:
    type: position_controllers/JointPositionController
    joint: shoulder_yaw_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint4_position_controller:
    type: position_controllers/JointPositionController
    joint: elbow_pitch_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint5_position_controller:
    type: position_controllers/JointPositionController
    joint: elbow_yaw_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint6_position_controller:
    type: position_controllers/JointPositionController
    joint: wrist_pitch_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint7_position_controller:
    type: position_controllers/JointPositionController
    joint: wrist_roll_joint
    pid: {p: 100.0, i: 0.01, d: 10.0}
写启动控制器的启动文件
  • xxx_gazebo_control.launch
<launch>
  <!-- Launch Gazebo  -->
  <include file="$(find gamma_1500_gazebo)/launch/cyton_gamma_1500_world.launch" />  

  <!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find gamma_1500_gazebo)/config/cyton_gamma_1500_gazebo_control.yaml" command="load"/>

  <!-- load the controllers -->
  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
    output="screen" ns="/cyton_gamma_1500_arm" args="joint_state_controller
                      joint1_position_controller
                      joint2_position_controller
                      joint3_position_controller
                      joint4_position_controller
                      joint5_position_controller
                      joint6_position_controller
                      joint7_position_controller"/>

  <!-- convert joint states to TF transforms for rviz, etc -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
    respawn="false" output="screen">
    <remap from="/joint_states" to="/cyton_gamma_1500_arm/joint_states" />
  </node>

</launch>
移动关节
  • 启动控制器,然后发送消息即可
roslaunch seven_dof_arm_gazebo seven_dof_arm_gazebo_control.launch
rostopic list
rostopic pub /seven_dof_arm/joint4_position_controller/command std_msgs/Float64 1.0
rostopic echo /seven_dof_arm/joint_states

原文地址:https://www.cnblogs.com/lizhensheng/p/11117530.html

时间: 2024-10-15 20:23:43

170111-机械臂gazebo基础的相关文章

机械臂的运动规划

如果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很成熟了,无需再研究,但实际上,机械臂运动规划非常难-- 如 果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很 成熟了,无需再研究,但实际上,机械臂运动规划非常难,之所以这么难,主要是因为规划问题的维度太高(具体后面分析),目前暂无兼顾实时性与最优性的规划 算

基于 Mathematica 的机器人仿真环境(机械臂篇)[转]

完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些函数,所以请使用最新版.[email protected]).  1 导入机械臂的三维模型  2 (正/逆)运动学仿真  3 碰撞检测  4 轨迹规划  5 (正/逆)动力学仿真  6 控制方法的验证  不妨先看几个例子: 逆运动学 双臂协作搬运 显示运动痕迹 (平移)零空间运动  无论你是从事机器

[CQOI2014]排序机械臂

洛谷P3165 [CQOI2014]排序机械臂 https://www.luogu.org/problem/show?pid=3165 题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到摄低的物品的位置P1,并把左起第一个至P1间的物品反序:第二次找到第二低的物品的位置P2,并把左起第二个至P2间的物品反序...最终所有的物品都会被排好序. 上图给出_个示例,第_次操作前,菝低的物品在位置4,于是把第1至4的物品反序:第二次

摄像机标定用于机械臂抓举等(利用标定将图像上的点映射为三维坐标)

在实验室或者是工程上,我们常常需要将拍摄到的图像的二维图像坐标来计算三维坐标. 如上图所示,我们有上图这样的一副图片.我们需要将物体和机械臂的三维位置算出来,使得机械臂能够精确的抓住物体. 我们采用张正友标定的方法标定出内外参数,利用其内参与外参数算出其对应的三维坐标.具体公式略!可以参考张PAMI的论文. /*/ //author:YeahPingYE //function: //time:2014/11/25 // // // // // //*/ #include<highgui.h>

机械臂运动学入门(二)

中篇:核心之机械臂运动学 一. 建立机械臂坐标系的步骤 对于一个新机构可以按照下面的步骤建立连杆坐标系: 1. 找出各关节轴,并标出这些轴线的延长线.在下面的步骤2至步骤5中,仅考虑两个相邻的轴线(关节轴i和i+1). 2. 找出关节轴i和i+1之间的公垂线或关节轴i和i+1的交点,以关节轴i和i+1的交点或公垂线与关节轴的交点作为连杆坐标系{i}的原点. 3. 规定Zi轴沿关节轴i的指向. 4. 规定Xi轴沿公垂线的指向,如果关节轴i和i+1相交,则规定Xi轴垂直于关节轴i和i+1所在的平面.

六自由度机械臂项目学习笔记

由于课程要做一个控制六自由度机械臂的项目,主要是学习舵机和舵机控制的知识,在这里做一下学习笔记. 使用的舵机为2个DS3115MG数字舵机+4个MG996R模拟舵机. 1.舵机基本构造 2.舵机控制原理 控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘.舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止.其工作流程

洛谷P3165 [CQOI2014]排序机械臂

题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到摄低的物品的位置P1,并把左起第一个至P1间的物品反序:第二次找到第二低的物品的位置P2,并把左起第二个至P2间的物品反序...最终所有的物品都会被排好序. 上图给出_个示例,第_次操作前,菝低的物品在位置4,于是把第1至4的物品反序:第二次操作前,第二低的物品在位罝6,于是把第2至6的物品反序... 你的任务便是编写一个程序,确定一个操作序列,即每次操作前第i低的物品所在位

P3165 [CQOI2014]排序机械臂

P3165 [CQOI2014]排序机械臂 题目描述 为了把工厂中高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂.它遵循一个简单的排序规则,第一次操作找到摄低的物品的位置P1,并把左起第一个至P1间的物品反序:第二次找到第二低的物品的位置P2,并把左起第二个至P2间的物品反序...最终所有的物品都会被排好序. 上图给出_个示例,第_次操作前,菝低的物品在位置4,于是把第1至4的物品反序:第二次操作前,第二低的物品在位罝6,于是把第2至6的物品反序... 你的任务便是编写一个程序,确定

【BZOJ3506】排序机械臂(Splay)

[BZOJ3506]排序机械臂(Splay) 题面 神TMBZOJ没有题面,感谢SYC的题面 洛谷的题面也不错 题解 对于每次旋转的物体 显然可以预处理出来 现在只要模拟旋转操作就行了 至于在哪里放标记的问题 我只在第K大放会鬼.. 所以在Splay里面也放了一次(和LCT一样的) 然而我每次都把排到了正确位置的元素直接给删掉了... 所以跑的很慢很慢... #include<iostream> #include<cstdio> #include<cstdlib> #i