目 录
1.2.1 ROS的开发环境设置
1.2.2 ROS的包(软件包)结构
1.2.3 编写第一个节点
1.2.4 执行和调试节点
1.2.1 ROS 的开发环境配置
(1)工作空间简介
在工作空间“catkin_ws”中可以构建一个或多个由catkin构建的软件包;
包含4个不同空间:
(2)工作空间布局
(3)创建catkin工作空间
catkin 是构建ROS节点的官方工具;
原来的ROS构建工具是rosbuild;
旧的包仍在使用;
创建工作空间的命令:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
初始情况下,工作空间只包含顶层目录的CMakeLists.txt,即 "~/catkin_ws/src" 路径下的CMakeLists.txt文件
参考链接:
http://wiki.ros.org/catkin/Tutorials/create_a_workspace
构建命令是"catkin_make",类似cmake和make命令的组合。
使用catkin_make命令构建工作空间及包含的所有包
cd ~/catkin_ws
catkin_make
1.2.2 ROS包
“ROS包”可以看作是工作空间下的目录,包含package.xml文件;
“ROS包”是构建和发布程序(节点)的最原始单位;
“ROS包”包含一个或多个节点的源文件和配置文件;
(1)ROS包的公用文件和目录
(2)The Package Manifest
XML 文件定义ROS包的属性,例如:
ROS报名
版本号
作者信息
依赖关系(依赖于其它包)
Example for a package manifest:
1.2.3编写第一个节点
(1)创建ROS包
进入工作空间的源文件目录
cd ~/catkin_ws/src
catkin_create_pkg
创建新的ROS包并指定依赖:
catkin_create_pkg
[depend1] [depend2] [depend3]
例如,创建ROS包(first_pkg):
catkin_create_pkg first_pkg std_msgs rospy roscpp
roscpp是ROS客户端中的C ++实现
库文件参考下列链接:
http://docs.ros.org/api/roscpp/html/
ROS主头文件是“ros / ros.h”
参考链接:
http://wiki.ros.org/catkin/Tutorials/CreatingPackage
(2)ROS初始化
在使用ROS系统之前必须先调用ros::init()进行初始化
通常在主函数main()中调用:
ros::init(argc, argv, "Node name");
节点名称(Node name)在运行的系统中必须是唯一的;
(3)ros::NodeHandle
与ROS系统通信的主要接入点。
为主题,服务,参数等提供公共接口
创建进程的节点的句柄(在调用ros::init()之后),声明如下:
构造的第一个NodeHandle将完全初始化当前节点
最后一个被销毁的NodeHandle将关闭节点
ros::NodeHandle node;
(4)ros::Rate
设定循环的运行频率,在括号中指定以Hz为单位的频率:
ros::Rate loop_rate(10);
ros::Rate::sleep()
循环周期内的剩余时间进行休眠
从上次睡眠,重置或构造函数被调用计算
(5)ros::ok()
调用ros:: ok()来检查节点是否应该继续运行;
出现下列情况,ros::ok()将返回false:
接收到一个SIGINT(Ctrl-C)
被同名的另一个节点踢出了网络
在应用的其它部分调用了ros::shutdown()
所有的ros::NodeHandles都被销毁
(6) ROS调试消息
使用ROS_INFO输出消息:
ROS_INFO( "My INFO message." );
消息输出格式:级别+时间戳+内容
[INFO] [1356440230.837067170]: My INFO message.
类似printf,该函数可以带参数:
ROS_INFO("My INFO message with argument: %f", val);
ROS具有五个经典的日志记录级别:
DEBUG, INFO, WARN, ERROR, and FATAL
这些名称是用于输出遵循此语法的消息的宏的一部分:
ROS_[_]
另外,C ++STL流支持*_STREAM函数:
ROS_INFO_STREAM("My INFO stream message with argument: "
根据上文,编写C++节点程序,该节点实现以10Hz的频率向命令行窗口输出消息,如下所示:
/*
* hello.cpp
*
* Created on: Jun 25, 2018
* Author: HuicanLin
*/
#include"ros/ros.h"
intmain(intargc,char**argv)
{
ros::init(argc,argv,"hello");
ros::NodeHandle nh;
ros::Rate loop_rate(10);
intcount = 0;
while(ros::ok())// Keep spinning loop until userpresses Ctrl+C
{
ROS_INFO_STREAM("helloworld"
ros::spinOnce();// Allow ROS to process incomingmessages
loop_rate.sleep();// Sleep for the rest of thecycle
count++;
}
return0;
}
1.2.4执行和调试节点
(1)构建节点
在构建节点之前,需要修改在创建包的时候生成的CMakeLists.txt文件;
为创建节点的可执行文件,需要修改CMakeLists.txt,如下所示;
cmake_minimum_required(VERSION 2.8.3)
project(first_pkg)
##Find catkin macros and libraries
find_package(catkin REQUIRED COMPONENTS roscpprospystd_msgs)
##Declare ROS messages and services
# add_message_files(FILES Message1.msg Message2.msg)
# add_service_files(FILES Service1.srv Service2.srv)
##Generate added messages and services
# generate_messages(DEPENDENCIES std_msgs)
##Declare catkin package
catkin_package()
##Specify additional locations of header files
include_directories($)
##Declare a cppexecutable
add_executable(hello src/hello.cpp)
##Specify libraries to link a library or executable target against
target_link_libraries(hello $)
(2) 在命令行窗口运行节点
打开两个命令行窗口,分别执行:
cd ~/catkin_ws/
catkin_make
roscore
和
rosrun lecture01 hello
不出意外的话,将输出如下的结果:
相应的程序可以从github进行clone,再进行编译、调试和执行:
cd ~/catkin_ws/src/
git clone https://github.com/LinHuican/ros_tutorial
cd ..
catkin_make
课后作业
创建新的ROS包,包名为”timer_package”;
在该包中创建节点,节点名为”timer_node”;
该节点每秒向控制台输出当前时间。
Qt Creator开发ROS,参考链接:
ubuntu安装Qt:
https://www.cnblogs.com/huicanlin/p/5279089.html
配置开发ROS:
https://www.cnblogs.com/huicanlin/p/5623067.html
欢迎关注交流,搜”Robot404”或扫描如下二维码:
领取专属 10元无门槛券
私享最新 技术干货