纲要
ROS的控制插件
常用控制器
完善机器人模型
为link添加惯性参数和碰撞属性
为joint添加传动装置
添加gazebo控制插件
加载机器人模型
启动仿真环境
问题:gazebo加载的模型只有一层阴影
- 解决方案:关闭虚拟机,设置虚拟机属性,显示器:关闭3D图形加速
- 给虚拟机开启图形化加速: echo “export SVGA_VGPU10=0” >> ~/.bashrc
目录架构
gazebo.launch
<launch>
<arg name ="debug" default="false" />
<arg name ="gui" default="true" />
<arg name ="paused" default="false" />
<arg name ="use_sim_time" default="true" />
<arg name ="headless" default="false" />
<include file="$(find gazebo_ros)/launch/empty_world.launch" >
<arg name ="debug" value="$(arg debug)" />
<arg name ="gui" value="$(arg gui)" />
<arg name ="paused" value="$(arg paused)" />
<arg name ="use_sim_time" value="$(arg use_sim_time)" />
<arg name ="headless" value="$(arg headless)" />
</include>
<node
name="tf_footprint_base"
pkg="tf"
type="static_transform_publisher"
args="0 0 0 0 0 0 base_link base_footprint 40" />
<node
name="fake_joint_calibration"
pkg="rostopic"
type="rostopic"
args="pub /calibrated std_msgs/Bool true" />
<!-- Load the URDF into the ROS Parameter Server -->
<param
name="robot_description"
command="$(find xacro)/xacro --inorder '$(find ur3)/urdf/ur3.xacro'" />
<!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
<node
name="urdf_spawner"
pkg="gazebo_ros"
type="spawn_model"
respawn="false"
output="screen"
args=" -urdf -model ur3 -param robot_description" />
</launch>
ur3.xacro
<?xml version="1.0" encoding="utf-8"?>
<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com)
Commit Version: 1.6.0-4-g7f85cfe Build Version: 1.6.7995.38578
For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot
name="ur3" xmlns:xacro="http://ros.org/wiki/xacro" >
<!-- Transmissions for ros_control -->
<xacro:macro name="transmission_block" params="joint_name">
<transmission name="trans1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${joint_name}">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="motor1">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:transmission_block joint_name="joint1"/>
<xacro:transmission_block joint_name="joint2"/>
<xacro:transmission_block joint_name="joint3"/>
<xacro:transmission_block joint_name="joint4"/>
<xacro:transmission_block joint_name="joint5"/>
<xacro:transmission_block joint_name="joint6"/>
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/probot_anno</robotNamespace>
<robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
<legacyModeNS>true</legacyModeNS>
</plugin>
</gazebo>
<link
name="base_link">
<inertial>
<origin
xyz="2.105E-05 0.098059 -0.0036545"
rpy="0 0 0" />
<mass
value="1.371" />
<inertia
ixx="0.0018288"
ixy="4.4582E-07"
ixz="-2.0556E-07"
iyy="0.0019082"
iyz="0.00013405"
izz="0.0017646" />
</inertial>
<visual>
<origin
xyz="0 0 25"
rpy="20 10 10" />
<geometry>
<mesh
filename="package://ur3/meshes/base_link.STL" />
</geometry>
<material
name="">
<color
rgba="0.89804 0.91765 0.92941 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/base_link.STL" />
</geometry>
</collision>
</link>
<link
name="link1">
<inertial>
<origin
xyz="-6.5885E-06 0.055927 0.0072937"
rpy="0 0 0" />
<mass
value="0.75521" />
<inertia
ixx="0.0010675"
ixy="-9.4953E-08"
ixz="1.0255E-07"
iyy="0.00090525"
iyz="-0.00013058"
izz="0.00099003" />
</inertial>
<visual>
<origin
xyz="0 0 3"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link1.STL" />
</geometry>
<material
name="">
<color
rgba="0.79216 0.81961 0.93333 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link1.STL" />
</geometry>
</collision>
</link>
<joint
name="joint1"
type="revolute">
<origin
xyz="0 0 0.0844"
rpy="1.5708 0 -3.1416" />
<parent
link="base_link" />
<child
link="link1" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
<link
name="link2">
<inertial>
<origin
xyz="-2.6778E-06 0.060634 0.09327"
rpy="0 0 0" />
<mass
value="1.6559" />
<inertia
ixx="0.0025822"
ixy="-8.909E-08"
ixz="1.019E-07"
iyy="0.002419"
iyz="-9.301E-05"
izz="0.0016021" />
</inertial>
<visual>
<origin
xyz="0 0 5"
rpy="0 10 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link2.STL" />
</geometry>
<material
name="">
<color
rgba="0.79216 0.81961 0.93333 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link2.STL" />
</geometry>
</collision>
</link>
<joint
name="joint2"
type="revolute">
<origin
xyz="0 0.0675 0.05235"
rpy="1.5708 0 -3.1416" />
<parent
link="link1" />
<child
link="link2" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
<link
name="link3">
<inertial>
<origin
xyz="-0.0050453 -0.11121 3.4154E-06"
rpy="0 0 0" />
<mass
value="0.96204" />
<inertia
ixx="0.0010146"
ixy="4.5981E-05"
ixz="6.2628E-08"
iyy="0.00054242"
iyz="-4.3697E-08"
izz="0.0010724" />
</inertial>
<visual>
<origin
xyz="0 16 10"
rpy="30 10 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link3.STL" />
</geometry>
<material
name="">
<color
rgba="1 10 13 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link3.STL" />
</geometry>
</collision>
</link>
<joint
name="joint3"
type="revolute">
<origin
xyz="0 -0.02535 0.24365"
rpy="-1.5708 0 -1.5708" />
<parent
link="link2" />
<child
link="link3" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
<link
name="link4">
<inertial>
<origin
xyz="0.0059208 -0.0007977 2.6694E-07"
rpy="0 0 0" />
<mass
value="0.32519" />
<inertia
ixx="0.00019459"
ixy="1.8337E-05"
ixz="1.3898E-10"
iyy="0.00019909"
iyz="1.2329E-09"
izz="0.00022621" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link4.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link4.STL" />
</geometry>
</collision>
</link>
<joint
name="joint4"
type="revolute">
<origin
xyz="-0.0834 -0.213 0"
rpy="-3.1416 0 0" />
<parent
link="link3" />
<child
link="link4" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
<link
name="link5">
<inertial>
<origin
xyz="0.0059208 0.00079771 -2.3761E-07"
rpy="0 0 0" />
<mass
value="0.32519" />
<inertia
ixx="0.00019459"
ixy="-1.8338E-05"
ixz="-2.0382E-10"
iyy="0.00019909"
iyz="1.211E-09"
izz="0.00022621" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link5.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link5.STL" />
</geometry>
</collision>
</link>
<joint
name="joint5"
type="revolute">
<origin
xyz="0 0.0834 0"
rpy="0 0 -1.5708" />
<parent
link="link4" />
<child
link="link5" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
<link
name="link6">
<inertial>
<origin
xyz="4.7334E-10 0.00010334 -0.021073"
rpy="0 0 0" />
<mass
value="0.11536" />
<inertia
ixx="4.2469E-05"
ixy="1.5688E-12"
ixz="1.7329E-12"
iyy="4.2681E-05"
iyz="1.0324E-07"
izz="5.9067E-05" />
</inertial>
<visual>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link6.STL" />
</geometry>
<material
name="">
<color
rgba="1 1 1 1" />
</material>
</visual>
<collision>
<origin
xyz="0 0 0"
rpy="0 0 0" />
<geometry>
<mesh
filename="package://ur3/meshes/link6.STL" />
</geometry>
</collision>
</link>
<joint
name="joint6"
type="revolute">
<origin
xyz="0 -0.0409 0"
rpy="1.5708 0.2207 3.1416" />
<parent
link="link5" />
<child
link="link6" />
<axis
xyz="1 0 0" />
<limit
lower="-3.14"
upper="3.14"
effort="100"
velocity="1" />
</joint>
</robot>
MoveIt + Gazebo 仿真
框架
Trajectory
在物理学中,“trajectory” 主要指:
射体在空中飞行的路径,例如子弹、导弹、行星或卫星的轨道。
运动物体在受力作用下的运动路径,比如抛体运动的曲线。
在数学领域,尤其是几何学中,“trajectory” 可以指:
一个点随时间变化而形成的曲线,这条曲线可以由一个或多个参数方程来描述。
在更广泛的科学和工程领域,“trajectory” 也可以用来描述:
任何系统或过程的发展路径,例如一个项目、职业生涯或经济趋势的历程。
在机器人学和自动化中,“trajectory” 指的是机器人或机械臂在执行任务时所遵循的预定路径。
在航空和航天工程中,它描述飞机或航天器的飞行路径。
在社会学和心理学中,“trajectory” 可能指的是一个人或群体在一段时间内的发展路径或变迁趋势。
总之,“trajectory” 是一个跨学科的概念,用于描述任何种类的动态路径或过程的发展方向。
Joint Trajectory Controller
Joint State Controller
Follow Joint Trajectory
顶层launch文件
数据示例
可视化显示各轴运动状态
小结
框架图
相关概念
fake_execution_type
在机器人技术和ROS(Robot Operating System)的上下文中,fake_execution_type 通常是指一种控制器的执行模式,这种模式不会向实际的硬件发送命令,而是模拟硬件的响应。这种类型的执行通常用于仿真环境,以便在不使用实际机器人的情况下测试和调试控制逻辑。
当使用fake_execution_type时,控制器的行为就像是在控制真实的硬件,但实际上它只是在内存中模拟硬件的状态变化。这意味着所有的关节运动、抓取动作或其他硬件操作都会被虚拟执行,而不影响现实世界中的机器人。
这种模式对于开发和验证控制算法非常有用,因为它允许工程师在安全的环境中进行测试,避免对昂贵的硬件造成潜在损害,同时还可以在物理机器人不可用时进行持续开发。