gazebo中仿真模型搭建相关总结+urdf生成

15 篇文章 1 订阅

具体过程可参考
 

从零开始的ROS机械臂,边学边做03-SW2URDF篇  https://www.jianshu.com/p/040635e4d8c8

Solidworks 2016中导出URDF文件 https://www.cnblogs.com/21207-iHome/p/7821269.html

Solidworks模型转化为URDF文件格式+三连杆机械臂示例+逆运动学  https://blog.csdn.net/gpeng832/article/details/73917487

相关总结:



## SolidWorks中,仿真模型的相关设置
- 建立轴和坐标系需要在装配体环境下,零件环境下建立的轴和坐标系不能在导出时使用(坐标系之间的相对关系错乱);
- 其它软件生成的中性文件,也可在solidworks中组装后,用sw2urdf插件导出urdf文件;

- 1.子连杆必须指定,否则在previe and export时,会报错:“未将对象引用设置到对象的实例”;
- - 对于末端参考点,可通过dumy link形式增加,后续有介绍;

- 关节类型为fixed,其轴线可以不指定,但关节名必须给定,否则previe and export时,会提示;


- 设置完所有link和joint,选择导出,如果关节是旋转关节,则需要设置限制参数;
- - lower、upper、velocity合理设置,否则关节可能不动;
- - gazebo仿真时,关节 effort 不能为0,否则无法驱动;


- 默认生成的package.xml里的email是不合法的,要改成合法的,如<maintainer email="yzy@gmail.com" />;
- - 这个在2018版本以后已经修正

- display.launch文件里的里的False改为True,否则无法打开Joint State Publish工具;
- - kinetic版本以后,joint-state-publisher变成joint-state-publisher-gui,还需安装 sudo apt-get install ros-kinetic-joint-state-publisher-gui

- 启动display.launch以后,在rviz的界面中将Global Options下的Fixed Frame 由map改为base_link(自己定义的基座的名字);
- Joint axis的方向定义在Joint frame中,而Joint frame(即子坐标系)则相对于其父坐标系Parent frame定义;



- 错误: (使用rviz中,使用motion plan选项时)
[ERROR] [1531378477.804970828]: Robot semantic description not found. Did you forget to define or remap '/robot_description_semantic'? 
原因:没有运行moveIt! 
请先运行MoveIt!


- gazebo.launch,打开时,各关节未定义驱动;直接在重力作用下自由晃动;
- - 需在urdf文件中,增加gazebo中的相关配置;

- <robotname>_control package
- - 定义每个关节控制器,控制器种类、pid参数等
- - 仿着写!


[ WARN] [1572440451.309709717]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia.  As a workaround, you can add an extra dummy link to your URDF.
- - 注释掉URDF文件中 base_link的<inertia>...</inertia>属性部分;会报错,不行!
- - 以下是个解决方案:增加dummy link
- - 若不root link 不是dummy link,则KDL计算动力学时,也会将该root link包括在内,整体会晃动、未固定!
<link name="dummy">
   </link>
<link name="base_link">
    <inertial>
      <origin xyz="0.15 0.15 .2" rpy="0 0 0"/>
      <mass value="10"/>
      <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
                   <box size="0.01 0.01 0.01"/>
      </geometry>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
      <box size="0.01 0.01 0.01"/>
      </geometry>
    </collision>
  </link>
  <joint name="dummy_joint" type="fixed">
     <parent link="dummy"/>
     <child link="base_link"/>
   </joint>



- 末端参考点,如TCP和fingertip,也可通过增加虚拟连杆的形式增加;
<link
name="dummy">
</link>
<joint
name="dummy_joint"
type="fixed">
<origin
    xyz="0.024 0 0"
    rpy="1.5708 0 1.5708" />
<parent
    link="link1" />
<child
    link="dummy" />
<axis
    xyz="0 0 0" />
</joint>




 <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find two_finger_module)/urdf/two_finger_module.urdf -urdf -model two_finger_module -z 0.2 -r 1" />
- 此处 -z 0.2  是将仿真模型放置于环境中(0,0,200mm)处; -r 还不知具体含义?


先启动display.launch再启动gazebo.launch,Rviz中RobotModel项就会有如下报错:
突然报错:Status erro
- No transform from [link0_left] to [base_link]
sudo apt-get install unicode  后,也会出现该情况;未解决?

# 异常:
- 设置完各关节的控制器以后,gazebo中打开,零件飞起、散落
- - 不加控制器时,不会飞落;应该是控制器相关参数设置导致的;
- - gazebo仿真时,关节 effort 为0,无法驱动,在重力作用下会自由晃动。
- - 由于采用的是effort_controllers/JointPositionController,涉及到力控
- - - 调节PID参数和各连杆转动惯量;
- - -  转动惯量放大1.0E-04 到 1.0E-05倍
- - - 给定目标关节角,看是否有超调现象,调节PID参数;


