ROS学习记录2018.7.10
1.ROS基础了解
开源机器人操作系统ROS(robot operation system)
分级:
1.计算图集(一种网络结构)
1.节点:执行运算的进程(做基础处理的单元)
2.消息:有严格数据结构的通讯
3.主题:发布者/订阅者之间的媒介(类似报纸、凤凰新闻这类)
4.服务:一个请求/一个回应的唯一的ROS控制器(类似常说的服务器)
2.文件系统集(ROS代码组织架构)
1.包package:软件各种文件的组织
2.堆stack:包的集合
注:manifest为提供元数据、许可信息、文件间依赖关系、编译参数。
3.社区集(代码库联合系统)
构造函数:
与类同名的函数,在调用类的时候会启动构造函数对类进行操作。
析构函数:
与类同名但名前多了~符号的函数,在释放类的时候会启动析构函数对类进行内部释放操作。
ros::NodeHandle成员介绍:
1.NodeHandle::advertise
回调函数:void connectCallback(const ros::SingleSubscriberPublisher& pub);
例:ros::Publisher pub = handle.advertise<std_msg::String>(“name”, 1, (ros::SubscriberStatusCallback) connectCallback);
2.NodeHandle::subscribe
回调函数:void Foo::Callback(const std_msg::String::ConstPtr& message);
例:ros::Subscriber sub = handle.subscribe (“name”, 1, &Foo::Callback);
3.NodeHandle::serviceClient
例:ros::ServiceClient client = handle.serviceClien<std_msg::String>(“name”);
4.NodeHandle::serviceServer
例:ros::ServiceServer service = handle.advertiseService (“name”,Callback);
2.ROS使用
1.基础操作
$ rospack find ‘nameofstack’:查找安装过的功能包集
$ rosls ‘nameofstack’:显示功能包集下的文件列表
$ roscd ‘nameofstack’:进入功能包文件夹
2.创建ROS功能包:
$ roscreate-pkg [name] [depend1] [depend2] [depend3]
3.继续对ROS的了解学习(理论):
了解ROS操作命令,ROS基本工具,OpenCV,SLAM等,但无法进行实际操作。
继续ROS了解学习(SLAM与导航部分)
4.研究学习
经过自己研究学习,通过了ROS环境变量和工作空间的创建,并使用了virgo_test包进行了编译,并通过。
5.开始操作ROS
利用系统命令rospack find、roscreat-pkg、rosmake、rosnode等完成相应的动作。
创建了新的功能包,并编译。
使用了turtlesim功能包,打开海龟节点窗口;
打开turtle_teleop_key控制海龟移动;
使用命令你个查看主题、查看消息、字段;
使用rostopic pub命令操作海龟曲线运动(圆圈)。
但使用的是-1参数,即仅运行一次,而去掉该参数时,节点持续运行未退出,但是海龟仍是仅执行了一次运动;利用rostopic echo 查看消息信息,发现消息也仅发出一次;未能做到控制海龟持续运动。
使用rostopic pub命令时,若要使海龟持续运动,需使用-r 10参数。
使用服务(rosservice工具)可新建服务,新建一只海龟。
6.使用参数服务器,查看所有共享数据及相关信息。
在之前新建的功能包内,创建新节点,并使用VIM工具编写2个.cpp文件,用于例程练习用。
编译创建并编写的节点,运行节点。
7.使用srv文件:
编写服务节点,通过srv文件提供3 ints求和运算;
编写客户节点,通过srv文件计算3个ints数的和,并显示。
也可使用如下语句调用srv服务:
$ rosservice call add_3_inits 1 2 3
8.使用msg文件:
编写发布节点,发布msg文件中定义的类型消息;
编写订阅节点,接收msg文件中定义的类型消息,并显示。
9.根据:
《ROS培训文档.ppt》 、《ROS学习文档.doc》进行学习。
把代码拷贝到虚拟机内进行catkin_make编译,编译通过。
期间出现过2个重要问题:
权限问题,解决:
$ sudo chmod 777 –R *
单包运行问题,解决:
$ source ./devel/setup.bash
10.看/virgo_frame/virgo_motion代码
但代码比较散乱复杂,并且注释较少。
考虑直接在ros里运行,直接通过终端看节点主题以及消息类型,可更直观的看出该节点的属性。
全体catkin_make通过,但单包运行异常。
后发现是需要
$ source ./devel/setup.bash
(注:每次启动项目都要source。)
查看关系图:
$ rqt_graph
有两个主题,并且使用如下语句也可以看到:
$ rostopic list
可查看该主题类型:
$ rostopic type /motion/odom
可查看消息类型:
$ rosmsg show std_msgs/String
可看到打印的消息数据:
$ rostopic echo /motion/odom
之后我想使用话题发布消息,需要自己编写节点,于是找了小乌龟节点试。
启动乌龟界面:
$ rosrun turtlesim turtlesim_node
再启动按键控制乌龟的节点:
$ rosrun turtlesim turtle_teleop_key
查看过消息类型后,知道了自己应该发送的消息是什么了。
开始自己创建功能包:
$ catkin_creat_pkg turtle_ctrl std_msgs roscpp rospy
编译一下:
$ catkin_make –pkg turtle_ctrl
新建.cpp文件并编入代码。
编译:
$ catkin_make –pkg turtle_ctrl
但有很多错误。
CMakeList.txt和package.xml需要修改,依赖项和源文件,修改过后通过编译。
程序设计的是:前进一次、后退一次、左转一次。
查看关系图:$ rqt_graph
11.
附:点
。