ros-rviz中显示urdf模型-再回炉强化(1)
笔者运行工作环境
ubuntu16.04
ros-kinetic
1.在工作空间下创建功能包test_robot_xin
工作空间arm_ws文件夹的src文件夹下创建功能包test_robot_xin,因为机器人显示都是在功能包下运行,不能只是建立在src下的文件夹运行。
2.创建机器人的描述性文件urdf文件或者urdf.xacro文件
在功能包文件目录下创建urdf文件夹,里边存放机器人的描述性文件。
car_robot.urdf文件
<?xml version="1.0"?>
<robot name="robot1">
<link name="base_link">
<visual>
<geometry>
<box size="0.2 .3 .1"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.05"/>
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</visual>
</link>
<link name="wheel_1">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<link name="wheel_2">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>
<material name="black"/>
</visual>
</link>
<link name="wheel_3">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>
<material name="black"/>
</visual>
</link>
<link name="wheel_4">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>
<material name="black"/>
</visual>
</link>
<joint name="base_to_wheel1" type="fixed">
<parent link="base_link"/>
<child link="wheel_1"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel2" type="fixed">
<parent link="base_link"/>
<child link="wheel_2"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel3" type="fixed">
<parent link="base_link"/>
<child link="wheel_3"/>
<origin xyz="0 0 0"/>
</joint>
<joint name="base_to_wheel4" type="fixed">
<parent link="base_link"/>
<child link="wheel_4"/>
<origin xyz="0 0 0"/>
</joint>
</robot>
3.创建机器人的启动文件launch文件
在功能包的文件目录下创建launch文件夹,在launch文件夹下创建launch启动文件。
display_car.launch
<?xml version="1.0"?>
<launch>
<arg name="model" />
<arg name="gui" default="False" />
<param name="robot_description" textfile="$(find test_robot_xin)/urdf/car_robot.urdf" />
<param name="use_gui" value="$(arg gui)"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find test_robot_xin)/urdf.rviz" />
</launch>
注意,若是模型文件为urdf.xacro,需要将launch文件加一句代码,否则无法识别出xacro文件,或者将xacro通过命令rosrun xacro xacro.py mrobot.urdf.xacro > mrobot.urdf
转换为urdf文件。在gazebo中也是如此。
<arg name="limited" default="false" doc="If true, limits joint range [-PI, PI] on all joints." />
<arg name="transmission_hw_interface" default="hardware_interface/PositionJointInterface" />
<param unless="$(arg limited)" name="robot_description" command="$(find xacro)/xacro --inorder '$(find ur3)/urdf/ur3_robot.urdf.xacro' transmission_hw_interface:=$(arg transmission_hw_interface)" />
<param if="$(arg limited)" name="robot_description" command="$(find xacro)/xacro --inorder '$(find ur3)/urdf/ur3_joint_limited_robot.urdf.xacro' transmission_hw_interface:=$(arg transmission_hw_interface)" />
4.启动launch文件
在launch文件夹下打开终端
roslaunch display_car.launch
打开rviz时没有模型显示出来的,需要手动添加模型,点击左下角的add,添加robotmodel,可以看到模型显示出来了。
5.选择fixed frame选项
此时看到rviz中的左侧,还提示报错状态,是因为还没有选择小车固定架的位置,选择左侧的fixed frame选项中,下拉菜单,选择whlee,此时小车不在报错了。
6.在此基础上就可以进行moveit,生成description文件,然后可以进行运动控制了
其基本思想为:
第一步:编写urdf文件(此文件可以时sw插件直接生成)
第二步:将模型文件 显示在rviz中
第三步:借助moveit_assistant生成description文件,利用moveit进行规划控制
7.注意事项
首先一定在工作空间的功能包环境下完成这些工作。
其次需要创建的代码以及功能包的命名需要一致,不然容易出问题,这些需要自己感受才能体会出出来。
版权声明:本文为weixin_45839124原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。