control 依赖于 robot_description;




# 检查URDF语法:在urdf文件所在目录打开终端: check_urdf two_finger_module.urdf
## sudo apt install liburdfdom-tools 

robot name is: two_finger_module
---------- Successfully Parsed XML ---------------
root Link: base_link has 2 child(ren)
    child(1):  link0_left
        child(1):  link1_left
            child(1):  link2_left
                child(1):  link3_left
                    child(1):  link4_left
                        child(1):  tip_left
    child(2):  link0_right
        child(1):  link1_right
            child(1):  link2_right
                child(1):  link3_right
                    child(1):  link4_right
                        child(1):  tip_right
##### gazebo仿真相关配置:
- 在urdf文件中,增加gazebo相关属性配置;
- 设置关节控制器 --- 否则关节会在重力作用下, 自由晃动;
- - <robotname>_control package  定义每个关节控制器,控制器种类、pid参数等, 仿着写!

相关问题解决:
- 设置完各关节的控制器以后,gazebo中打开,零件飞起、散落;不加控制器时,不会飞落;应该是控制器相关参数设置导致的;
- - 由于采用的是effort_controllers/JointPositionController,涉及到力控
- - - 调节PID参数和各连杆转动惯量;
- - -  转动惯量放大1.0E-04 到 1.0E-05倍
- - - 给定目标关节角,看是否有超调现象,调节PID参数;

control 依赖于 robot_description;

#### 对灵巧手或其它具有较多相同模块的机器人,urdf文件生成
- 相同模块生成一次,接口部分统一;
- 注意:joint转动轴线 必须在 子连杆坐标轴上;
- 坐标系必须与连杆绑定;

<!-- 此标记中间模块,为结构上的共用模块,五个手指可共用相同的STL文件,但XML文件中,link和joint的名称不能相同,必须唯一-->

<link>.STL文件,是包含坐标系的3D图形文件
导出文件时,sw2urdf工具,将3维模型及指定的坐标系相关联,生成对应连杆的STL文件;

连杆的相对位置,由<joint>中的<origin>属性指定,xyzrpy设定了child连杆在parent连杆坐标系中的位姿;关节轴,是child连杆坐标系的某一坐标轴;

sw2urdf工具导出的urdf文件,往往会有错误,如:Rviz显示时,某些零件相对位置反了,这就是因为<joint>中的<origin>属性的rpy角度生成错误,需要手动修正;

#### 相关问题:
 <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find two_finger_module)/urdf/two_finger_module.urdf -urdf -model two_finger_module -z 0.2 -r 1" />
- 此处 -z 0.2  是将仿真模型放置于环境中(0,0,200mm)处; -r 还不知具体含义?

- 先启动display.launch再启动gazebo.launch,Rviz中RobotModel项就会有如下报错:
突然报错:Status erro
- No transform from [link0_left] to [base_link]
sudo apt-get install unicode  后,也会出现该情况;未解决?

[ WARN] [1572440451.309709717]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia.  As a workaround, you can add an extra dummy link to your URDF.
- - 注释掉URDF文件中 base_link的<inertia>...</inertia>属性部分;会报错,不行!
- - 以下是个解决方案:增加dummy link
- - 若root link 不是dummy link,则KDL计算动力学时,也会将该root link包括在内,整体会晃动、未固定!
<link name="dummy">//world
   </link>
<link name="base_link">
    <inertial>
      <origin xyz="0.15 0.15 .2" rpy="0 0 0"/>
      <mass value="10"/>
      <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>
    </inertial>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
                   <box size="0.01 0.01 0.01"/>
      </geometry>
    </visual>
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
      <box size="0.01 0.01 0.01"/>
      </geometry>
    </collision>
  </link>
  <joint name="dummy_joint" type="fixed">
     <parent link="dummy"/>
     <child link="base_link"/>
   </joint>

No transform from [thumb_l1] to [base_link]
# xacro的使用
- 使用宏定义,简化urdf文件,增加模块复用率;

[WARN]: Controller Spawner couldn't find the expected controller_manager ROS Interface
1.ros-kinetic-gazebo-ros-control未安装
解决方法:sudo apt-get install ros-kinetic-gazebo-ros-control
2.urdf文件, gazebo-ros-control 的 robotNamespace未配置正确

  <gazebo>
    <plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
    </plugin>
  </gazebo>
  改为:
  <gazebo>
    <plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
      <robotNamespace>/robot_hand_left</robotNamespace>
    </plugin>
  </gazebo>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值