开发机械臂,别的问题都好商量,但是对于实体机械臂这个烧钱的东西来说,绝对是一大批开发者的拦路虎。方法总比困难多。对于没有实体机械臂只能进行仿真的人来说,gazebo可真是太香了。但是浏览了一众网上的的教程,一步一步跟着走了无数遍,最终面临的问题是Rviz中的机械臂动但是Gazebo中的机械臂一动不动。
苦心钻研,终于,在moveit_setupassistant生成的文件基础上,完成了moveit+gazboe的联合仿真。具体操作流程为:
我的环境:
linux:Ununtu 18.04
Ros:melodic+moveit1+gazbeo 9.0
1、准备URDF文件
这里我用的是SW中导出的urdf模型,这里网上的教程很多,这里不赘述。
2、生成配置文件
保险起见,我把我的每一步配置都放着下面,其实网上很多教程都是 每位博主成功的历程,我们跟着一步一步操作,不能成功原因可能就是一些细节,但是这些细节真的很重要。
2.1 生成碰撞矩阵,这部分就是无脑操作 直接点击Generate collision matrix生成即可
2.2 添加虚拟关节,这部分的作用据说是防止机械臂在gazbeo中倾覆,但是我实验了一下吗,即使设置了也没有用,所以这步直接跳过
2.3 设定规划组
如果没有特殊要求,为了保证实现mvoeit+gazbeo 的联合仿真,大家就按照我的配置方式设置就行(别的方式我没试过,不知道能否成功)。
2.3 添加机械臂的位姿,这里可以在之后的控制中实现快速到达指定位置,我设置的是让各个关节都归零,位姿名称为home
2.3 End effectors Passie joints 这两步在当前的情境中没有用,所以直接跳过就行,直接配置ROS control
2.4 生成仿真文件,用这部分生成的urdf内容去替换我们原来的URDF文件,就是把生成的内容全部复制,将原来的机械臂urdf文件中的内容全部替换。
2.4 跳过3Dperception 填写作者信息后,直接导出配置文件。
3 修改配置文件
这一步是最重要的,都是细节问题,大家一定要细心,否则很容易失败
3.1 修改UREF文件
这部分修改的内容有两部分:在urdf文件开头添加如下内容,将机械臂和World固定起来,否则打开gazbeo的时候,机械臂会发生倾覆 触地的情况,
<link name="world" />
<joint name="fixed" type="fixed">
<parent link="world" />
<child link="base_link" />
</joint>
第二部分是检查一下urdf文件中的gazbeo标签
<!--关节的传动设置-->
<transmission name="trans_joint_1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="joint_1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="joint_1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
<!--gazbeo控制器插件设置-->
<gazebo>
<plugin name="ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/</robotNamespace>
</plugin>
</gazebo>
3.2 修改ros_controller.xml文件,文件在生成的配置文件中的config文件夹下
我修改后的文件如下:
# Simulation settings for using moveit_sim_controllers
moveit_sim_hw_interface:
joint_model_group: arm
joint_model_group_pose: home
# Settings for ros_control_boilerplate control loop
generic_hw_control_loop:
loop_hz: 300
cycle_time_error_threshold: 0.01
# Settings for ros_control hardware interface
hardware_interface:
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
sim_control_mode: 1 # 0: position, 1: velocity
# Publish all joint states
# Creates the /joint_states topic necessary in ROS
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
controller_list:
- name: arm_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
joint_1: {trajectory: 0.1, goal: 0.1}
joint_2 : {trajectory: 0.1, goal: 0.1}
joint_3: {trajectory: 0.1, goal: 0.1}
joint_4: {trajectory: 0.1, goal: 0.1}
joint_5: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 1
主要是在原本生成的文件最后添加了以下内容
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
joint_1: {trajectory: 0.1, goal: 0.1}
joint_2 : {trajectory: 0.1, goal: 0.1}
joint_3: {trajectory: 0.1, goal: 0.1}
joint_4: {trajectory: 0.1, goal: 0.1}
joint_5: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 1
3.3 修改gazbeo.launch 文件,这个文件在配哦之文件的launch文件中
<node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -x 0 -y 0 -z 0"
respawn="false" output="screen" />
将以上内容改为以下内容,目的是将机械臂在gazebo中抬高0.4米,避免机械臂触地请路况
<node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model" args="-urdf -param robot_description -model robot -x 0 -y 0 -z 0.4"
respawn="false" output="screen" />
3.4 修改ros_controller.launch 文件把 <!-- Load the controllers -->下加载控制器的方式改为以下内容,就是把我们在ros_controller.xml文件中配置的控制器在这里启动。
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" args="spawn joint_state_controller arm_controller"/>
到此,该修改的内容就都结束了,提醒大家注意一下容易出错的地方,在修改所有XML格式文件的过程中,一定要注意对齐格式,有时候一个空格就会造成启动文件失败,这都是我踩过的坑啊。
最后启动以下命令,同时启动gazbeo和mvoeit,.拖动rviz中的机械臂 plan and execute,惊喜来了,gazebo中的机械臂动起来了!!!!
roslaunch (robot_name)_moveit_config demo_gazbeo.launch
运行rqt_graph命令查看节点关系,没错gazebo确确实实通过arm_controller这个控制器和move_groupl建立起连接了!
大功告成。总结不容易,希望能帮大家少踩一些坑。文章来源:https://www.toymoban.com/news/detail-800469.html
如果帮到了你,麻烦关注收藏一下呗,我们一起搞技术,嘿嘿文章来源地址https://www.toymoban.com/news/detail-800469.html
到了这里,关于我终于实现Moveit+gazbeo对机械臂的联合仿真控制了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!