赞
踩
本文主要记录踩过的坑
环境:ubuntu18、ROS Melodic
rosrun moveit_setup_assistant moveit_setup_assistant
moveit配置助手启动后,右下角图片位置显示为2.0版本。与网上的教程版本有些不同的地方。
这里我选择新建方式,加载了手写的xcaro文件。
在Planning Group 标签页,相比其他教程的图片少了Kin.Solver Attempts的选项。我这里给机械臂的规划组取名为arm_pg。OMPL Planning 选择 RRT。
这两个标签页都选择了自动生成。
ROS Control 根据Planning Groups 中的arm_pg规划组,自动生成了arm_pg_controller。
配置助手导入的xacro文件中,并未设置Transmissions和gazebo的gazebo_ros_controller元素。源xacro文件中只设置了颜色元素。如下:
<gazebo reference="base_link">
<material>Gazebo/White</material>
</gazebo>
Simulation标签页中,点击自动生成,可生成带有transmission标签和gazebo_ros_control的文件,以满足gazebo仿真需要。后续进行gazebo仿真时,可以用生成的文件替换原文件。
<transmission name="trans_lj6_joint">
<type>transmission_interface/SimpleTransmission</type>
<joint name="lj6_joint">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="lj6_joint_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/</robotNamespace>
</plugin>
</gazebo>
自动生成的文件中,硬件接口中为EffortJointInterface,类型不匹配(命令行输出报错,且gazebo中机械臂受重力影响,耷拉着。),手动替换为PositionJointInterface。如下:
<transmission name="trans_lj6_joint">
<type>transmission_interface/SimpleTransmission</type>
<joint name="lj6_joint">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="lj6_joint_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
在Configuration Files标签页,选择合适的文件夹,生成配置文件。这里以文件夹my_s6_config为例,将生成的配置文件保存在该文件夹中。
保存成功后退出配置助手,运行以下命令,在可视化工具rviz中用moveit进行规划。
roslaunch my_s6_config demo.launch
步骤主要参照这篇文章《协作臂学习(6)-五步搞定:基于Moveit_config配置gazebo仿真》
协作臂学习(6)-五步搞定:基于Moveit_config配置gazebo仿真_酷比程序的博客-CSDN博客
路径:my_s6_config/config/ros_controllers.yaml
添加如下内容,其中arm_pg_controller对应之前movite配置时,ROS Control中根据规划组arm_pg自动生成的名字 arm_pg_controller。
各关节对应urdf文件中的关节名称。
arm_pg_controller: type: position_controllers/JointTrajectoryController joints: - lj1_joint - lj2_joint - lj3_joint - lj4_joint - lj5_joint - lj6_joint gazebo_ros_control/pid_gains: # gains: lj1_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0} lj2_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0} lj3_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0} lj4_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0} lj5_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0} lj6_joint: {p: 100.0, i: 1.0, d: 10.0, i_clamp_min: -1.0, i_clamp_max: 1.0}
文件路径:my_s6_config/launch/robot_name_moveit_controller_manager.launch.xml
添加一行
<launch>
<!-- loads moveit_controller_manager on the parameter server which is taken as argument
if no argument is passed, moveit_simple_controller_manager will be set -->
<arg name="moveit_controller_manager" default="moveit_simple_controller_manager/MoveItSimpleControllerManager" />
<param name="moveit_controller_manager" value="$(arg moveit_controller_manager)"/>
<arg name="execution_type"/>
<!-- loads ros_controllers to the param server -->
<rosparam file="$(find my_s6_config)/config/ros_controllers.yaml"/>
</launch>
文件路径:my_s6_config/launch/demo.launch
把fake_execution改为false,对rviz来说gazebo也是算是真机。真机模式rviz会尝试连接机器人控制器。
<!-- Run the main MoveIt! executable without trajectory execution (we do not have controllers configured by default) -->
<include file="$(find my_s6_config)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="fake_execution" value="false"/>
<arg name="execution_type" value="$(arg 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>
文件路径:my_s6_config/launch/ros_controllers.launch
将ROS Control中根据规划组arm_pg自动生成的名字 arm_pg_controller,填入args中,对应ros_controllers.yaml中的arm_pg_controller。
<launch>
<!-- Load joint controller configurations from YAML file to parameter server -->
<rosparam file="$(find my_s6_config)/config/ros_controllers.yaml" command="load"/>
<!-- Load the controllers -->
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" args="arm_pg_controller"/>
</launch>
在moveit配置助手中的Simulation标签页中,可自动生成用gazebo仿真的urdf,这里我们用来替换掉原urdf文件中的内容。
如1.2所提到的,可能需要修改中的内容。
执行如下命令
roslaunch my_s6_config demo_gazebo.launch
在rviz中用moveit规划路径并执行后,就能在gazebo中看到执行结果了。
这里运动后,重心不稳,倒了。。。。
执行以下命令后,可以看到有follow_joint_trajectory。
rostopic list
如果是在虚拟机中启动gazebo出现黑屏的状况,需关闭虚拟机的3D加速。关闭3D加速后,gazebo就能正常显示场景了(好卡。),如果是gazebo缺失model文件,就需要下载相关model文件了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。