赞
踩
笔者运行工作环境
ubuntu16.04
ros-kinetic
工作空间arm_ws文件夹的src文件夹下创建功能包test_robot_xin,因为机器人显示都是在功能包下运行,不能只是建立在src下的文件夹运行。
在功能包文件目录下创建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>
在功能包的文件目录下创建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)" />
在launch文件夹下打开终端
roslaunch display_car.launch
打开rviz时没有模型显示出来的,需要手动添加模型,点击左下角的add,添加robotmodel,可以看到模型显示出来了。
此时看到rviz中的左侧,还提示报错状态,是因为还没有选择小车固定架的位置,选择左侧的fixed frame选项中,下拉菜单,选择whlee,此时小车不在报错了。
其基本思想为:
第一步:编写urdf文件(此文件可以时sw插件直接生成)
第二步:将模型文件 显示在rviz中
第三步:借助moveit_assistant生成description文件,利用moveit进行规划控制
首先一定在工作空间的功能包环境下完成这些工作。
其次需要创建的代码以及功能包的命名需要一致,不然容易出问题,这些需要自己感受才能体会出出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。