ROS中新建机器人模型(.xacro)并用rviz显示
来源:互联网 发布:武警军用品淘宝店铺 编辑:程序博客网 时间:2024/05/17 21:49
在很多情况下,ROS对urdf文件的支持并不是很好,使用宏定义的.xacro文件兼容性更好,扩展性也更好。而且urdf文件的语法比较复杂,代码太多。用.xacro文件表示模型更加简洁。
ROS中新建机器人模型(.xacro)并用rviz显示
步骤:
(1)新建包
(2)在包中新建并编辑.xacro文件
(3)在包中新建并编辑.launch文件
(4)使用rviz显示模型
1.新建包并配置全局变量
1)cd到~/dev/workspace/目录,使用命令创建包工作区roscreate-pkg myrobot urdf xacro
2)将包的工作区赋值给ROS-_PACKAGE_PATH变量
vim /root/.bashrc
在文件末尾加入
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/dev/workspace/myrobot
source /root/.bashrc
注意,环境变量很重要,一定要加入进去,否则包不能运行
2新建并编辑.xacro文件如下
新建文件夹mkdir urdf
在urdf文件夹下新建文件robot1_base.xacro
内容如下:
<?xml version="1.0"?><robot xmlns:xacro="http://www.ros.org/wiki/xacro" xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor" xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller" xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface" name="robot0"> <xacro:property name="length_wheel" value="0.05" /> <xacro:property name="radius_wheel" value="0.05" /> <xacro:macro name="default_inertial" params="mass"> <inertial> <mass value="${mass}" /> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" /> </inertial> </xacro:macro> <link name="base_footprint"> <visual> <geometry> <box size="0.001 0.001 0.001"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </visual> <xacro:default_inertial mass="0.0001"/> </link> <gazebo reference="base_footprint"> <material>Gazebo/Green</material> <turnGravityOff>false</turnGravityOff> </gazebo> <joint name="base_footprint_joint" type="fixed"> <origin xyz="0 0 0" /> <parent link="base_footprint" /> <child link="base_link" /> </joint> <link name="base_link"> <visual> <geometry> <box size="0.2 .3 .1"/> </geometry> <origin rpy="0 0 1.54" xyz="0 0 0.05"/> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> <collision> <geometry> <box size="0.2 .3 0.1"/> </geometry> </collision> <xacro:default_inertial mass="10"/> </link> <link name="wheel_1"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <xacro:default_inertial mass="1"/> </link> <link name="wheel_2"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <xacro:default_inertial mass="1"/> </link> <link name="wheel_3"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <xacro:default_inertial mass="1"/> </link> <link name="wheel_4"> <visual> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> <!-- <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/> --> <origin rpy="0 0 0" xyz="0 0 0" /> <material name="black"/> </visual> <collision> <geometry> <cylinder length="${length_wheel}" radius="${radius_wheel}"/> </geometry> </collision> <xacro:default_inertial mass="1"/> </link> <joint name="base_to_wheel1" type="continuous"> <parent link="base_link"/> <child link="wheel_1"/> <origin rpy="1.5707 0 0" xyz="0.1 0.15 0"/> <axis xyz="0 0 1" /> </joint> <joint name="base_to_wheel2" type="continuous"> <axis xyz="0 0 1" /> <anchor xyz="0 0 0" /> <limit effort="100" velocity="100" /> <parent link="base_link"/> <child link="wheel_2"/> <origin rpy="1.5707 0 0" xyz="-0.1 0.15 0"/></joint> <joint name="base_to_wheel3" type="continuous"> <parent link="base_link"/> <axis xyz="0 0 1" /> <child link="wheel_3"/> <origin rpy="1.5707 0 0" xyz="0.1 -0.15 0"/> </joint> <joint name="base_to_wheel4" type="continuous"> <parent link="base_link"/> <axis xyz="0 0 1" /> <child link="wheel_4"/> <origin rpy="1.5707 0 0" xyz="-0.1 -0.15 0"/> </joint></robot>
3.新建并编辑.launch脚本文件
a)在工程文件夹下新建文件夹mkdir launch
b)新建文件display_xacro.launch并编辑如下
<launch> <arg name="model" /> <arg name="gui" default="False" /> <param name="robot_description" command="$(find xacro)/xacro.py $(find myrobot)/urdf/robot1_base.xacro" /> <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 urdf_tutorial)/urdf.rviz" /></launch>
注意这行代码:
.launch文件是个脚本文件,这行代码robot_description表示机器人模型描述,command表示参数,
find xacro表示寻找包,
4.使用rviz显示模型
控制台输入命令
roslaunch myrobot display_xacro.launch gui:=true
可以显示模型。
0 0
- ROS中新建机器人模型(.xacro)并用rviz显示
- (一)ROS中新建机器人模型(urdf格式)并用rviz显示
- ROS中新建多轴机器人模型(urdf)并用rviz显示
- ROS中rviz添加urdf文件显示机器人模型
- ROS:机器人描述(URDF、XACRO)
- ROS环境下机器人建模(XACRO)及常见问题解决
- ROS 连接SICK LMS100激光,并用RVIZ显示(网线端口)
- <ROS> 机器人描述--URDF和XACRO
- 运动机器人在rviz中同步显示
- ROS RVIZ小车模型
- ROS下利用 moveit 控制gazebo模型并在rviz中显示的探索总结
- ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用
- ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之二 joint 使用
- ROS 学习系列 -- 使用urdf创建机器人模型在Rviz中3D观察 之一 link使用
- (九)ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)
- (十)ROS在rviz中显示空间中的直线(visualization_msgs/Marker 消息)
- (七)ROS使用OpenCV读取图像并发布图像消息在rviz中显示
- (八)ROS创建点云数据并在rviz中显示
- 4Dresult 100% Welcome Bonus Up to MYR888!
- 横竖屏切换
- Google Protocol Buffer 的使用和原理
- OVS 源码分析
- Java-记事本程序、文件选择对话框(JFileChooser)
- ROS中新建机器人模型(.xacro)并用rviz显示
- maven的pom报plugins错误的解决方法.
- 50个PHP程序性能优化的方法
- html5中code,bdo,上标与下标文本标签,转义符
- ArrayList动态数组
- Linux之文件三个时间属性
- 深入分析HTTP与HTTPS
- Java多线程(九)之ReentrantLock与Condition
- Bootstrap 模态对话框