ROS URDF(二): 控制URDF機械臂模型運動:解決URDF模型不隨joint_states運動問題
阿新 • • 發佈:2018-12-08
繼上篇文章ROS: URDF自定義robot model -----解決WARN:No tf data. Actual error: Fixed Frame [base_link] does not exist,繼續研究URDF,利用joint_state_publisher 控制URDF機械臂模型運動。
建模參考:https://blog.csdn.net/wxflamy/article/details/79235493
1 建立urdf檔案模型 myfirstrobot.urdf
<?xml version="1.0"?> <robot name="myfirstrobot"> <material name="blue"> <color rgba="0 0 0.8 0.6"/> </material> <material name="white"> <color rgba="1 1 1 0.6"/> </material> <material name="orange"> <color rgba="1 0.4 0.1 0.6"/> </material> <!-- Base Link --> <link name="base_link"> <visual> <geometry> <box size="0.1 0.1 2"/> </geometry> <origin rpy="0 0 0" xyz="0 0 1"/> <material name="blue"/> </visual> <collision> <geometry> <cylinder length="2" radius="0.2"/> </geometry> <origin rpy="0 0 0" xyz="0 0 1"/> </collision> <inertial> <origin xyz="0 0 1" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="0.3342" ixy="0.0" ixz="0.0" iyy="0.3342" iyz="0.0" izz="0.0017"/> </inertial> </link> <joint name="joint1" type="continuous"> <parent link="base_link"/> <child link="middle_link"/> <origin rpy="0 0 0" xyz="0 0 2"/> <axis xyz="0 1 0"/> </joint> <link name="middle_link"> <visual> <geometry> <box size="0.1 0.1 1"/> </geometry> <origin rpy="0 1.57075 0" xyz="0.5 0 0"/> <material name="white"/> </visual> <collision> <geometry> <cylinder length="1" radius="0.2"/> </geometry> <origin rpy="0 1.57075 0" xyz="0.5 0 0"/> </collision> <inertial> <origin xyz="0.5 0 0" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="0.0017" ixy="0.0" ixz="0.0" iyy="0.085" iyz="0.0" izz="0.085"/> </inertial> </link> <joint name="joint2" type="continuous"> <parent link="middle_link"/> <child link="top_link"/> <origin rpy="0 0 0" xyz="1 0 0"/> <axis xyz="0 1 0"/> </joint> <link name="top_link"> <visual> <geometry> <box size="0.1 0.1 1"/> </geometry> <origin rpy="0 1.57075 0" xyz="0.5 0 0"/> <material name="orange"/> </visual> <collision> <geometry> <cylinder length="1" radius="0.2"/> </geometry> <origin rpy="0 1.57075 0" xyz="0.5 0 0"/> </collision> <inertial> <origin xyz="0.5 0 0" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="0.0017" ixy="0.0" ixz="0.0" iyy="0.085" iyz="0.0" izz="0.085"/> </inertial> </link> <joint name="end" type="revolute"> <axis xyz="1 0 0"/> <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/> <parent link="top_link"/> <child link="end_link"/> <origin rpy="0 0 0" xyz="1 0 0"/> </joint> <link name="end_link"> <visual> <geometry> <sphere radius="0.1"/> </geometry> <material name="white"/> </visual> <collision> <geometry> <sphere radius="0.15"/> </geometry> </collision> <inertial> <origin xyz="0 0 0" rpy="0 0 0"/> <mass value="1"/> <inertia ixx="0.0017" ixy="0.0" ixz="0.0" iyy="0.0017" iyz="0.0" izz="0.0017"/> </inertial> </link> </robot>
2 建立launch啟動檔案diaplay.launch
<launch> <param name="robot_description" textfile="$(find myurdf)/urdf/myfirstrobot.urdf"/> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <param name="use_gui" value="TRUE"/> </node> <node name="rviz" pkg="rviz" type="rviz" respawn="false" output="screen"/> </launch>
3 啟動launch檔案
roslaunch myurdf display.launch
顯示如下結果:
通過Joint State Publisher控制關節運動,如下
如上圖,URDF模型並沒有隨著Joint State Publisher控制運動,變化的僅是tf frame.
經研究,發現該問題源於Rviz配置檔案,當前啟動的是rviz的預設配置,使用如下配置,可以實現URDF的隨動,
4 建立urdf.rviz
Panels: - Class: rviz/Displays Help Height: 78 Name: Displays Property Tree Widget: Expanded: - /Global Options1 - /Status1 Splitter Ratio: 0.5 Tree Height: 565 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties Expanded: - /2D Pose Estimate1 - /2D Nav Goal1 - /Publish Point1 Name: Tool Properties Splitter Ratio: 0.588679 - Class: rviz/Views Expanded: - /Current View1 Name: Views Splitter Ratio: 0.5 - Class: rviz/Time Experimental: false Name: Time SyncMode: 0 SyncSource: "" Visualization Manager: Class: "" Displays: - Alpha: 0.5 Cell Size: 1 Class: rviz/Grid Color: 160; 160; 164 Enabled: true Line Style: Line Width: 0.03 Value: Lines Name: Grid Normal Cell Count: 0 Offset: X: 0 Y: 0 Z: 0 Plane: XY Plane Cell Count: 10 Reference Frame: <Fixed Frame> Value: true - Alpha: 1 Class: rviz/RobotModel Collision Enabled: false Enabled: true Links: {} Name: RobotModel Robot Description: robot_description TF Prefix: "" Update Interval: 0 Value: true Visual Enabled: true - Class: rviz/TF Enabled: true Frame Timeout: 15 Frames: All Enabled: true Marker Scale: 1 Name: TF Show Arrows: true Show Axes: true Show Names: true Tree: {} Update Interval: 0 Value: true Enabled: true Global Options: Background Color: 48; 48; 48 Fixed Frame: /base_link Name: root Tools: - Class: rviz/Interact Hide Inactive Objects: true - Class: rviz/MoveCamera - Class: rviz/Select - Class: rviz/FocusCamera - Class: rviz/Measure - Class: rviz/SetInitialPose Topic: /initialpose - Class: rviz/SetGoal Topic: /move_base_simple/goal - Class: rviz/PublishPoint Single click: true Topic: /clicked_point Value: true Views: Current: Class: rviz/Orbit Distance: 10 Focal Point: X: 0 Y: 0 Z: 0 Name: Current View Near Clip Distance: 0.01 Pitch: 0.465398 Target Frame: <Fixed Frame> Value: Orbit (rviz) Yaw: 0.885398 Saved: ~ Window Geometry: Displays: collapsed: false Height: 882 Hide Left Dock: false Hide Right Dock: false QMainWindow State: 000000ff00000000fd00000004000000000000013c000002c4fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006400fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000028000002c4000000dd00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002c4fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000028000002c4000000b000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000002f600fffffffb0000000800540069006d0065010000000000000450000000000000000000000259000002c400000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 Selection: collapsed: false Time: collapsed: false Tool Properties: collapsed: false Views: collapsed: false Width: 1216 X: 53 Y: 60
5 更新launch檔案
<launch>
<param name="robot_description"
textfile="$(find myurdf)/urdf/myfirstrobot.urdf"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>
<node
name="joint_state_publisher"
pkg="joint_state_publisher"
type="joint_state_publisher"> <param name="use_gui" value="TRUE"/>
</node>
<node name="rviz" pkg="rviz" type="rviz" respawn="false" output="screen" args="-d $(find myurdf)/urdf.rviz"/>
</launch>
6 啟動launch檔案
roslaunch myurdf display.launch
如上,URDF模型隨Joint State Publisher控制運動,且tf一起變換。