话题控制robotiq机械爪
在机械臂进行自主抓取时,需要机械臂到达目标位置时,机械爪能够自动执行动作。因此需要在逻辑中加入话题控制机械爪。
机械爪控制话题
在运行了机械爪的控制话题之后,我们使用rostopic list来寻找控制机械爪的话题:
Robotiq2FGripperRobotOutput
同时,我们在robotiq_2f_gripper_control中查看msg消息类型:
uint8 rACT
uint8 rGTO
uint8 rATR
uint8 rPR
uint8 rSP
uint8 rFR
我们调用的头文件应该为:
#include<robotiq_2f_gripper_control/Robotiq2FGripper_robot_output.h>
C++程序编写
在编写程序时,只需要调用相关的控制消息,并且按照机械爪的消息类型来发布相关的数据就可以控制机械爪的开合。
#include<ros/ros.h>
#include<robotiq_2f_gripper_control/Robotiq2FGripper_robot_output.h>
int main(int argc, char **argv)
{
ros::init(argc, argv, "robotiq");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<robotiq_2f_gripper_control::Robotiq2FGripper_robot_output>("/Robotiq2FGripperRobotOutput",10);
ros::Rate loop_rate(1);
int count = 0;
while (ros::ok())
{
robotiq_2f_gripper_control::Robotiq2FGripper_robot_output Robotiq2FGripperRobotOutput;
Robotiq2FGripperRobotOutput.rACT=1;
Robotiq2FGripperRobotOutput.rGTO=1;
Robotiq2FGripperRobotOutput.rATR=0;
Robotiq2FGripperRobotOutput.rPR=0;
Robotiq2FGripperRobotOutput. rSP=255;
Robotiq2FGripperRobotOutput.rFR=150;
pub.publish(Robotiq2FGripperRobotOutput);
ROS_INFO("Publish Robotiq2FGripper_robot_output Info: rACT:%d rGTO:%d rATR:%d rPR:%d rSP:%d rFR:%d",
Robotiq2FGripperRobotOutput.rACT,Robotiq2FGripperRobotOutput.rGTO, Robotiq2FGripperRobotOutput.rATR,Robotiq2FGripperRobotOutput.rPR,Robotiq2FGripperRobotOutput. rSP,Robotiq2FGripperRobotOutput.rFR);
loop_rate.sleep();
}
return 0;
}
一般情况下,只需要改变rPR的值就可以控制开合,0值时机械爪打开,255值时机械爪闭合,可以选择中间的数值来满足我们的需求。
##配置依赖
在编写完成C++程序后,我们需要配置cmakelists文件和package.xml文件来编译:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
# 需要加入 message_generation,必须有 std_msgs
## 配置 msg 源文件
add_message_files(
FILES
Person.msg
)
# 生成消息时依赖于 std_msgs
generate_messages(
DEPENDENCIES
std_msgs
)
#执行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo02_talker_listener
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
在package.xml中添加下面两句:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
这样调用自定义的消息的依赖就完成了,接下来只需要在cmakelists文件中加入C++文件的两个依赖库就可以运行该程序了。
|