Ros编译某个模块命令
1. ros 怎么单独编译一个指定的包
切换到自己的ROS工作空间: $ cd ~/catkin_ws
如果你想编译整个工作空间里面的包:$ catkin_make
如果你只想编译工作空间某一个包:$ catkin_make -DCATKIN_WHITELIST_PACKAGES= "包名"
例如:
2. GDB ROS调试
ROS中用到第三方库,在编译第三方库的时候,加上 -g 选项,以供芹困调用该库时调试。
在编译ROS包的时候,使用如下命令编译:
catkin_make -DCMAKE_BUILD_TYPE=Debug
GDB启嫌颂念动应用
rosrun --prefix 'gdb -ex run --args' 樱余 package node
之后就可以正常使用GDB命令来调试了,因为第三方库编译加了 -g 选项,所以可以进入调用库中的函数进行调试。
3. Ros常用指令
例1:
得晌裤到消息类型:
例2:
例:
根据上述操作得到 topic 消息类型为 nav_msgs/Odometry
使用工具
后可以得到如下结果
ROS常用命令行:
roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信枣谨租。roscore 将启动:
rosrun 包名 可执行文件名 === 运行指定的ROS节点
roslaunch 包名 launch文件凳兆名 === 执行某个包下的 launch 文件
添加可执行权限:
4. 如何使用 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}
)
5. ROS+CPP初识
第一部分:老四样
1. sudo apt update;
2. sudo apt upgrade;
3. 启动 roscore;
4. 启动 turtlesim turtlesim_node;
5. 启动 turtlesim turtle_teleop_key;
第二部分:学习使用 rosbag 进行轨迹录制回放操作
1. mkdir ~/bagfiles;
2. cd ~/bagfiles;
3. rosbag record -a
订阅并记录所有主题发布的高纤团信息,用键盘控制小乌龟走出路径;
4. rosbag info <bagfiles_names>
查看记录文件的相关信息,其中包括了时长、大小、录制时间等;
rosbag play <bagfiles_name>
正常模式播放轨迹记录文件
5. rosbag record-O subset <topic_names>
覆盖并记录部分主题发布的消息
rosbag play -r2 subset <topic_names>
提高两倍发送消息的速度;
第三部分:学习使用 roswtf 检查错误
1. ps -ef | grep -i rosmaster
检查 rosmaster 是否已经启动,如果没有竖乱启动可以通过 roscore 命
令启动相关命令;
2. roswtf
进入~/catkin_ws/devel 通过 roswtf 命令寻找errors or warnings;
3. rostopic list -v
列出所有活跃的 topic
第四部分:建立工作空间和包,运行程序
1. http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringR
OSEnvironment
新建工作空间;
2. 在.bashrc 中添加新的工作空间的路径;
3. 新建 agitr 包(a gentle introction to ros)
进入工作空间;
catkin_create_pkg std_msgs rospy roscpp
4. 将准备好的源文件输入到 agitr 包的 src 文件夹中,并修改
CMakeList.txt 文件与 package.xml 文件;
5. 回到工作空间目录下
catkin_make
编译成功;
6. 逐个测试 1. roscore 2. rosrun agitr xxx.cpp helloworld.cpp
pubvel.cpp
随机发送速度与方向给 turtlebot
subpose.cpp
显示 turtlebot 当前位置与方向
注意:如果不用键盘输入消息,右上角的界面还是会跳动。这意味着 subpose
是不停运作的,并非发送了指令以后才会激活。这也保证了记录的完整性。(从
上次的实验可以看出,如果发布-订阅的通信方式具有首尾丢包的缺点,如果是
一动一记很有可能会漏掉部分操作的记录)
此外,应当尽早进行键盘控制,否则记录时间过长占用内存。
count.cpp
随机发送错误警告
throttle.cpp
有规律地发送报错信息
第五部分:设计一个能画出等边三角形的乌龟
(解析详见理论作业)
四、实验分析及结论
1. 不 要 轻 易 修 改 在 工 作 空 间 /src 目录下的
CMakeLst.txt,否则可能会导致生成 target 重名报错
通常情况下,配置需要的包内的 CMakeList.txt 就可以满
足需求;
2. 在修改 CMakeList.txt 与 package.xml 文件时,应当
注意让.xml 的<build_depend>语句包含的包与.txt 文件中
find_package()语句包含的包一摸一样
3. 在修改 CMakeList.txt 的时候,在最后应当戚橘加上
语句,生成相关 target 文件用于执行。
4. 命令 roswtf 显示的报错大概率不用在意,不会影响正
常运行。
6. ROS软路由常用命令有哪些
作为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet 的主体脉络,也可渣锋以说,路由器构成了Internet的骨架。这篇文章主要介绍了ROS软路由常用命令 小结,需要的朋友可以参考下
具体介绍
1 accept: 接受
add-dst-to-address-list - 把一个目标IP地址加入address-list
add-src-to-address-list - 把一个源IP地址加入address-list
2 drop - 丢弃
3 jump - 跳转,可以跳转到一个规则主题里面,如input forward,也可如模晌以跳转到某一条里面
4 log - 日志记录
5 passthrough - 忽略此条规则
6 reject - 丢弃这个包,并且发送一个ICMP回应消息
7 return - 把控制返回给jump的所在
8 tarpit - 捕获和扣留 进来的TCP连接 (用SYN/ACK回应进来的TCP SYN 包)router os命令:
看了很多router os 的资料都是关于如何安装的,却很少见到关于router os的命令资料(也许因为有winbox了),虽然在router os 的手册中有说明,但是是英文版本的,很不好看懂。下面就我就写出一些常用的命令,希望对大家有所帮助:
1、开机登陆以后常用的一个 ? 是常用的帮助命令,可以列出可用的命令及码梁简单的说明。
2、有些英文命令很长,可以简写如inte***ce ,你输入in后回车自动就会进入inte***ce了。或者你可以按下tab键来帮你完成长英文命令的输入。
3、有些命令的参数很多,你不知道的时候可以输入命令后加空格?,如print ?可以显示该命令的参数。
4、setup 该命令可是谁都要记得的,因为最初安装完router os 必须用它分配网卡的ip地址。
5、ip route add gate=211.12.*.14,220.163.*.12 该命令用于多线路接入时加入多个网关用的。
6、ip firewall add action=nat protocol=tcp dst-address=212.12.*.*/32:80 to-dst-address=192.168.0.198 该命令用于映射端口80到本地的192.168.0.198上。
7、print 该命令有点用于列出所有的项目。
8、inte***ce monitor-traffice 0,1,2 可以监视当前0,1,2网卡的活动情况。
9、ip firewall connection print 显示当前的所有的连接。
10、ip arp print 显示所有router os 知道的ip地址和mac地址的对应列表。
11、user active print 显示所有的router os 的活动用户。
12、system reboot 、system shutdown分别是重启和关机。
13、system reset 删除所有原来的配置,并重新启动router os. 14、system resource monitor 可以监视当前的cpu,和内存的使用情况。
15、log print 可以显示router os 的日志。
16、tool ping-speed 210.13.14.* 可以显示ping 的速度。
17、tool sniffer start,和tool sniffer stop 可以开启和停止嗅探器。
18、tool sniffer packet print 可列出嗅探的包。
19 、system backup name=2004107.bak 可以将系统的配置备份到文件2004107.bak,可以用file print看到。
还有什么enable,disable,remove,set 那些常用的就不说了。
相关阅读:路由器安全特性关键点
由于路由器是网络中比较关键的设备,针对网络存在的各种安全隐患,路由器必须具有如下的安全特性:
(1)可靠性与线路安全 可靠性要求是针对故障恢复和负载能力而提出来的。对于路由器来说,可靠性主要体现在接口故障和网络流量增大两种情况下,为此,备份是路由器不可或缺的手段之一。当主接口出现故障时,备份接口自动投入工作,保证网络的正常运行。当网络流量增大时,备份接口又可承当负载分担的任务。
(2)身份认证路由器中的身份认证主要包括访问路由器时的身份认证、对端路由器的身份认证和路由信息的身份认证。
(3)访问控制对于路由器的访问控制,需要进行口令的分级保护。有基于IP地址的访问控制和基于用户的访问控制。
(4)信息隐藏与对端通信时,不一定需要用真实身份进行通信。通过地址转换,可以做到隐藏网内地址,只以公共地址的方式访问外部网络。除了由内部网络首先发起的连接,网外用户不能通过地址转换直接访问网内资源。
(5)数据加密
为了避免因为数据窃听而造成的信息泄漏,有必要对所传输的信息进行加密,只有与之通信的对端才能对此密文进行解密。通过对路由器所发送的报文进行加密,即使在Internet上进行传输,也能保证数据的私有性、完整性以及报文内容的真实性。
(6)攻击探测和防范
路由器作为一个内部网络对外的接口设备,是攻击者进入内部网络的第一个目标。如果路由器不提供攻击检测和防范,则也是攻击者进入内部网络的一个桥梁。在路由器上提供攻击检测,可以防止一部分的攻击。
(7)安全管理
7. ROS中分析catkin_make编译信息的方法
在使用catkin_make编译时,在终端中会有很多打印,导致非常难找错误信息。
一个小窍门就是:
在终端中使用以下命令执行编译:
此时在终端中只显示错误信息打印以及cmake中使用message 打印的信息。
另外开启新的终端 输入命令: tail -f logs 查看编译的打印信息。
8. ROS使用python3
参考:
为了使用python3的图像处理程序,需要使用到ros接口,但是由于原生ros接口不支持python3,只能使用python2.7(时间2020-07,版本melodic),一下步骤主要为了使用ros调用的方式调用python3的程序
由于ros接收图像数据使用的是cv_bridge 接口,所以先编译python3版本的cv_bridge
注意:此时要先安装好python3的环境,可以按照以下方式安装
进入到工作空间进行编译
会有如下提示
编译完成后,可以在工作路径下的install文件夹里生成需要的库,需要使用python3版本的cv_bridge时,就将这个环境变量导入即可
extend参数的作用是让这次的路径配置不影响之前配置好的路径
1. 在使用rosrun 运行程序时,默认还会调用原生melodic的cv_bridge
我的处理方法是将原来的python版本cv_bridge删除
2. 编译完成会有错误提示,如下图,但不影响使用
编译安装:
在编译时,使用如下命令:
编译过程中会有错误提示
解决方法:
参考 https://answers.ros.org/question/257757/importerror-no-mole-named-em-error/
编译完成如下:
运行roscore错误提示
安装netifaces
参考 https://github.com/frescobaldi/python-poppler-qt5/issues/29
https://launchpad.net/ubuntu/+source/sip4/4.19.21+dfsg-1build1
解压安装
9. 如何编写ros的python程序
ROS Indigobeginner_Tutorials-10编写ROS话题版的Hello World程序(Python版)
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS版本:ROS Indigo
1. 前言 :
Hello world程序,在我们编程界,代表学习某种语言编写的第一个程序。对于ROS机器人操作系统来说,这个Hello World程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)。
2. 准备工作 :
C++的程序都会存放在每个程序包的src文件夹里。Python不同,Python程序都存放在scripts文件夹中, 反正意思都是源文件包。
Step 1 .所以,先在beginner_tutorials软件包中创建一个scripts文件夹:
$ roscd beginner_tutorials$ mkdir scripts$ cd scripts123
3. 编写消息发布器节点程序:
如果你懒得去写的话,你可以使用wget命令, 在github上获取一个talker.py源代码。如何获取呢 ?
Step 2 .开一个终端,输入下面的命令就可以获取talker.py:
$ wget
-devel/rospy_tutorials/001_talker_listener/talker.py$ ls
talker.py123
但是我建议你亲自动手,写一写:手动创建一个talker.py文件在/scripys文件夹里:
$ roscd beginner_tutorials/scripts$ gedit talker.py12
将这上面链接里的代码手动输入到talker.py文件中。(我就不将代码贴上来了)
下面我来讲解一下代码:
这些足以说明,hello_world_topic.launch启动脚本文件,启动成功。
总结:发布器和订阅器是很简单的, 就是简单的发布一个 自定义的话题。
我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic) 和 服务(rosservice)
所以,接下来,我们会讲:使用ROS服务来完成ROS版Hello World程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便ROS服务版的Hello World程序的编写。
所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。
10. 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