ROS教程——1.2 编程实践ROS节点

ROS1/一代机器人系统 少儿编程 503浏览 0评论
Ros教程01

目  录

  • 1.2.1 ROS的开发环境设置
  • 1.2.2 ROS的包(软件包)结构
  • 1.2.3 编写第一个节点
  • 1.2.4 执行和调试节点


1.2.1 ROS 的开发环境配置

(1)工作空间简介

  • 在工作空间“catkin_ws”中可以构建一个或多个由catkin构建的软件包;
  • 包含4个不同空间:

 

描  述 空  间

Contains the source code of catkin packages. Each folder within the source space contains one or more catkin packages.

Source space

is where CMake is invoked to build the catkin packages in the source space. CMake and catkin keep their cache information and other intermediate files here.

Build Space

is where built targets are placed  prior to being installed

Development (Devel) Space

Once targets are built, they can be installed into the install space by invoking the install target.

Install Space

 

(2)工作空间布局

ROS教程——1.2  编程实践ROS节点

(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 包的公用文件和目录

说  明 目  录

C++ include headers

include/

Source files

src/

Folder containing Message (msg)  types

msg/

Folder containing Service (srv) types

srv/

Folder containing launch files

launch/

The package manifest

package.xml

CMake build file

CMakeLists.txt

(2)The Package Manifest

  • XML 文件定义ROS包的属性,例如:
  • ROS报名
  • 版本号
  • 作者信息
  • 依赖关系(依赖于其它包)
  • Example for a package manifest:

 

ROS教程——1.2  编程实践ROS节点

1.2.3 编写第一个节点

(1)创建ROS

  • 进入工作空间的源文件目录

 

cd ~/catkin_ws/src
  • catkin_create_pkg 

创建新的ROS包并指定依赖:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
  • 例如,创建ROS包(first_pkg):

 

catkin_create_pkg first_pkg std_msgs rospy roscpp
  • roscppROS客户端中的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_<LEVEL>[_<OTHER>]
  • 另外,C ++STL流支持* _STREAM函数:
  • ROS_INFO_STREAM(“My INFO stream message with argument: ” << val);

根据上文,编写C++节点程序,该节点实现以10Hz的频率向命令行窗口输出消息,如下所示:


/*

 * hello.cpp

 *

 * Created on: Jun 25, 2018

 *     Author: HuicanLin

 */

 

#include“ros/ros.h”

 

int main(intargc,char**argv)

{

    ros::init(argc,argv,“hello”);

 

    ros::NodeHandle nh;

    ros::Rate loop_rate(10);

 

    int count = 0;

    while (ros::ok())// Keep spinning loop until userpresses Ctrl+C

    {

        ROS_INFO_STREAM(“helloworld” << count);

 

        ros::spinOnce();// Allow ROS to process incomingmessages

        loop_rate.sleep();// Sleep for the rest of thecycle

        count++;

    }

 

    return 0;

}

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(${catkin_INCLUDE_DIRS})

##Declare a cppexecutable

add_executable(hello src/hello.cpp)

##Specify libraries to link a library or executable target against

target_link_libraries(hello ${catkin_LIBRARIES})

(2) 在命令行窗口运行节点

打开两个命令行窗口,分别执行:

cd ~/catkin_ws/
catkin_make
roscore

rosrun lecture01 hello

不出意外的话,将输出如下的结果:

 

ROS教程——1.2  编程实践ROS节点

相应的程序可以从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

您必须 登录 才能发表评论!