gazebo中仿真模型搭建相關總結

具體過程可參考:
從零開始的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時,會報錯:“未將對象引用設置到對象的實例”;
- - 對於末端參考點,可建立一小物體,嵌入、固聯於末端連桿;

- 關節類型爲fixed,其軸線可以不指定,但關節名必須給定,否則previe and export時,會提示;


- 設置完所有link和joint,選擇導出,如果關節是旋轉關節,則需要設置限制參數;

- 默認生成的package.xml裏的email是不合法的,要改成合法的,如<maintainer email="[email protected]" />;
- display.launch文件裏的裏的False改爲True,否則無法打開Joint State Publish工具;

- 啓動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中打開,零件飛起、散落
- - 不加控制器時,不會飛落;應該是控制器相關參數設置導致的;
- - 由於採用的是effort_controllers/JointPositionController,涉及到力控
- - - 調節PID參數和各連桿轉動慣量;
- - -  轉動慣量放大1.0E-04 到 1.0E-05倍
- - - 給定目標關節角,看是否有超調現象,調節PID參數;


control 依賴於 robot_description;





# 檢查URDF語法:在urdf文件所在目錄打開終端: check_urdf two_finger_module.urdf 
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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章