ROS下移动机械臂导航与Moveit!抓取仿真实现

ROS下移动机械臂导航与Moveit!抓取仿真实现海星吸盘
作者-杭州电⼦科技⼤学智能机器⼈实验室
ROS下移动机械臂导航与Moveit!抓取仿真实现
功能实现:将六⾃由度机械臂与移动底盘组合,然后实现在Gazebo⾥⾯导航与机械臂抓取动作
URDF模型链接:
评论有⼈询问模型⽂件,现将链接贴上:
pan.baidu/s/1Tg7IqzRFK2D87AwNLoHnEw
提取码:372f悬浮机器人
(⼀)URDF模型组合
第⼀步主要是将单独的移动底盘以及机械臂雷达等URDF模型进⾏组合,由于Gazebo具有⼀定的物理属性,再进⾏模型组合时不能直接将⼏个模型直接连贯起来,否则会出现底盘⽆法移动或者直接倾倒的现象,⽽是要根据各模型的惯性矩阵以及质量合理设置.这⾥参考师弟的修改模型,他将机械臂的惯性矩
阵inertial matrix以及质量mass进⾏修改,改成和移动底盘同⼀数量级的属性,结果可以运⾏,模型效果图如下(模型参考胡春旭教学资料):
其中,上⽅为机械臂,下⽅为移动底盘,底盘中间放置雷达.
终端会报No p gain specified for pid这种错,可以忽略.
(⼆)导航配置
参考胡春旭资料即可,这⾥不做过多赘述.
(三)机械臂配置
1.Moveit! assistant 配置参数
对上述组合的模型进⾏机械臂参数配置
rosrun moveit_setup_assistant moveit_setup_assistant
1.加载模型:
2.碰撞点配置:
3.规划组设置:
4.初始位姿:
5.末端执⾏:
6.多余关节设置:
这⾥要注意,因为移动底盘的左右轮是不纳⼊机械臂规划范围内的,所以要将这两个关节剔除.
其他设置保持默认即可,最后会⽣成⼀个config包.
运⾏⾥⾯的demo.launch⽂件,会出现机械臂仿真界⾯,可⾃⾏在⾥⾯进⾏简单的仿真操作,如下图所⽰.
roslaunch arm_with_mbot_moveit_config demo.launch
2.⽂件修改
第⼀步我们只是在rviz⾥⾯进⾏了简单的仿真,没有真实机械臂,我们可以使⽤gazebo进⾏仿真,ros为我们提供了action接⼝,因此我们需要打通moveit与gazebo之间的通信,具体⽅法如下:
(1)创建关节轨迹⽂件
moveit规划好轨迹之后会输出⼀个"FollowJointTrajectory"的action,⾥⾯包含轨迹点,需要将这些
信息转⼊gazebo中的joint位置,所以需要创建⼀个关节控制⽂件trajectory_control.yaml⽂件:
arm:
arm_joint_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- joint1
- joint2
- joint3
- joint4
- joint5
- joint6
gains:
joint1:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
joint2:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
joint3:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
joint4:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
joint5:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
joint6:  {p: 1000.0, i: 0.0, d: 0.1, i_clamp: 0.0}
gripper_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- finger_joint1
gains:
finger_joint1:  {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}
(2)创建关节轨迹加载⽂件
arm_trajectory_controller.launch:
<launch>
<rosparam file="$(find mbot_gazebo)/config/trajectory_control.yaml" command="load"/>
<node name="arm_controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" ns="/arm" args="arm_joint_controller gripper_controller"/>
</launch>
(3)创建controller_gazebo⽂件
在moveit配置好的config包下⾯中的创建controllers_gazebo.yaml⽂件:添加控制器命名空间,以保持gazebo中controller发布的action 与moveit那边对接.
controller_manager_ns: controller_manager
混纺纱
controller_list:
- name: arm/arm_joint_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- joint1
- joint2
- joint3
- joint4
-
joint5
- joint6
- name: arm/gripper_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- finger_joint1
- finger_joint2
(4)修改Moveit配置的config包⾥的launch⽂件
到Moveit配置的config包⾥⾯的launch包,然后⾥⾯有⼀个mrobot_moveit_controller_manager.laun防辐射口罩
搅拌摩擦焊接ch.xml⽂件:注意,这个⽂件名字引⼈⽽异,务必到与下⾯内容相符的⽂件,⽽且千万不要⾃⼰创建⼀个⽂件,否则没⽤:
将最后⼀⾏的yaml名字改成步骤(3)中的⽂件名.
<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)"/>
<!-- loads ros_controllers to the param server -->
宇山自动化<rosparam file="$(find arm_with_mbot_moveit_config)/config/controllers_gazebo.yaml"/>
</launch>
(5)创建关节状态控制⽂件
创建⼀个arm_gazebo_joint_states.yaml⽂件:
主要⽬的是发布机械臂关节状态和tf变换
arm:
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
创建⼀个arm_gazebo_states.launch⽂件:
<launch>
<rosparam file="$(find mbot_gazebo)/config/arm_gazebo_joint_states.yaml" command="load"/>
<node name="joint_controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" ns="/arm" args="joint_state_controller" />
</launch>
胡春旭这⾥还有个发布tf的命令,我这⾥并没有加是因为我的启动仿真环境⽂件⾥已经添加了,不需要重复发布.
(6)创建机械臂控制启动⽂件
创建⼀个arm_bringup_moveit.launch⽂件:
第⼀个启动是我的仿真环境
<!-- Launch Gazebo  -->
<include file="$(find mbot_gazebo)/launch/mbot_laser_nav_gazebo.launch" />
<!-- ros_control arm launch file -->
<include file="$(find mbot_gazebo)/launch/arm_gazebo_states.launch" />
<!-- ros_control trajectory control dof arm launch file -->
<include file="$(find mbot_gazebo)/launch/arm_trajectory_controller.launch" />
<!-- moveit launch file -->
<include file="$(find arm_with_mbot_moveit_config)/launch/moveit_planning_execution.launch" />
moveit_planning_execution.launch⽂件内容:
主要是⽤来启动move_group
<launch>
# The planning and execution components of MoveIt! configured to
# publish the current configuration of the robot (simulated or real)
# and the current state of the world as seen by the planner
<include file="$(find arm_with_mbot_moveit_config)/launch/move_group.launch">
<arg name="publish_monitored_planning_scene" value="true" />
</include>
# The visualization component of MoveIt!
<include file="$(find arm_with_mbot_moveit_config)/launch/moveit_rviz.launch"/>
<!-- We do not have a robot connected, so publish fake joint states -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">    <param name="/use_gui" value="false"/>
<rosparam param="/source_list">[/arm/joint_states]</rosparam>
</node>
</launch>
(四)仿真实现
依次启动下⾯⽂件:
source devel/setup.bash
roslaunch mbot_gazebo arm_bringup_moveit.launch
roslaunch mbot_navigation nav_cloister_demo.launch#导航启动
仿真图:
代码实现导航之后机械臂抓取操作:
创建⼀个move_test.py程序:

本文发布于:2024-09-22 07:31:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/249897.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:机械   模型   移动   底盘   关节   创建   导航   配置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议