ros 作用(ros系统中定义的消息在哪里)

技术ROS中的cmake指的是什么ROS中的cmake指的是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这一次讨论ROS中的cmake和ROS代码

ROS中的cmake是什么?针对这个问题,本文详细介绍了相应的分析和解答,希望能帮助更多想要解决这个问题的小伙伴找到更简单易行的方法。

这次,我们在ROS中讨论cmake和ROS代码编译过程。

1.基础准备

首先,创建一个基本工作区,创建一个名为柳絮_ws的新ROS项目,并在其中创建一个src文件夹。

$ mkdir ~/柳絮_ws

$ CD ~/柳絮_ws

$mkdirsrc

$cdsrc然后使用ROS包工具,柳絮_create_pkg,在src文件下创建一个名为“test”的新包,它依赖于std _ msgs,rospy,roscpp’

$柳絮_ create _ pkgteststd _ msgsrospyrspptfsensor _ msgsimage _ transportcv _ bridge然后在测试文件夹下的src中创建新的test.cpp文件,这是源代码的标准位置。此时的文件结构如下。

src

test

CMakeLists.txt

include

test

package.xml

src

test.cpp的文件结构是标准的ROS项目和包结构。如果我们需要添加一个新的节点包,我们只需要在src下的测试文件夹中添加一个结构类似的文件夹,例如test2,文件结构就变成如下。

src

test

CMakeLists.txt

include

test

package.xml

package.xml~

src

test.cpp

test2

CMakeLists.txt

include

test2

package.xml

src

94920-test2.cpp2 .文件结构准备好之后,需要配置CMakeLists.txt和包. xml

这是为特定示例配置的。这个例子是OpenCV的一个例子,它是纯C代码,不涉及具体的ROS函数。范例的工作

能是读取摄像头的输入,并展示出来。(Ubuntu 14.04 上面测试通过,注意其中的OpenCV库的引用,请用自己的具体OpenCV库头文件路径包含,具体配置还需自行google)

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>

//#include "ros/ros.h"
//#include "std_msgs/String.h"

using namespace cv;  
using namespace std; 
int main(int argc, char** argv)  
{  
    
  
   //ros::init(argc, argv, "test");  
  
    Mat image;  
	int cam_idx = 0;

    if (argc == 2) {
        cam_idx = atoi(argv[1]);
    }

    VideoCapture cap(cam_idx);
    if (!cap.isOpened()) {
        cerr << "Could not open camera." << endl;
        exit(EXIT_FAILURE);
    }
    namedWindow("Display Image"); 
    
	for(;;){
	  cap >> image; 
	  imshow("Display Image", image);  
          waitKey(5);
	}
	 

	//ros::spin();
    return 0;  
}

首先配置CMakeLists.txt,添加这里的例子 test.cpp ,配置后的文件为,(更具体的参数解释可以参考 wiki)

cmake_policy(SET CMP0012 NEW)
cmake_minimum_required(VERSION 2.8.3)
project(test)
#
find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  rospy
  sensor_msgs
  std_msgs
  tf
)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(
  ${catkin_INCLUDE_DIRS}
)
#add our own node src
add_executable(test_node src/test.cpp)
target_link_libraries(test_node ${OpenCV_LIBS} ${catkin_LIBRARIES})

接着配置下package.xml(更具体的每项解释参考ROS,wiki )

<?xml version="1.0"?>
<package>
  <name>test</name>
  <version>0.0.0</version>
  <description>The test package</description>

  <maintainer email="caoyuanfenglv@163.com">caoyuanfeng</maintainer>
  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>sensor_msgs</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>tf</build_depend>
  <build_depend>opencv</build_depend>
  
  <run_depend>cv_bridge</run_depend>
  <run_depend>image_transport</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>rospy</run_depend>
  <run_depend>sensor_msgs</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>tf</run_depend>
  <run_depend>opencv</run_depend>
  <export>
  </export>
</package>

注意里面多加了OpenCV的以来和图像相关的依赖。

3.编译运行

在配置好两个文件以后,一般的新增ROS项目和node需要修改的都是这两个文件,或者只有CMakelists.txt一个文件,如果依赖相同的。

回到项目的根目录,也就是catkin_ws文件夹,然后用catkin_make编译

$ cd  ~/catkin_make
$ ls 
src
$ catkin_make

接着,运行得到的node

$ source devel/setup.bash
$ rosrun test  test_node

将会看到打开摄像头,弹出来摄像头的画面。表示这个node编译运行成功。

回头看去,总结了下整个ROS项目的过程就是这样的

  • 新建固定的文件结构

  • copy标准的CMakeLists.txt和package.xml文件

  • 分析自己的项目依赖,配置上面的两个配置文件

  • 编写自己的src代码,在CMakeLists.txt里面添加源代码路径

  • 编译运行,出错返回3,成功则 good job。

整个项目的代码都在git@osc上面,可以查看这里。

关于ROS中的cmake指的是什么问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/156546.html

(0)

相关推荐

  • zookeeper选举机制有什么作用(zookeeper的选举机制是什么)

    技术ZooKeeper的选举机制是怎样的本篇文章给大家分享的是有关ZooKeeper的选举机制是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天开始

    攻略 2021年12月24日
  • 两个虫子,词中那个两个字都是虫子旁

    技术两个虫子,词中那个两个字都是虫子旁螳螂两个虫子、蚱蜢、蚯蚓、蛐蛐、蜘蛛、蜻蜓、蜥蜴、蝈蝈、蟑螂、蝴蝶、蝌蚪、蝙蝠、蚂蝗、蚂蚁、蜂蛹、蝼蛄、蚍蜉、蚊蚋、蜈蚣、蜿蜒、螟蛉、蛤蟆、螃蟹、蜜蜂、蚰蜒、蚕蛹、蝽蛳、螺蛳、蟪蛄、

    生活 2021年10月20日
  • Hibernate3有哪些新特性

    技术Hibernate3有哪些新特性小编给大家分享一下Hibernate3有哪些新特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Hiber

    攻略 2021年12月8日
  • 没插耳机显示耳机模式怎么办,手机成耳机模式了怎么办

    技术没插耳机显示耳机模式怎么办,手机成耳机模式了怎么办手机成耳机模式有两种情况 没插耳机显示耳机模式怎么办:第一  就是你在设置里调成的耳机模式 第二   你的手机耳机插孔在你插入耳机的时候被插坏了 把里面的铜片接触到了

    生活 2021年10月30日
  • docker容器网络配置

    技术docker容器网络配置 docker容器网络配置docker容器网络配置
    ip netns(网络名称空间)命令
    [root@Aimmi ~]# rpm -qa|grep iproute
    iprou

    礼包 2021年12月6日
  • python多继承构造方法(python类的继承)

    技术Jython中单继承和多继承的示例分析这篇文章主要介绍Jython中单继承和多继承的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Jython的继承类继承的能力是面向对象编程的基础。J

    攻略 2021年12月17日