ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化_Hi, Robotics-CSDN博客_urdf可视化
1 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
注意:上面的 catkin_make 可能用 catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3
2 在工作空间中创建功能包
cd ~/catkin_ws/src
catkin_create_pkg custom_urdf roscpp urdf tf rviz geometry_msgs
cd ..
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
检查soucre的结果:
printenv | grep ROS
3 向功能包添加机器人的urdf模型
roscd custom_urdf
mkdir rviz
mkdir launch
mkdir urdf && cd urdf
gedit four_wheels_car.urdf
向four_wheels_car.urdf
文件添加如下的内容:
*下面的资料综合看,能比较全面入门urdf模型的rviz可视化
检查urdf文件的合适性。
check_urdf four_wheels_car.urdf
显示urdf的数据
urdf_to_graphiz
four_wheels_car.urdfevince four_wheels_car.pdf
4 编写launch启动文件
roscd custom_urdf/launch
gedit view_car.launch
黏贴代码:
<launch>
<arg name = "model"/>
<param name = "robot_description" textfile = "$(find custom_urdf)/urdf/four_wheels_car.urdf"/>
<param name = "use_gui" value = "true"/>
<node name = "joint_state_publisher"
pkg = "joint_state_publisher"
type = "joint_state_publisher"/>
<node name = "robot_state_publisher"
pkg = "robot_state_publisher"
type = "state_publisher"/>
<node name = "rviz"
pkg = "rviz"
type = "rviz"
args = "-d $(find custom_urdf)/rviz/urdf.rviz"
required = "true"/>
</launch>
注意:节点rviz中的args参数加载功能包的 rviz 目录下的 .rviz 配置文件,因为一开始我们并没有配置rviz任何选项,所以该配置文件并不存在,只有当我们通过launch文件打开了rviz,通过配置rviz然后保存配置文件到功能包的rviz目录下,并将配置文件另存为urdf.rviz文件,当我们再次启动rviz节点的时候,rviz就会自动加载配置文件,我们就不需要手动设置了.
5 启动节点,通过rviz查看机器人模型
roslaunch custom_urdf view_demo_xacro.launch
已经显示出结果。
包存放路径:
6 向功能包添加机器人的xacro文件
pan_tilt.xacro
<?xml version="1.0" ?>
<robot name="pan_tilt" xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:property name = "base_link_length" value = "0.01"/>
<xacro:property name = "base_link_radius" value = "0.2"/>
<xacro:property name = "pan_link_length" value = "0.4"/>
<xacro:property name = "pan_link_radius" value = "0.04"/>
<xacro:property name = "tilt_link_length" value = "0.4"/>
<xacro:property name = "tilt_link_radius" value = "0.04"/>
<xacro:macro name = "inertial_matrix" params = "mass">
<inertial>
<mass value = "${mass}"/>
<inertia ixx = "0.5" ixy = "0.0" ixz = "0.0"
iyy = "0.5" iyz = "0.0"
izz = "0.5"/>
</inertial>
</xacro:macro>
<link name = "base_link">
<visual>
<geometry>
<cylinder length = "${base_link_length}" radius = "${base_link_radius}"/>
</geometry>
<origin xyz = "0 0 0" rpy = "0 0 0"/>
<material name = "yellow">
<color rgba = "1 1 0 1"/>
</material>
</visual>
<collision>
<geometry>
<cylinder length="${base_link_length+0.02}" radius="0.2"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0"/>
</collision>
<xacro:inertial_matrix mass="1"/>
</link>
<joint name="pan_joint" type="revolute">
<parent link="base_link"/>
<child link="pan_link"/>
<origin xyz="0 0 0.1"/>
<axis xyz="0 0 1" />
<limit effort="300" velocity="0.1" lower="-3.14" upper="3.14"/>
<dynamics damping="50" friction="1"/>
</joint>
<link name="pan_link">
<visual>
<geometry>
<cylinder length="${pan_link_length}" radius="${pan_link_radius}"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.09"/>
<material name="red">
<color rgba="0 0 1 1"/>
</material>
</visual>
<collision>
<geometry>
<cylinder length="${pan_link_length}" radius="${pan_link_radius+0.02}"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.09"/>
</collision>
<xacro:inertial_matrix mass="1"/>
</link>
<joint name="tilt_joint" type="revolute">
<parent link="pan_link"/>
<child link="tilt_link"/>
<origin xyz="0 0 0.2"/>
<axis xyz="0 1 0" />
<limit effort="300" velocity="0.1" lower="-4.64" upper="-1.5"/>
<dynamics damping="50" friction="1"/>
</joint>
<link name="tilt_link">
<visual>
<geometry>
<cylinder length="${tilt_link_length}" radius="${tilt_link_radius}"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0 0 0"/>
<material name="green">
<color rgba="1 0 0 1"/>
</material>
</visual>
<collision>
<geometry>
<cylinder length="${tilt_link_length}" radius="${tilt_link_radius+0.2}"/>
</geometry>
<origin rpy="0 1.5 0" xyz="0 0 0"/>
</collision>
<xacro:inertial_matrix mass="1"/>
</link>
</robot>
view_demo_xacro.launch
<launch>
<arg name="model"/>
<param name="robot_description"
command="$(find xacro)/xacro --inorder $(find custom_urdf)/urdf/pan_tilt.xacro"/>
<param name="use_gui" value="true"/>
<node name="joint_state_publisher"
pkg="joint_state_publisher"
type="joint_state_publisher"/>
<node name="robot_state_publisher"
pkg="robot_state_publisher"
type="state_publisher"/>
<node name="rviz"
pkg="rviz"
type="rviz"
args="-d $(find custom_urdf)/urdf.rviz"
required="true" />
</launch>
在rviz中查看机器人模型
roslaunch custom_urdf view_demo_xacro.launch
我们可以把 view_demo_xacro.launch 文件中的如下内容:
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find custom_urdf)/urdf/pan_tilt.xacro"/>
换成:
<param name="robot_description" command="$(find xacro)/xacro $(arg model)"/>
这样我们可以通过传入参数来加载机器人模型:
roscd custom_urdf
roslaunch custom_urdf view_demo_xacro.launch model:=urdf/pan_tilt.xacro
完成了机器人简单的urdf和xacro文件的编写
Enjoy It!
参考文献:
【1】https://blog.csdn.net/l1216766050/article/details/79586425#commentBox
【2】ROS学习之路08:创建机器人的urdf(xacro)模型并通过rviz可视化【*下面的资料综合看,能比较全面入门urdf模型的rviz可视化】
【3】ros模型建立——urdf 【下面这篇有报错的解决方法】
【4】urdf文件在rviz中显示的launch文件配置【这篇文章有launch文件的详细解释】
【5】https://zhuanlan.zhihu.com/p/67741739
【6】将xacro格式文件转换为urdf格式并检查格式是否正确常用方式 - 木鸡 - 博客园
【7】康娜喵的博客_CSDN博客