ros总结1

1,ros初始化和关闭
参考原文:https://blog.csdn.net/mmyaoduli/article/details/51049921
初始化
在调用任何roscpp函数之前首先要调用ros::init()函数有一下两种形式:
ros::init(argc,argv,“my_node_name”);
ros::init(argc,argv,“my_node_name”,ros::init_options::AnonymousName);

好处:argc 和 argv ROS使用者两个参数来解析命令行的重映射参数,ROS也会修改他们,使得他们不再包含任何重映射参数,所以如果在处理命令行之前调用ros::init(),你就不用自己略过这些参数了。
node_name 在被重映射参数覆盖之前,这个名字会用来命名节点名。节点名字ros中必须是唯一的,如果有第二个同名节点运行,则第一个同名节点必须关闭,有时需要运行多个同名节点,则需要参数声明init_options::AnonymousName解决:
参数作用:
ros::init_options::AnonymousName 匿名节点名称,增加一个随机数在节点名的后面,使得节点名唯一
ros::init_options::NoRosout 不向/rosout 话题广播 rosconsole
关闭
当调用ros::shutdown()函数来关闭节点是,会终结所有开放的订阅,发布,服务,调用。
默认的roscpp也会安装SIGINT句柄用来检测Ctrl-C,并自动为你关闭节点。
关闭节点测试
有两种方法来检查关闭的状态。最常见的是ros::ok().当ros::ok()返回false时节点已经关闭,通常这样使用while(ros::ok()){}。另外一种方法是使用ros::isShuttingDown()方法。这种方法会在调用而不是执行完ros::shutdown()时立即返回true,一般不鼓励使用这种方法,但在有些情况下很有用,例如要测试一个长久运行的服务回调节点是否被要求关闭并且回调是否需要退出,就需要使用ros::isShuttingDown(),ros::ok()在这里不起作用,因为回调在运行的时候节点不能关闭。

2,ros线程分析
参考文献:https://blog.csdn.net/yngki/article/details/53437226
http://www.cnblogs.com/feixiao5566/p/5288206.html
http://wiki.ros.org/roscpp/Overview/Callbacks and Spinning

3,打开MoveIt!设置助手
roslaunch moveit_setup_assistant setup_assistant.launch
4,编译ros包
catkain_make
5,配置环境
source devel/setup.bash

6,将MoveIt!中的运动学求解器KDL换成TRAC-IK
参考链接:http://www.guyuehome.com/1921
首先安装TRAC-IK:sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin
然后修改机械臂MoveIt!配置功能包下的kinematics.yaml文件就可以使用啦:
arm:
kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
kinematics_solver_attempts: 3
kinematics_solver_search_resolution: 0.005
kinematics_solver_timeout: 0.05

7,UR5机械臂的仿真,就是以下3个命令:
3,打开MoveIt!设置助手
roslaunch moveit_setup_assistant setup_assistant.launch
4,编译ros包
catkain_make
5,配置环境
source devel/setup.bash

6,将MoveIt!中的运动学求解器KDL换成TRAC-IK
参考链接:http://www.guyuehome.com/1921
首先安装TRAC-IK:sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin
然后修改机械臂MoveIt!配置功能包下的kinematics.yaml文件就可以使用啦:
arm:
kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
kinematics_solver_attempts: 3
kinematics_solver_search_resolution: 0.005
kinematics_solver_timeout: 0.05

7,UR5机械臂的仿真,就是以下3个命令:
roslaunch ur_gazebo ur5.launch limited:=true
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

在rivz中,规划库中有多种算法,某一个规划算法可能会遇到failed,多试几个,总有一个成功
8,实际控制UR5机械臂过程:
1,工作空间文件夹下打开终端
其中192.168.1.10改成自己设置的ip地址
roslaunch ur_modern_driver ur5_bringup.launch limited:=true robot_ip:=192.168.1.10 use_lowbandwidth_trajectory_follower:=true

2,工作空间文件夹下打开一个新的终端输入:
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true

3,工作空间文件夹下打开第三个终端输入:
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

连通后,rviz中的UR5姿态和实际一致,就可以在rviz规划路径并控制UR5。

7,在运行客户端服务器例程时出现错误
[ERROR] [1556348262.077218321]: [registerPublisher] Failed to contact master at [localhost:11311].
官网说明:http://wiki.ros.org/roscore
方法:原因很简单,忘记运行roscore了,开一个终端运行即可。
roscore包含了一些系统自带的节点(Node)。为了让我们写的节点之间能够通信,第一个命令就是通过roscore命令启动它。

猜你喜欢

转载自blog.csdn.net/harrycomeon/article/details/89642054