导航:首页 > 源码编译 > 编译之后怎么找ros节点

编译之后怎么找ros节点

发布时间:2023-01-11 06:58:56

‘壹’ ROS 计算图级,理解ROS 节点、话题

计算图级-------是 ROS 处理数据的一种点对点的网络形式。程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来,即通过节点、节点管理器、话题、服务等来进行表现。
ROS 中的基本计算图级概念包括:节点、节点管理器、参数服务器、消息、服务、话题和包。这些概念以各种形式来提供数据。

ros 命令的说明及参数可以通过 < 命令 > -h (或 --help )来查看
例如: rosnode -h

用键盘控制小海龟运动这一过程的通信机制是怎样的呢?其实,这两个节点是通过一个 ROS 话题( Topic )来相互通信的, turtle_teleop_key 在这个话题上发布键盘输入的的消息,而 turtlesim 则订阅该话题以接收该消息。下面通过 rqt 功能包和 rostopic 命令来查看相关信息:

2, rostopic list :能够列出所有当前订阅和发布的话题。
先看一下 rostopic list 子命令需要哪些参数。运行命令:
rostopic list -h
使用 verbose 选项,以列出相关话题的详细信息。运行命令:
rostopic list -v
显示了有关所发布和订阅的话题的详细信息,其中方括号中表示的是话题的类型。
3, rostopic type :用来查看所发布话题的消息类型。
用法: rostopic type [topic] 运行如下命令:
rostopic type /turtle1/cmd_vel
上面的 geometry_msgs/Twist 即为话题 /turtle1/cmd_vel 的消息类型,这在执行命令 rostopic list -v 时
也有所体现。
下面用 rosmsg 命令来查看消息的详细情况:
rosmsg show geometry_msgs/Twist

4, rostopic pub :把数据发布到当前某个正在广播的话题上。通过此命令可以通过直接在终端发送命令来控制小海龟
用法: rostopic pub [topic] [msg_type] [args]

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

‘贰’ ros中的节点用c++编写的时候直接调用就可以了吗

一、首先建一个包
我的工作空间catkin_ws事先建好了,路径是/home/siat/catkin_ws
然后运行以下命令在src文件夹下建立test包
$ cd ~/catkin_ws/src
$ catkin_create_pkg test roscpp1212

注意在包的名字后加上一些基本的依赖,比如roscpp和rospy这样就可以直接调用C++和python节点了,这将会在CMakeLists.txt中出现
find_package(catkin REQUIRED COMPONENTS roscpp)11

注意如果没有加依赖,而是直接运行
$ catkin_create_pkg test11

来创建包的,在CMakeLists.txt中是这样的
find_package(catkin REQUIRED)11

在后面编译C++节点的时候将会提示“对各种ros类下的函数未定义的引用”
二、编写节点文件

‘叁’ ros编译提示缺少链接库怎么办

一、标准:ROS功能包中调用第三方静态库
include_directories(
include
${catkin_INCLUDE_DIRS}
)

add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方库名
)
以上一般情况下都没问题,但是有些静态库没有添加pie系统保护功能,导致程序转载的地址是无效的,所以我们在链接时候也需要关闭pie功能。
注:引入PIE的原因是让程序能装载在随机的地址,通常情况下,内核都在固定的地址运行,如果能改用位置无关,那攻击者就很难借助系统中的可执行码实施攻击了。类似缓冲区溢出之类的攻击将无法实施。而且这种安全提升的代价很小
二、解决链接未开启pie功能的静态库时,编译报错
先作对比:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
add_executable(${PROJECT_NAME}_node src/source.cpp
include/source.h
)

target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${PROJECT_SOURCE_DIR}/lib/第三方库名 -no-pie
)
与一般的链接形式对比,我们只是在链接第三方库的后面加了-no-pie,之后再到ROS的工作空间中重新编译就完成了!

‘肆’ ROS 工作空间、package 及 catkin 编译系统

