ros-noetic gazebo 对Panda机器人仿真笔记

gazebo初步

gazebo是一个ros的一个仿真平台

启动

rosrun gazebo_ros gazebo

模型下载

官网给出了一些模型可以自行插入
下载地址为 https://github.com/osrf/gazebo_models
可能打开比较麻烦
所以使用:

链接: https://pan.baidu.com/s/1KlBz4grygtHg91C3nBcM7A 密码: geq1

下载后把模型放到
~/.gazebo/models/(如果是图形界面操作,注意显示隐藏文件夹)

panda仿真

franka_ros库的安装

本人是noetic,所以安装命令如下

sudo apt-get install ros-noetic-franka-ros

这会包含franka_descriptionpanda_moveit_config等一系列包

gazebo-ros-control库的安装

sudo apt-get install ros-noetic-gazebo-ros-control

moveit库的安装

moveit用于机械臂的轨迹规划,建议还是安装
首先获取包

sudo apt install ros-noetic-moveit

接下来使用moveit设置助手可以进行一些图形化操作

roslaunch moveit_setup_assistant setup_assistant.launch

详见
https://ros-planning.github.io/moveit_tutorials/doc/setup_assistant/setup_assistant_tutorial.html
这可以帮忙自动生成一些文件

机械臂模型的整合

参考https://ros-planning.github.io/moveit_tutorials/doc/gazebo_simulation/gazebo_simulation.html

进入如下目录

/opt/ros/noetic/share/franka_description/robots

panda_arm.xarcohand.xarco进行修改

连接到世界

panda_arm.xacro添加如下,来连接到世界

<link name="world" />

<joint name="robot_to_world" type="fixed">
  <parent link="world" />
  <child link="${arm_id}_link0" />
  <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>

添加阻尼

添加一个常量 joint_damping(阻尼),在除了固定的每一个关节上加一个<dynamics/>的阻尼参数,固定关节可以不加

<xacro:property name="joint_damping" value="1.0"/>

<joint name="robot_to_world" type="fixed">
  <parent link="world" />
  <child link="${arm_id}_link0" />
  <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
  <dynamics damping="${joint_damping}"/> 
</joint>

添加惯性矩阵

给每个link添加<inertia/>属性,只输入六个参数是因为对称性(该数据为推测数据,非官方的)

<link name="${arm_id}_link0">
   <visual>
      <geometry>
         <mesh filename="package://${description_pkg}/meshes/visual/link0.dae" />
      </geometry>
   </visual>
   <collision>
      <geometry>
         <mesh filename="package://${description_pkg}/meshes/collision/link0.stl" />
      </geometry>
   </collision>
   <inertial>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <inertia ixx="0.3" ixy="0.0" ixz="0.0" iyy="0.3" iyz="0.0" izz="0.3" />
   </inertial>
</link>

添加质量

<inertial>
    <origin xyz="0 0 0" rpy="0 0 0" />
    <mass value="3.06" />
    <inertia ixx="0.3" ixy="0.0" ixz="0.0" iyy="0.3" iyz="0.0" izz="0.3" />
</inertial>

下面的质量是某网友用meshlab估计的
https://erdalpekel.de/?p=55
请添加图片描述
第八个link是一块小的金属圆柱,可以不加质量

添加关节摩擦力和颜色

是按照0.2摩擦系数来算的,手臂颜色是白色,爪子颜色是灰色
在刚才的目录新建panda.gazebo.xacro(这样新建是为了简洁),输入如下代码

<?xml version='1.0' encoding='utf-8'?>
<!-- panda.gazebo.xacro -->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
    <xacro:macro name="panda_gazebo" params="arm_id">
        <xacro:macro name="arm_gazebo" params="link">
            <gazebo reference="${link}">
                <material>Gazebo/White</material>
                <mu1>0.2</mu1>
                <mu2>0.2</mu2>
            </gazebo>
        </xacro:macro>
        <xacro:macro name="hand_gazebo" params="link">
            <gazebo reference="${link}">
                <material>Gazebo/Grey</material>
                <mu1>0.2</mu1>
                <mu2>0.2</mu2>
            </gazebo>
        </xacro:macro>
        <xacro:arm_gazebo link="${arm_id}_link0"/>
        <xacro:arm_gazebo link="${arm_id}_link1"/>
        <xacro:arm_gazebo link="${arm_id}_link2"/>
        <xacro:arm_gazebo link="${arm_id}_link3"/>
        <xacro:arm_gazebo link="${arm_id}_link4"/>
        <xacro:arm_gazebo link="${arm_id}_link5"/>
        <xacro:arm_gazebo link="${arm_id}_link6"/>
        <xacro:hand_gazebo link="${arm_id}_link7"/>
        <xacro:hand_gazebo link="${arm_id}_link8"/>
        <xacro:hand_gazebo link="${arm_id}_hand"/>
        <xacro:hand_gazebo link="${arm_id}_rightfinger"/>
        <xacro:hand_gazebo link="${arm_id}_leftfinger"/>
    </xacro:macro>
