ROS(12)-ur驱动包内容解释

版权声明:微信 kobesdu https://blog.csdn.net/kobesdu/article/details/85854030

ur驱动包相关

config文件夹里面包含如下文件:

fake_controllers.yaml:这是虚拟控制器配置文件,方便我们在没有实体机器人,甚至没有任何模拟器(如gazebo)开启的情况下也能运行MoveIt。

joint_limits.yaml:这里记录了机器人各个关节的位置速度加速度的极限,这些都会被用于以后的规划中。

kinematics.yaml:用于初始化运动学求解库

ur5.srdf:这个是一个重要的MoveIt配置文件,配合URDF使用。我 们可以看到这是一个xml格式的配置文件,根是robot,并有一个属性值name=’ur5’。下面各个项目应该很明显,就是我们刚刚在Setup Assistant里面所设置的东西,包含了组群,位姿,终端控制器,虚拟关节,以及碰撞免测矩阵ACM的定义。理论上,只要有了srdf和urdf,我 们就可以完全定义一个机器人moveit信息。

ompl_planning.yaml:这里是配置OMPL各种算法的各种参数。

Ur_bringup 文件夹:bringup.launch 文件的不同 max_payload 参数不同

ur10_bringup_joint_limited.launch 文件的不同也是max_payload参数不同

在其中包含了该文件夹下的 /ur_common.launch

<include file="$(find ur_bringup)/launch/ur_common.launch">

Ur_moveit_config 文件夹

demo.launch

    demo是运行的总结点,打开我们可以看到他include了其他的launch文件。其中第14行说,如果有需 要,发布静态的tf。比如说,你的机器人基座不在世界坐标的原点,你可以发布一个静态tf来描述机器人在世界坐标中的位置。第17-21行,就是我们发布 虚拟机器人状态的地方了,当然,如果你有实体机器人或者有gazebo之类的模拟器,你需要去掉这一部分,有其他相应的节点来发布机器人状态。26-32 行运行了另一个moveit重要的节点,move group。

move_group.launch

    顾名思义,move group的功能是让一个规划组群动起来。怎么动,那就要做运动规划了,在move_group.launch第24-26行定义了运动规划库的使用,我 们可以看到,默认的是使用ompl运动规划库。同样的,如果以后有时间,我会发帖详解如何创建新的运动规划库插件并让moveit使用其他的运动规划算 法。其他的都是设置一些基本参数,暂时可以略过。

planning_context.launch

    这里我们可以看到,定义了所使用的urdf和srdf文件,以及运动学求解库。不建议手动更改这些,但是如果你需要使用不同的urdf,srdf,可以在这里更改。

ur_description文件夹

里面包含了ur机器人的模型参数等信息,统一使用xacro格式进行保存。

Meshes文件夹里是模型的可视化文件,可以在rviz中打开

ur_modern_driver文件夹

支持UR v3以上版本的ros驱动程序。通过该程序与UR控制器建立网络通讯,负责将ros的控制指令上传至UR控制器,也实时获取UR控制器的反馈信息并发布出来。

ur_modern_driver 源码

ur_ros_wrapper.cpp

Main函数

int main(int argc, char **argv) {

bool use_sim_time = false;

std::string host;

int reverse_port = 50001;

ros::init(argc, argv, "ur_driver");

ros::NodeHandle nh;

if (ros::param::get("use_sim_time", use_sim_time)) {

print_warning("use_sim_time is set!!");

}

if (!(ros::param::get("~robot_ip_address", host))) {

if (argc > 1) {

print_warning(

"Please set the parameter robot_ip_address instead of giving it as a command line argument. This method is DEPRECATED");

host = argv[1];

} else {

print_fatal(

"Could not get robot ip. Please supply it as command line parameter or on the parameter server as robot_ip");

exit(1);

}

}

if ((ros::param::get("~reverse_port", reverse_port))) {

if((reverse_port <= 0) or (reverse_port >= 65535)) {

print_warning("Reverse port value is not valid (Use number between 1 and 65534. Using default value of 50001");

reverse_port = 50001;

}

} else

reverse_port = 50001;

RosWrapper interface(host, reverse_port);

ros::AsyncSpinner spinner(3);

spinner.start();

ros::waitForShutdown();

interface.halt();

exit(0);

}

猜你喜欢

转载自blog.csdn.net/kobesdu/article/details/85854030