本文内容都可以在 ROS 官网 wiki ( http://wiki.ros.org/ROS/Tutorials )中找到,作者只是根据自己的理解重新阐述了其中的某些内容,或许能帮助读者更好的理解 ROS 系统中的一些概念。首先保证 ROS 已经正确安装了。安装方式可以参考 本博客的另一篇文章 。

简单地说,ROS workspace (工作空间)就是统一存放 ROS 文件的地方,比如一个项目的所有 ROS 文件最好都放在一个 workspace 中,便于统一管理、编译和调用。

catkin 是目前 ROS 的编译系统,自 ROS Groovy 版本开始使用,取代了之前的 rosbuild 编译系统。

ROS workspace 中可以包含若干 ROS package,每个 package 内部包含实现某些特定功能的文件。

其中,~ 表示当前用户的 home 目录, -p (parent)参数可以创建某个文件夹和它的父文件夹,也就是两层的路径。这里 workspace 的名字是 catkin_ws,这个名字可以按照自己项目的内容设定,但是 src 这个文件夹的名字是固定的。

初始化工作空间。这里 src 就是以后存放 ROS 源文件的地方。上述命令之后,会在 src 目录下产生 CMakeLists.txt 文件,这实际上是一个链接到ROS 安装目录下的 /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake 一个超链接文件,对工作空间做了一些初始设置。不用去管它,也不要随便修改它。

会一次性编译 src 文件夹中的所有源文件,同时生成 devel 和 build 两个文件夹。

实际上,catkin_make 这个命令并没有特别神奇的地方,它只是把一系列基本的编译命令整合在了一起,一个 catkin_make 命令相当于如下的一系列命令:

如果要深入研究 catkin_make 编译方式,可以参考 这篇文章 。

将 workspace 的信息载入系统环境变量。
这种方法载入的信息只对当前 terminal 有效。新开一个 terminal 就无效了。如果要对每个 terminal 都有效,可以将上述命令写入用户 home 路径下的 .bashrc 文件中:

注意,.bashrc 文件是隐藏文件,在 home 路径下通过命令

命令可以看到。

还要注意, >> 是将 echo 后边的内容写入文件的尾部,如果用 > 则要覆盖原文件,一定不要搞错。

编译之后,由于我们只是一个空的 workspace,还没有任何 package,所以没有什么实质性的东西,只是告诉系统这里有个 ROS workspace,算是在系统中注册了一下。

package 是组织 ROS 文件的基本单元,一般来说,每个 package 完成一些特定功能。

package 中至少包含两个文件: package.xml 和 CMakeLists.txt.

package 在 workspace 中的存放结构一般如下:

也可采用其他的结构,但是要注意 package 之间不能嵌套,也就是在一个 package 中,不能再创建另一个 package ,所有 package 都必须是相对独立的目录。

用 catkin 创建 package 的过程很简单,用如下命令:

其中 depend 为依赖的其他 package。这样创建之后,package 中的 CMakeLists.txt 和 package.xml 中会体现出这种依赖关系。创建时也可以不指明依赖关系,在后续编译 package 的时候再补上。

创建好了 package,就可以使用 rospack 相关的命令进行查找、进入等操作了。不过,有时会有延迟,可以用命令

或者

查找、更新一下。

上述方式创建了 ROS package,然后就可以在其中编写 源文件了,可用的语言主要是 c++, python,我们现在的项目中还用到了 Julia。这里就不再细述具体的源文件编写过程了。

创建好了源文件,如果是 c++ 编写的,要编译一下。这里要设置好 package.xml 和 CMakeLists.txt 中的信息。如果依赖的 package 已经设置好了,就不需要修改 package.xml 了,只需要在 CMakeLists.txt 中添加源文件对应的编译信息如下:

实际上在 CMakeLists.txt 中有非常全面的模板,很容易找到在哪里添加这些编译文件信息。

设置好了编译信息,就可以回到 workspace 的 src 所在文件夹中,用如下命令编译:

该命令可以一次性编译 src 中的所有 package。如果只想编译指定的 package,可以用如下命令:

但是,这个命令似乎有时不太管用,根据我们的实际经验,最有效的方法是用如下的 whitelist 命令:

这样就是只编译 package1 和 package2。但是要注意,该命令中的 whitelist 具有记忆功能。用完该命令之后,下次如果要编译 src 中所有的 package,如果只用 catkin_make,则还是只编译 whitelist 中的 package,需要用如下命令清除一下 whitelist

以上就是我们使用 ROS 中的一些基本操作,希望其中的一些内容对读者有帮助。

Written by SH

Revised by QP

‘伍’ 如何使用 sdk交叉编译ros

使用ros_qtc_plugin插件新建项目

使用插件新建项目Import ROS
Workspace选项仅新建工作空间导入现工作空间新建文件ROS面Package、Basic
Node等选项创建package节点、launch文件、urdf文件等
现我创建新catkin工作空间,并且面创建package

1、新建项目

文件——新建文件或项目选择Import ROS Workspace——choose图

填写catkin工作空间名字位置图

我Namecatkin工作空间文件夹名字相同(同)名catkin_new选择浏览——创建文件夹创建名catkin_new文件夹图按车再选择打

现框询问新建工作空间未初始化否执行初始化我选择yes
相于执行catkin_init_workspace命令使工作空间初始化

点击Generate Project File再点击步
项目管理步骤配置版本控制系统我选择完图

建工作空间catkin_new空图

2、创建package

接我工作空间创建新package
catkin_new面src右键单击选择添加新文件图

选择ROS——package——choose

填写package名字test1
填写作者(Authors)维护者(Maintainers)Qt环境部没配置文支持请要用文否则新建package或者新建package面package.xml空文件
DependenciesCatkin栏填写依赖通用C++写节点需要添加roscpp依赖


点击完

3、添加新节点

目前package空没任何节点
我test1src文件夹右键单击选择添加新文件

选择ROS——Basic Node——choose创建节点新建.cpp文件

节点名称写node1则名node1.cpp源文件

用ROS模板新建node1.cpp源文件图自Hello World程序

4、编译节点

让编译执行文件我需要编辑test1makefile图
test1CMakeLists.txt加面几行意思node1.cpp编译名node1节点
add_executable(node1 src/node1.cpp)
target_link_libraries(node1
${catkin_LIBRARIES}
)

阅读全文

与编译之后怎么找ros节点相关的资料

热点内容
phpsae源码 浏览:853
为什么安卓手机一直要权限 浏览:227
汇编程序的伪指令 浏览:803
苹果7怎么更新app 浏览:318
c语言常用算法pdf 浏览:960
编程如何让画面动起来 浏览:865
大龄女程序员未来发展 浏览:976
数学书籍pdf 浏览:506
加密门禁卡写入成功无法开门 浏览:464
齿轮传动pdf 浏览:52
alpinelinux 浏览:150
手机端app的扫码功能在哪里 浏览:227
少儿编程中小班英语教案 浏览:452
锁屏密码加密手机怎么解除 浏览:205
linuxlostfound 浏览:135
征途服务器ip地址 浏览:330
git提交代码命令行 浏览:165
什么叫浏览器服务器结构 浏览:157
于谦聊天哪个app 浏览:449
小鹏汽车nlp算法工程师薪资 浏览:881