ROS 机械臂+夹爪+gazebo+rviz配置
最近想学习一下机械臂视觉抓取功能,于是重温了一下ROS moveit+gazebo的配置,同时学习如何在moveit中加入夹爪
编写urdf文件
这里直接使用universal_robot了,可以在此处下载GitHub - ros-industrial/universal_robot: ROS-Industrial Universal Robots support (https://wiki.ros.org/universal_robot)
这里是为了练习,同时在原有模型上加入夹爪,通过rosrun xacro xacro xxx.xacro > xxx.urdf
可以导出urdf文件,之后改成xacro文件。
<?xml version="1.0" ?>
<robot name="***" xmlns:xacro="http://wiki.ros.org/xacro">
...
</robot>
这种格式就可以。
夹爪使用的是古月居中提供的一个简单的夹爪(太复杂的感觉容易出问题)。直接从【古月居】ROS机械臂开发中提供的网盘链接下载即可
之后加入到我们自己的机械臂模型中
<robot name="ur10e_gripper" xmlns:xacro="http://wiki.ros.org/xacro">
<xacro:include filename="$(find ur_description)/urdf/ur10e.urdf.xacro"/>
<xacro:include filename="$(find ur_description)/urdf/gripper.xacro"/>
<xacro:include filename="$(find ur_description)/urdf/materials.urdf.xacro" />
<xacro:property name="M_PI" value="3.14159"/>
<xacro:gripper parent="tool0" color="Green" xyz="0 0 0" rpy="0 ${-M_PI/2} 0 "/>
<!-- Transmissions for ROS Control -->
<xacro:macro name="transmission_block" params="joint_name">
<transmission name="tran1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${joint_name}">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="motor1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:transmission_block joint_name="gripper_finger_joint"/>
<link name="world" />
<joint name="world_joint" type="fixed">
<parent link="world" />
<child link = "base_link" />
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</joint>
</robot>
可以通过check_urdf urdf或者urdf_to_graphiz工具进行验证
######################
check_urdf urdf文件
########################
urdf_to_graphiz urdf文件
ros moveit配置
事先要先source一下
运行
roslaunch moveit_setup_assistant setup_assistant.launch
create new moveit,,当然,如果之前就配置过的话选择第二个,导入模型即可
planning groups这个比较重要,后面很多操作都是对这个Group来进行的,【命名、求解器……】
这个是机械臂本体arm的
这个是夹爪gripper的
这个是整体的
这里的话可以选择一个位置,比如我这里定义了一个Home
end effectors设置机器人末端的,加入夹爪的话也需要配置一下
控制器,这里选择position_controller/jointtrajectorycontroller这一个
其他的配置没什么需要注意得了,需要再工作空间新建一个文件夹用于存放生成的文件
之后生成即可
与rviz+gazebo联调
首先先测试一下rviz
运行demo.launch文件
接着测试gazebo+rviz
发现存在问题,rviz不显示【这个问题很多种】
修改配置文件
修改1 gazebo插件位置修改
在config文件中的Urdf最后加入此句话,这句话在urdf文件中本来有,但是位置错误,需要修改
<gazebo>
<plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
<robotNamespace>/</robotNamespace>
<legacyModeNS>true</legacyModeNS>
<robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
</plugin>
</gazebo>
修改2 demo.lauch文件修改
<!-- Choose controller manager: fake, simple, or ros_control -->
<!-- 由fake修改为ros_control -->
<arg name="moveit_controller_manager" default="ros_control" />
<!-- Set execution mode for fake execution controllers -->
<!-- 注释掉 -->
<!-- <arg name="fake_execution_type" default="interpolate" /> -->
<!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
<include file="$(dirname)/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="moveit_controller_manager" value="$(arg moveit_controller_manager)" />
<!-- 注释掉 -->
<!-- <arg name="fake_execution_type" value="$(arg fake_execution_type)"/> -->
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/>
<arg name="pipeline" value="$(arg pipeline)"/>
<arg name="load_robot_description" value="$(arg load_robot_description)"/>
</include>
具体位置就在demo.launch文件中,修改即可,
【如果问题没解决】修改3:修改gazebo.launch文件
注意这里面使用的urdf文件是否是config文件中的urdf文件!!!
【如果问题没解决】修改4 还有可能是gazebo环境重力设置
可以设置gazebo重力设置,在world文件中,减小重力设置,在gazebo.launch文件中,加入自己设置的环境
之后在运行demo_gazebo即可正常运行了