</robot>
题外话

inertial标签下为惯性相关参数,其下包括origin、mass、inertia三部分。其中:

  • origin部分为惯性参考系相对于本坐标系(wheel_lf_link坐标系)的姿态,惯性参考系的原点即为重心,坐标轴一般默认与本坐标系对齐(rpy参数均为0):<origin xyz="0 0.0125 0" rpy="0 0 0" />
  • mass标签下为质量参数,即本link下全部零件(左前轮)的总质量,单位为千克: <mass value="0.09763481" />
  • inertia标签下为本link下零件在本坐标系下的惯性张量,单位为千克*平方米: <inertia ixx="3.51383610148207E-05" ixy="0" ixz="0" iyy="6.01064294059595E-05" iyz="0" izz="3.51383610148207E-05" />

joint标签下为关节相关参数,其下包括name、type、origin、parent、child、axis六部分。其中:

  • name为关节名称
  • type为关节类型: <joint name="wheel_lf_joint" type="continuous">
  • origin为子link坐标系相对于父link坐标系的坐标变换,包括xyz和rpy六个数据:<origin xyz="0.0625 0.05 0.014" rpy="0 0 0" />
  • parent为父link名称
  • child为子link名称;<parent link="base_link" /> <child link="wheel_lf_link" />
  • axis为基准轴在本坐标系中的姿态:

添加执行器(马达)

	  <xacro:macro name="arm_control" params="transmission joint motor">
            <transmission name="${transmission}">
                <type>transmission_interface/SimpleTransmission</type>
                <joint name="${joint}">
                    <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
                </joint>
                <actuator name="${motor}">
                    <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
                    <mechanicalReduction>1</mechanicalReduction>
                </actuator>
            </transmission>
        </xacro:macro>
    	<xacro:arm_control transmission="${arm_id}_tran_1" joint="${arm_id}_joint1" motor="${arm_id}_motor_1"/>

类似的把完整的写在panda.control.xacro

汇总配置后的模型

<?xml version="1.0" encoding="utf-8"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="panda">
  <xacro:include filename="$(find franka_description)/robots/panda_arm.xacro"/>
  <xacro:include filename="$(find franka_description)/robots/hand.xacro"/>
  <xacro:include filename="$(find franka_description)/robots/panda.gazebo.xacro"/>
  <xacro:include filename="$(find franka_description)/robots/panda.control.xacro"/>

  <xacro:panda_arm xyz="0 0 0" rpy="0 0 0" connected_to="world" arm_id="panda"/>
  <xacro:hand ns="panda" rpy="0 0 ${-pi/4}" connected_to="panda_link8"/>
  <xacro:panda_gazebo arm_id="panda"/>
  <xacro:panda_control arm_id="panda"/>
</robot>

配置控制器

# MoveIt-specific simulation settings
moveit_sim_hw_interface:
    joint_model_group: controllers_initial_group_
    joint_model_group_pose: controllers_initial_pose_
# Settings for ros_control control loop
generic_hw_control_loop:
    loop_hz: 300
    cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:
    joints:
        - panda_joint1
        - panda_joint2
        - panda_joint3
        - panda_joint4
        - panda_joint5
        - panda_joint6
        - panda_joint7
        - panda_finger_joint1
    sim_control_mode: 1  # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS
joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50
panda_arm_controller:
    type: effort_controllers/JointTrajectoryController
    joints:
        - panda_joint1
        - panda_joint2
        - panda_joint3
        - panda_joint4
        - panda_joint5
        - panda_joint6
        - panda_joint7
    gains:
        panda_joint1: { p: 12000, d: 50, i: 0.0, i_clamp: 10000 }
        panda_joint2: { p: 30000, d: 100, i: 0.02, i_clamp: 10000 }
        panda_joint3: { p: 18000, d: 50, i: 0.01, i_clamp: 1 }
        panda_joint4: { p: 18000, d: 70, i: 0.01, i_clamp: 10000 }
        panda_joint5: { p: 12000, d: 70, i: 0.01, i_clamp: 1 }
        panda_joint6: { p: 7000, d: 50, i: 0.01, i_clamp: 1 }
        panda_joint7: { p: 2000, d: 20, i: 0.0, i_clamp: 1 }

    constraints:
        goal_time: 2.0
    state_publish_rate: 25

panda_hand_controller:
    type: effort_controllers/JointTrajectoryController
    joints:
        - panda_finger_joint1
        - panda_finger_joint2

    gains:
        panda_finger_joint1: { p: 5, d: 3.0, i: 0, i_clamp: 1 }
        panda_finger_joint2: { p: 5, d: 1.0, i: 0, i_clamp: 1 }

    state_publish_rate: 25

controller_list:
    - name: panda_arm_controller
      action_ns: follow_joint_trajectory
      type: FollowJointTrajectory
      default: true
      joints:
        - panda_joint1
        - panda_joint2
        - panda_joint3
        - panda_joint4
        - panda_joint5
        - panda_joint6
        - panda_joint7
    - name: panda_hand_controller
      action_ns: follow_joint_trajectory
      type: FollowJointTrajectory
      default: true
      joints:
        - panda_finger_joint1
        - panda_finger_joint2

完全替换掉panda_moveit_config/config/ros_controllers.yaml主要是修改为力的输出并设置pid增益?
之后是把模型存到gazebo服务器并在空世界生成,加载moveit在rviz的可视化工具,然后就可以进行路径规划了(咕咕)

通常问题

机械臂鬼畜摆动

没有使用力控制器而是在用位置控制器之类的

gazebo和rviz的机械臂位姿不同

没有重新映射

<node name="joint_state_desired_publisher" pkg="topic_tools" type="relay" args="joint_states joint_states_desired" />

完整代码详见资源https://download.csdn.net/download/qq_35975855/21458798 亲测可用

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
    随着ICT技术不断深化和传统场景的结合,自动化、智能化相融合已经成为ICT技术的下一代浪潮,以工业机器人、服务机器人、自动驾驶等的新一代技术浪潮目前已经方兴未艾,成为又一波热点。而作为次级操作系统的ROS则提供了一系列的调试、仿真工具,能支持激光导航、视觉导航等算法,是切入机器人和自动驾驶技术的重要基础。    机器人是一个复合型的领域,涉及软件、算法、硬件、结构等诸多方向,是一个理论性和实践性并重的学科,考虑到其复杂性和讲解的循序渐进,整个系列课程将分为三个系列即入门系列、中级系列、高级系列。   在入门系列中,我们将介绍ROS的基础知识(机器人基础知识、ROS开发环境等)、ROS配置管理(系统架构、参数管理、Launch启动、编译配置以及如何基于源代码开发等)、ROS系统调试(代码调试、可视化调试、消息回放、单元测试等),获得该领域的入门券。   在中级系列中,我们将围绕机器人建模与仿真涉及的URDF机器人模型、Gazebo仿真环境、坐标变换、运动控制、环境感知等展开介绍,熟练掌握利用RVIZ、Gazebo仿真和调试工具调试机器人程序与算法。   在高级系列中,我们将着眼于人工智能框架及算法,分享机器人开发涉及的运动控制、SLAM、语音交互、计算机视觉等。逐层递进,为大家一层层剥开机器人的神秘面纱。    本系列课程的特色在于:    1、从基础知识、建模与仿真、环境感知与智能决策、人机交互等4个方面循序渐进、逐步深化,知识覆盖全面,便于深度认知;    2、从基本理论、源码解读、工程示例等领域开展ROS系统入门知识的深度介绍和分析,源于工程实践,利于快速上手;   3、基于全新的环境Ubuntu 20.04、ROS Noetic、Gazebo 11、GMapping、Cartographer、tensorFlow 2.*、OpenCV 4.*等讲解,紧跟时代前沿。   整个系列的课程将会逐步开发并上线,三个系列是一个逐步深入、环环相扣的课程内容,感兴趣的同学可以开始学习啦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧易风船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值