基于ROS+Moveit搭建机器人控制系统(仿真+实体)(一):修改moveit配置文件+搭建文件框架

基于ROS+Moveit搭建机器人控制系统(仿真+实体)

项目介绍: 该项目是本人参与开发的一个六自由度机械臂(目前仍在开发中),这个系列都是关于该机械臂ROS部分的控制框架搭建,轨迹解算,下位机通信,外设控制(遥控器/键盘)等部分知识。底层的下位机控制也会涉及位控部分,力控目前能力不足(若后期资金充足,使用如海泰这种具有扭矩反馈的电机,也会考虑做,届时会更新相关的知识),关于更上层的视觉处理部分则不会涉及。
有问题欢迎私信我,或者邮箱联系我2250017028@qq.com

第一部分:修改moveit配置文件

  • 说明:文件框架的搭建需要以moveit_setup_assistant生成的配置文件为基础,因为需要用到move_group进行轨迹规划。具体的配置参考本人的另外一篇博客机械臂项目实战
    以下的配置均在已经完成了上述配置的基础下进行展开。

  • 修改思路:

    1. 修改demo中的配置,使其从仿真控制转为控制实体。(demo文件指的是上述博客中的文件,直接复制替换即可,自动生成的demo会有bug)
    2. 其余的配置在上述的博客中已经修改完成,不作赘述。
  • 参考:我上述的博客参考了古月居的机械臂教程,实现了将机械臂模型放在gazebo仿真环境中运行,其实已经涉及到了以上的修改。这也就是说,在gazebo中运行与实体运行的控制是类似的,都是与move_group进行通信,并使用轨迹控制器和关节控制器,处理轨迹点,控制关节运行。所以该控制框架的搭建参考了gazeobo的控制模型。同时,我也参考了网上其他博主分享的相关博客,站在巨人的肩膀上,搭建出了一套自己的控制框架。


  1. 修改fake_execution参数
<!-- Run the main MoveIt executable without trajectory execution (we do not have controllers configured by default) -->
  <include file="$(find aubo_i5_moveit_config)/launch/move_group.launch">
    <arg name="allow_trajectory_execution" value="true"/>
    <arg name="fake_execution" value="false"/> //这个参数改成false,表示将控制信号发出去
    <arg name="info" value="true"/>
    <arg name="debug" value="$(arg debug)"/>
  </include>

  1. 修改joint_state_publisher的参数列表
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
        <param name="/use_gui" value="false"/> 
        <rosparam param="/source_list">[/robot_name/joint_states]</rosparam>
    </node>
  • 这里的修改表示move_group订阅话题 /robot_name/joint_states ,使用其中的数据更新move_group的关节状态。这个话题就是我们之后要创建的关节状态发布者发布的话题。

第二部分:搭建文件框架

  • 说明:因为不想摈弃掉gazebo的仿真环境,但是move_group的客户端只能配对一个服务端,所以
    无法一边运行实体,一边在gazebo中运行,所以我使用一个参数选择运行哪种模式。

1.创建功能包robot_name_kinematics

cd ~/catkin_ws/src
catkin_create_pkg robot_name_kinematics roscpp std_msgs sensor_msgs serial actionlib moveit_ros_planning_interface moveit_msgs

2.定义消息

  • joint_states.msg
float32 p_joint1
float32 p_joint2
float32 p_joint3
float32 p_joint4
float32 p_joint5 
float32 p_joint6
float32 p_joint7
# float32 p_joint8
# float32 p_joint9
 uint8 JOINTS_NUM = 7

这里的消息定义是为了方便之后的下位机通信,具体的内容因人而异,或者直接使用标准的消息类型也可以。

3. 添加头文件和源文件

includesrc
robot_name_joints_states_controller.hrobot_name_joints_states_controller. cpp
robot_name_trajectory_controller.hrobot_name_trajectory_controller. cpp

CMakeLists.txt

  • 添加链接库
add_executable(trajectory_controller src/robot_name_trajectory_controller.cpp)
target_link_libraries(trajectory_controller ${catkin_LIBRARIES})
add_executable(joints_states_controller src/robot_name_joints_states_controller.cpp)
target_link_libraries(joints_states_controller ${catkin_LIBRARIES})
  • 添加依赖库
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES trobot_kinematics
  CATKIN_DEPENDS actionlib moveit_msgs roscpp
#  DEPENDS system_lib
)
  • 添加消息(若有定义)
## Generate messages in the 'msg' folder
add_message_files(
  FILES
   joint_states.msg
)
......
## Generate added messages and services with any dependencies listed here
generate_messages(
  DEPENDENCIES
  moveit_msgs
)

4.添加launch文件
trobot_real.launch

<launch>

    <!-- 加载机器人关节控制器-->
    <node name="joints_states_controller" pkg="robot_name_kinematics" type="joints_states_controller" />

    <!-- 加载机器人轨迹控制器-->
     <node name="trajetory_controller" pkg="robot_name_kinematics" type="trajectory_controller" /> 
</launch> 

trobot_sim.launch

<launch>
    <!-- 加载gazebo环境  -->
     <include file="$(find robot_name_gazebo)/launch/robot_name_gazebo_world.launch" /> 

    <!-- 加载关节状态控制器,接收虚拟的关节状态 -->
    <include file="$(find robot_name_gazebo)/launch/robot_name_gazebo_states.launch" />   

    <!-- 加载机器人轨迹控制器的服务端,用于接收和处理轨迹点数据 -->
    <include file="$(find robot_name_gazebo)/launch/robot_name_trajectory_controller.launch" />  

</launch>

trobot_start.launch

<launch>
    <!-- *选择是否控制实体 -->
    <arg name = "real_module" value = "true"/>

    <!--加载gazeobo仿真环境-->
    <include unless ="$(arg real_module)"  file="$(find trobot_kinematics)/launch/trobot_sim.launch" /> 
    
    <!--加载实体控制环境-->
    <include if ="$(arg real_module)"  file="$(find trobot_kinematics)/launch/trobot_real.launch" /> 

    <!-- 加载moveit相关文件 -->
    <include file="$(find trobot_moveit_config)/launch/demo.launch" />  
</launch> 

  • real_moduletrue表示控制实体,false表示在gazebo中运行(哪种情况下rviz都会启动),通过修改改参数方便地切换两种工作环境。

下一章将具体展开讲述控制框架的搭建以及源码实现

有兴趣的小伙伴记得关注哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煜个头头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值