http://www.autolabor.com.cn/book/ROSTutorials/

第1章 ubuntu软件设置安装源


官方默认安装源

sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list ‘

国内清华大学安装源

sudo sh -c ‘./etc/lsb-release && echo “deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ lsb_release -cs main” > /etc/apt/sources.list.d/ros-latest.list’

中科大安装源

sudo sh -c ‘. /etc/lsb-release && echo “deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main” > /etc/apt/sources.list.d/ros-latest.list’

备注:

(1)sh-c是什么意思?

在Linux使用echo并配合命令重定向是实现向文件中写入信息的快捷方式。但是在写入文件的时候面临着权限不够的问题。虽然使用sudo命令,但是sudo仅仅是作用于echo,,让echo命令有了root权限。,对于>或者>>依旧没有root权限。因此可以使用“sh -c”来讲sudo的作用范围扩展到整条命令。

(2)echo命令:

1、覆盖型写法(文件里原来的内容被覆盖

echo “aaa”> a.txt

echo aaa > a.txt

2、添加型写法(新内容添加在原来内容后面

echo “aaa” >> a.txt

echo aaa >> a.txt

第2章 ubuntu各个版本与ros版本的对饮关系

ROS发行版 支持的操作系统
Noetic Ninjemys ubuntu 20.04
Melodic Morenia ubuntu 18.04
Kinetic Kame ubuntu 16.04

第3章 ~ / . 的含义

~代表你的/home/用户名目录

假设你的用户名是x,那么~/就是/home/x/

.是代表此目录本身,但是一般可以不写

所以cd ~/. 和cd ~ 和cd ~/效果是一样的

但是.后面有东西又是另外一个问题,点在文件名头部,代表一个隐藏文件

~/.local是你的主目录下一个.local的文件夹的路径,

并且从.可以看出,这是一个饮藏文件,

如果不用ls -a的话,一般ls是无法看到的

/ 是目录层的分隔、表示符。只有一个 / 表明是 root, /etc/ 表明是根目录下面的 etc 目录(当然目录最后不需要 / ,但有 / 直接表明他是目录,没有末尾的 / ,那么 /etc 需要检测一下确定是目录还是文件,虽然习惯上 /etc 绝对是目录)

~ 是一个代位符,表明的是个人目录的地址,因为每个用户都有自己的个人目录地址,所以用 ~ 作为统一替代这个根据用户不同而不同但有规可循的地址,来保证某些情况下的兼容问题。

/ 是根节点, ~ 是 home

如果以root账号登陆

~ 是 /root/

/ 是 /

如果以 name 登陆

~ 是 /home/name/

/ 是 /

————————————————

版权声明:本文为CSDN博主「liuhmmjj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u014082714/article/details/44081565/

第4章 ROS设置环境变量

作用:

计算机操作系统里面设置环境变量其实就是设置一定的文件路径,让计算机执行命令的时候方便找到。所以ROS中环境变量就是为了让计算机更方便的找到文件所在的路径来执行。

如何来设置环境变量

打开终端,依次输入如下三条命令,每一条输入之后回车一下: echo “source /opt/ros/kinetic/setup.bash” >> ~/.bashrc 解释:source这个单词,代表去寻找**(溯源)的意思,后面一长串/opt/ros/kinetic/setup.bash就是ROS本身工作空间环境变量配置脚本文件的路径,>> ~/.bashrc表示将这个环境变量配置脚本写到终端配置文件.bashrc中。 ** echo “source /home/zq/catkin_ws/devel/setup.bash” >> ~/.bashrc %(这一条在设置ros环境变量的的时候没有用到过) source ~/.bashrc 这行命令的意思是将重新编辑的终端配置文件.bashrc保存一下。

注意:执行设置环境变量指令无需采用root权限添加 sudo,在20.04上实测显示没有那个文件或者目录。

查看一下现在ROS内部的环境变量有哪些

echo $ROS_PACKAGE_PATH

点滴学习记录 - 图2

然后,我们也可以直接打开这个.bashrc文件来看有哪些环境变量,运行下面这个命令即可。 gedit ~/.bashrc

第5章 ROS 初始化失败解决方法(亲测适用于18.04和20.04

点滴学习记录 - 图3

按照奥特学院的步骤进行操作以后,依旧失败。原因找到了:先删除之前的init文件。按照实现操作后重新进行初始化和更新操作即可。

点滴学习记录 - 图42.进入”/usr/lib/python2.7/dist-packages/“ 查找rosdep中和raw.githubusercontent.com相关的内容,调用命令:

find . -type f | xargs grep “raw.githubusercontent”

点滴学习记录 - 图5

3.修改相关文件,主要有: ./rosdistro/init.py、./rosdep2/gbpdistro_support.py、./rosdep2/sources_list.py 、./rosdep2/rep3.py。可以使用sudo gedit命令修改文件:

文件中涉及的 URL 内容,如果是:**raw.githubusercontent.com/ros/rosdistro/master都替换成步骤1中准备的gitee.com/zhao-xuzuo/rosdistro/raw/master**即可。

./rosdistro/init.py:

DEFAULT_INDEX_URL = ‘https://gitee.com/zhao-xuzuo/rosdistro/raw/master/index-v4.yaml’

./rosdep2/gbpdistro_support.py

FUERTE_GBPDISTRO_URL = ‘https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml’

./rosdep2/sources_list.py

DEFAULT_SOURCES_LIST_URL = ‘https://gitee.com/zhao-xuzuo/rosdistro/raw/master/rosdep/sources.list.d/20-default.list’

./rosdep2/rep3.py

REP3_TARGETS_URL = ‘https://gitee.com/zhao-xuzuo/rosdistro/raw/master/releases/targets.yaml’

修改完毕,再重新执行命令:

sudo rosdep init rosdep update

就可以正常实现 rosdep 的初始化与更新了。

点滴学习记录 - 图6

第6章 ROS终端基本命令

区分好ros话题、节点、服务的关系。

一、启动命令roscore

  1. roscore
你在运行所有ROS程序前首先要运行的命令。

二、相对包的快捷命令

【注意】:出现没有此包的原因是没有加载环境变量ROS_PACKAGE_PATH中没有要找的包的环境变量。你要先加载环境变量

1.打开roscd

  1. roscd [本地包名称[/子目录]]
roscdcd的快捷版,可以直接打开到包的位置。 比如:/home/volume/catkin_ws/src/my_package

cd 与 roscd 的区别

  1. # cd
  2. # cd
  3. volume@lenovo:~$ cd ~/catkin_ws/src/my_package
  4. volume@lenovo:~/catkin_ws/src/my_package$
  5. # roscd
  6. volume@lenovo:~$ roscd my_package/ #简单实用,不需要过多的累赘
  7. volume@lenovo:~/catkin_ws/src/my_package$

2.找到包的位置

  1. rospack find [包名称]

**输出包所在的位置(查找路径的时候会很方便)**

  1. volume@lenovo:~$ rospack find my_package
  2. /home/volume/catkin_ws/src/my_package

三、查看命令

1.rosnode

(1)列出当前节点list

  1. rosnode list

点滴学习记录 - 图7

其中:
  • /rosout:ROS中相当于stdout/stderr。这个节点用于收集和记录节点调试输出信息,所以它总是在运行的。

(2)查看节点信息info

  1. rosnode info [node_name]

例子:

  1. # 例子
  2. volume@lenovo:~$ rosnode info /turtlesim
  3. --------------------------------------------------------------------------------
  4. Node [/turtlesim] # 节点名字
  5. Publications: # 节点发布的话题Publications
  6. * /rosout [rosgraph_msgs/Log]
  7. * /turtle1/color_sensor [turtlesim/Color]
  8. * /turtle1/pose [turtlesim/Pose]
  9. Subscriptions: # 节点订阅的话题Subscriptions
  10. * /turtle1/cmd_vel [geometry_msgs/Twist]
  11. Services: # 节点提供的服务
  12. * /clear
  13. * /kill
  14. * /reset
  15. * /spawn
  16. * /turtle1/set_pen
  17. * /turtle1/teleport_absolute
  18. * /turtle1/teleport_relative
  19. * /turtlesim/get_loggers
  20. * /turtlesim/set_logger_level
  21. contacting node http://lenovo:35497/ ...
  22. Pid: 4365 # 节点的Pid
  23. Connections: # 计算图中链接的节点
  24. * topic: /rosout
  25. * to: /rosout
  26. * direction: outbound
  27. * transport: TCPROS
  28. * topic: /turtle1/cmd_vel
  29. * to: /teleop_turtle (http://lenovo:35617/)
  30. * direction: inbound
  31. * transport: TCPROS
  32. ————————————————
  33. 版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  34. 原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552

(3)ping测试节点ping

  1. rosnode ping [节点名称]

点滴学习记录 - 图8

2.rostopic

(1)列出所有的话题list

不分类:

  1. rostopic list

点滴学习记录 - 图9

按照订阅和发布分类:

  1. rostopic list -v

点滴学习记录 - 图10

(2)查看话题信息info

  1. rostopic info [topic_name话题名字]
例如:

点滴学习记录 - 图11

(3)查看话题类型type

  1. rostopic type topic_name

点滴学习记录 - 图12

(4)监听话题消息echo

  1. rostopic echo [topic_name]

点滴学习记录 - 图13

这里显示了小海龟的线速度和角速度。

(5)发布消息pub (暂时失败)

失败现象:发布消息的格式有问题!!!

用来在cmd中调试。
  • 单次执行:发布一次
  1. rostopic pub topic_name topic_type
  • 连续执行:一秒中发布rate_times
  1. rostopic pub -r rate_times topic_name topic_type

例子:

  1. # 消息内容打个tab就能自动补全,然后修改其内容成我们想要的
  2. volume@lenovo:~$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
  3. x: 2.0
  4. y: 0.0
  5. z: 0.0
  6. angular:
  7. x: 0.0
  8. y: 0.0
  9. z: 0.0"
  10. publishing and latching message. Press ctrl-C to terminate
  11. ————————————————
  12. 版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  13. 原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552
  1. volume@lenovo:~$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  2. x: 2.0
  3. y: 0.0
  4. z: 0.0
  5. angular:
  6. x: 0.0
  7. y: 0.0
  8. z: 0.0"
  9. ————————————————
  10. 版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  11. 原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552

3.rosservice ros服务

(1)列出服务list

  1. rosservice list

点滴学习记录 - 图14

(2)查看服务信息info

  1. rosservice info service_name

点滴学习记录 - 图15

(3)调用服务call (暂时失败)

  1. rosservice call service_name

失败原因:error!!!!

点滴学习记录 - 图16

四、运行命令

1.rosrun

(1)基本用法

rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。 用法:
  1. rosrun [package_name] [node_name]

比如运动小海龟的节点:现在我们可以运行turtlesim包中的 turtlesim_node

  1. rosrun turtlesim turtlesim_node

(2)重命名节点

用法:

  1. rosrun [package_name] [node_name] __name:=[node_new_name]
例如:rosrun [package_name] [node_name] __name:= [node_new_name] 关键在于标红的这一部分 plain rosrun turtlesim turtlesim_node __name:=my_turtle # 第7章 ros基本案例实现流程 1、先创建一个工作空间 2、在创建一个功能包 3、编辑源文件 4、编辑配置文件 5、编译并运行 其中,不管是用python语言还是C++语言,只要在步骤三和步骤四中有所区别,其他地方没有区别。 ### 1、创建工作空间目录并且初始化 plain mkdir -p 自定义空间名称/src cd 自定义空间名称 catkin_make ·上述命令首先建立一个工作空间以及一个src子目录,然后进入工作空间调用catkin_make进行编译。 注: mkdir后面参数含义: + -p: 创建mydir目录以及mydir目录下面的dir_test文件。允许创建目录及子目录 + -m:创建指定权限的目录

注意:创建的时候需用使用root权限。使用sudo和不使用sudo的对比如下:

点滴学习记录 - 图17

点滴学习记录 - 图18

创建后,工作空间目录下只有一个src文件夹

点滴学习记录 - 图19

进入到该空间对该空间进行编译: cd [] catkin_make, 编译后多出了两个文件夹devel和build文件夹

点滴学习记录 - 图20

(1)文件系统级理解ROS架构 工作空间架构,一目了然

点滴学习记录 - 图21

src源文件空间:这个文件夹放置各个功能包一个用于这些功能包的CMake配置文件CMakeLists.txt。这里做一下说明,由于ROS中的源码采用catkin工具进行编译,而catkin工具又是基于cmake技术的,所以我们会在src源文件空间和各个功能包中都会见到一个文件CMakeLists.txt,这个文件就是起**编译配置**的作用

build**编译空间**:这个文件夹放置CMakecatkin编译功能包时产生的缓存、配置、中间文件等。

devel开发空间:这个文件夹放置编译好的可执行程序这些可执行程序是不需要安装就能直接运行的一旦功能包源码编译和测试通过后,可以将这些编译好的可执行文件直接导出与其他开发人员分享。

到此第一步结束。

2、进入src创建ros功能包并且添加依赖

ros功能包是ros中软件组织的基本形式,一个功能包具有用于创建ROS程序的最小结构和最少内容,他可以包含ROS运行的进程(节点)、配置文件等

功能包中主要包含的配置文件如上图所示。

CMakeLists.txt功能包**配置**文件:用于这个功能包cmake编译时的配置文件。

package.xml功能包清单文件**:用xml的标签格式标记这个功能包的各类相关信息,比如包的名称依赖关系等。主要作用是为了更容易的安装和分发功能包**

include/功能包头文件目录你可以把你的功能包程序包含的*.h头文件放在这里include下之所以还要加一级路径是为了更好的区分自己定义的头文件和系统标准头文件用实际功能包的名称替代。不过这个文件夹不是必要项,比如有些程序没有头文件的情况。

msg非标准消息定义目录消息是ROS中一个进程(节点)发送到其他进程(节点)的信息,消息类型是消息的数据结构,ROS系统提供了很多标准类型的消息可以直接使用,如果你要使用一些非标准类型的消息,就需要自己来定义该类型的消息,并把定义的文件放在这里。不过这个文件夹不是必要项,比如程序中只使用标准类型的消息的情况。

srv服务类型定义目录服务是ROS中进程(节点)间的请求/响应通信过程,服务类型是服务请求/响应的数据结构,服务类型的定义放在这里。如果要调用此服务,你需要使用该功能包名称和服务名称。不过这个文件夹不是必要项,比如程序中不使用服务的情况。

scripts可执行脚本文件存放目录:这里用于存放bash、python或其他脚本的可执行文件。不过这个文件夹不是必要项,比如程序中不使用可执行脚本的情况。

launch文件目录这里用于存放.launch文件,.launch文件用于启动ROS功能包中的一个或多个节点,在含有多个节点启动的大型项目中很有用。不过这个文件夹不是必要项,节点也可以不通过launch文件启动。

src功能包中节点源文件存放目录:一个功能包中可以有多个进程(节点)程序来完成不同的功能,每个进程(节点)程序都是可以单独运行的,这里用于存放这些进程(节点)程序的源文件,你可以在这里再创建文件夹和文件来按你的需求组织源文件,源文件可以用c++、python等来书写。

**为了创建、修改、使用功能包,ROS给我们提供了一些实用的工具,常用的有下面这些工具。**

rospack:用于获取信息或在系统中查找工作空间。

catkin_create_pkg:用于在工作空间的src源空间下创建一个新的功能包。

catkin_make:用于编译工作空间中的功能包。

rosdep:用于安装功能包的系统依赖项。

rqt_dep:用于查看功能包的依赖关系图。 关于这些工具命令的具体使用方法,会在后面的章节中结合实例进行具体的讲解。这里只是先介绍给大家,让大家有个概念上的了解,感兴趣的朋友也可以自己上网了解这些命令的具体用法。

操作步骤:

  1. cd src /进入到工作空间的功能包节点源文件存放目录
  2. catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs /创建功能包,添加依赖项

点滴学习记录 - 图22

上述命令会在工作空间下生成一个功能包,该功能包依赖于roscpp、rospy、std_msgs。其中roscpp是使用C++实现的库,rospy是使用python实现的库,std_msgs是标准的消息库,创建ros功能包是一般都会依赖这三个库。

注意:在ros中,虽然实现一种功能时,C++和python可以互换,但是具体选择哪一种语言需要视需求而定,ROS设计者分别设计了roscpp与rospy库,前者意在称为ROS的高性能库,而后者一般用于对性能无要求的场景,用来提高开发效率。

3.1 Helloworld (C++版本)

(1)进入ros包的src目录编辑源文件 (区别)

  1. cd 自定义的功能包的src目录下
  2. gedit helloworld.cpp /没有的话会自动创建

C++代码实现(文件名自定义)

  1. #include "ros/ros.h"
  2. int main(int argc,char *argv[])
  3. {
  4. //执行ros节点初始化
  5. ros::init(argc,argv,"hello");
  6. //创建ros节点句柄 (非必须)
  7. ros::NodeHandle n;
  8. //控制台输出hello world
  9. ROS_INFO ("hello world!")
  10. return 0;
  11. }

点滴学习记录 - 图23

(2)编辑ros功能包下的Cmakelist.txt文件 (区别)

  1. add_executable(上面步骤的源文件名 src/上面步骤的源文件名.cpp)
  2. target_link_libraries(上面步骤的源文件名${catkin_LIBRARIES})

点滴学习记录 - 图24

纠正target_link_libraries link和libraries的l应该是小写!!!!!!(因为这个问题耽误了至少30min!!)

点滴学习记录 - 图25

(3)进入工作空间目录并且编译

  1. cd 自定义空间名称
  2. catkin_make

生成 build devel……编译后devel文件夹中多了一个share文件夹

点滴学习记录 - 图26

(4)执行

先启动命令1

  1. roscore

再启动命令2

  1. cd 工作空间
  2. source ./devel/setup.bash
  3. rosrun 功能包名 C++节点(现在看来c++节点的名字就是该cpp程序的名字)

命令行输出:hello world!

注意:source ~/工作空间/devel/setup.bash 可以直接添加进 .bashrc文件,使用上更加方便

添加方式一:直接使用gedit或者vi编辑 .bashrc文件,最后面添加该内容(自己采用的这种方式)**见最后一行。**

添加后,以后可以忽略这一步。直接进入到工作空间,运行rosrun命令。点滴学习记录 - 图27

添加方式二:echo “source ~/工作空间/devel/setup.bash”>>~/.bashrc

》》》》》疑问:cpp文件中,这个节点初始化的名字比如“hello”是什么,有什么用?????(关键词:计算图中)

解答:网上说这确实是节点的名称,这一句是初始化ros节点并指明节点的名称,这里给节点取名为hello_node,一旦程序运行后就可以在ros的计算图中被注册为hello_node名称标识的节点

点滴学习记录 - 图28

3.2 Helloworld (python版本)

(1)进入ros包添加scripts目录并编辑python文件 (区别)

  1. cd ros
  2. mkdir scripts

创建后功能包多了一个scripts文件,大概就是为了不与cpp文件混淆在一起吧

点滴学习记录 - 图29

新建python文件:(文件名自定义)

gedit XXXX.py

  1. #!/usr/bin/env python
  2. """
  3. python版 helloworld
  4. """
  5. import rospy
  6. if __name__ ="__main__":
  7. rospy.init_node("hello")
  8. rospy.loginfo("hello world")

注:如何正确理解 if name =”main“: (做验证码识别)

name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

name 是python的内置变量,当执行当下程序时,该变量就是mainif name =”main“ 就是ture.

https://www.zhihu.com/question/49136398这个链接通过举例子讲解的很形象。

(2)为python文件添加可执行权限 (区别)

  1. chmod +x 自定义的文件名.py

注:chmod +x : 意思就是给执行权限

点滴学习记录 - 图30

链接出处:https://blog.csdn.net/u012106306/article/details/80436911

执行后表面上看起来没什么效果。

(3)编辑ROS功能包下的CmakeList.txt文件 (区别)

  1. catkin_install_python(PROGRAMS scripts/自定义文件名.py
  2. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  3. )

(4)进入工作空间目录并编译(与c++版本的一致)

  1. cd 自定义空间名称
  2. catkin_make

(5)进入工作空间目录并执行 (与c++基本一致)

先启动命令1

  1. roscore

再启动命令2

  1. cd 工作空间
  2. source ./devel/setup.bash
  3. rosrun 包名 自定义文件名.py

在c++版本执行rosrun的时候执行功能包下的文件名无需添加后缀.cpp。但是python文件需要添加文件后缀.py。

命令行输出:hello world!

点滴学习记录 - 图31

第8章 高效的ros集成环境搭建

和大多数开发环境一样,理论上,在 ROS 中,只需要记事本就可以编写基本的 ROS 程序,但是工欲善其事必先利其器,为了提高开发效率,可以先安装集成开发工具和使用方便的工具:终端、IDE….

1、安装终端

1.安装

sudo apt install terminator

2.添加到收藏夹

显示应用程序 —-> 搜索 terminator —-> 右击 选择 添加到收藏夹

3.Terminator 常用快捷键

在一个终端标签内的操作

  1. Alt+Up //移动到上面的终端
  2. Alt+Down //移动到下面的终端
  3. Alt+Left //移动到左边的终端
  4. Alt+Right //移动到右边的终端
  5. Ctrl+Shift+O //水平分割终端
  6. Ctrl+Shift+E //垂直分割终端
  7. Ctrl+Shift+Right //在垂直分割的终端中将分割条向右移动
  8. Ctrl+Shift+Left //在垂直分割的终端中将分割条向左移动
  9. Ctrl+Shift+Up //在水平分割的终端中将分割条向上移动
  10. Ctrl+Shift+Down //在水平分割的终端中将分割条向下移动
  11. Ctrl+Shift+S //隐藏/显示滚动条
  12. Ctrl+Shift+F //搜索
  13. Ctrl+Shift+C //复制选中的内容到剪贴板
  14. Ctrl+Shift+V //粘贴剪贴板的内容到此处
  15. Ctrl+Shift+W //关闭当前终端
  16. Ctrl+Shift+Q //退出当前窗口,当前窗口的所有终端都将被关闭
  17. Ctrl+Shift+X //最大化显示当前终端
  18. Ctrl+Shift+Z //最大化显示当前终端并使字体放大
  19. Ctrl+Shift+N or Ctrl+Tab //移动到下一个终端
  20. Ctrl+Shift+P or Ctrl+Shift+Tab //Crtl+Shift+Tab 移动到之前的一个终端

在不同终端标签之内的工作。

  1. F11 //全屏开关
  2. Ctrl+Shift+T //打开一个新的标签
  3. Ctrl+PageDown //移动到下一个标签
  4. Ctrl+PageUp //移动到上一个标签
  5. Ctrl+Shift+PageDown //将当前标签与其后一个标签交换位置
  6. Ctrl+Shift+PageUp //将当前标签与其前一个标签交换位置
  7. Ctrl+Plus (+) //增大字体
  8. Ctrl+Minus (-) //减小字体
  9. Ctrl+Zero (0) //恢复字体到原始大小
  10. Ctrl+Shift+R //重置终端状态
  11. Ctrl+Shift+G //重置终端状态并clear屏幕
  12. Super+g //绑定所有的终端,以便向一个输入能够输入到所有的终端
  13. Super+Shift+G //解除绑定
  14. Super+t //绑定当前标签的所有终端,向一个终端输入的内容会自动输入到其他终端
  15. Super+Shift+T //解除绑定
  16. Ctrl+Shift+I //打开一个窗口,新窗口与原来的窗口使用同一个进程
  17. Super+i //打开一个新窗口,新窗口与原来的窗口使用不同的进程

2、安装VScode

VSCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。软件跨平台支持 Win、Mac 以及 Linux。 ### 1.下载 vscode 下载:https://code.visualstudio.com/docs?start=true 历史版本下载链接: https://code.visualstudio.com/updates ### 2.vscode 安装与卸载 #### 2.1 安装
方式1:双击安装即可(或右击选择安装) .deb文件可以之间在ubuntu系统上安装

方式2:sudo dpkg -i xxxx.deb

  1. 备注:
点滴学习记录 - 图32

dpkgDebian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。 所有源自”Debian”的Linux的发行版都使用 dpkg,

2.2 卸载

sudo dpkg —purge code

3.vscode 集成 ROS 插件

使用 VScode 开发 ROS 程序,需要先安装一些插件,常用5个插件如下:

点滴学习记录 - 图33

4.vscode 使用_基本配置

(1)创建ros工作空间 (和前面一样)

  1. mkdir -p xxx_ws/src(必须得有 src)
  2. cd xxx_ws
  3. catkin_make

(2)启动vscode

进入ROS工作空间后启动

  1. cd xxx_ws
  2. code .

(3)vscode编译ros(重要!!!!)

设置快捷键 ctrl + shift + B 调用编译,选择:**catkin_make:build**

可以点击配置设置为默认,修改.vscode/tasks.json 文件

  1. {
  2. // 有关 tasks.json 格式的文档,请参见
  3. // https://go.microsoft.com/fwlink/?LinkId=733558
  4. "version": "2.0.0",
  5. "tasks": [
  6. {
  7. "label": "catkin_make:debug", //代表提示的描述性信息
  8. "type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
  9. "command": "catkin_make",//这个是我们需要运行的命令
  10. "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2
  11. "group": {"kind":"build","isDefault":true},
  12. "presentation": {
  13. "reveal": "always"//可选always或者silence,代表是否输出信息
  14. },
  15. "problemMatcher": "$msCompile"
  16. }
  17. ]
  18. }

(4)创建ros功能包

选定 src 右击 —-> create catkin package

设置包名 添加依赖

(5)C++实现

  1. **<font style="color:rgb(51, 51, 51);">在功能包的 src 下新建 cpp 文件</font>**
  1. /*
  2. 控制台输出 HelloVSCode !!!
  3. */
  4. #include "ros/ros.h"
  5. int main(int argc, char *argv[])
  6. {
  7. setlocale(LC_ALL,"");
  8. //执行节点初始化
  9. ros::init(argc,argv,"HelloVSCode");
  10. //输出日志
  11. ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");
  12. return 0;
  13. }

PS1: 如果没有代码提示

修改 .vscode/c_cpp_properties.json 设置 “cppStandard”: “c++17”

PS2: main 函数的参数不可以被 const 修饰

PS3: 当ROS__INFO 终端输出有中文时,会出现乱码

INFO: ????????????????????????

解决办法:在函数开头加入下面代码的任意一句
  1. setlocale(LC_CTYPE, "zh_CN.utf8");
  2. setlocale(LC_ALL, "");

插曲**(代码提示问题:添加“cppstandard”c++17)**

点滴学习记录 - 图34

(6)python实现

在 功能包 下新建 scripts 文件夹,添加 python 文件,并添加可执行权限

  1. #! /usr/bin/env python
  2. """
  3. Python 版本的 HelloVScode,执行在控制台输出 HelloVScode
  4. 实现:
  5. 1.导包
  6. 2.初始化 ROS 节点
  7. 3.日志输出 HelloWorld
  8. """
  9. import rospy # 1.导包
  10. if __name__ == "__main__":
  11. rospy.init_node("Hello_Vscode_p") # 2.初始化 ROS 节点
  12. rospy.loginfo("Hello VScode, 我是 Python ....") #3.日志输出 HelloWorld

犯的错误:

  • 编辑好python文件后,没有执行chmod命令。在vscode里面可以直接右击scripts打开终端。
  • 最可笑的错误:将scripts文件创建在了src下面,导致错误,查了将近1个小时!!!应该与src并列!!!
  • 在ros功能包CMakeList里面配置cpp版本和python版本的指令。直接将原来的批注取消修改替换即可。批注取消:ctrl+/。

(7)配置CMakeLists.txt

C++配置:

  1. add_executable(节点名称
  2. src/C++源文件名.cpp
  3. )
  4. target_link_libraries(节点名称
  5. ${catkin_LIBRARIES}
  6. )

python配置:

  1. catkin_install_python(PROGRAMS scripts/自定义文件名.py
  2. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  3. )

发现的问题:在ubuntu18.04的vscode里面编写的python形式的节点中的汉字不能运行显示。但是同样的操作下,ubuntu20.04里面能够正常显示操作。关于ubuntu18.04里面具体的解决方案还需要进一步探索。
**
**

(8)编译执行

编译: ctrl + shift + B 执行: 和之前一致,只是可以在 VScode 中添加终端,首先执行:source ./devel/setup.bash PS:

如果不编译直接执行 python 文件,会抛出异常。(**还是按照常规套路来吧**

1.第一行解释器声明,可以使用绝对路径定位到 python3 的安装路径 #! /usr/bin/python3,但是不建议 2.建议使用 #!/usr/bin/env python 但是会抛出异常 : /usr/bin/env: “python”: 没有那个文件或目录 3.解决1: #!/usr/bin/env python3 直接使用 python3 但存在问题: 不兼容之前的 ROS 相关 python 实现 4.解决2: 创建一个链接符号到 python 命令:**sudo ln -s /usr/bin/python3 /usr/bin/python** #### 5.其他 IDE ROS 开发可以使用的 IDE 还是比较多的,除了上述的 VScode,还有 Eclipse、QT、PyCharm、Roboware ….,详情可以参考官网介绍:http://wiki.ros.org/IDEs QT Creator Plugin for ROS,参考教程:https://ros-qtc-plugin.readthedocs.io/en/latest/ Roboware 参考:http://www.roboware.me/#/(PS: Roboware 已经停更了,可惜….)

3、launch文件演示(待测试)(已测试)

1.需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

2、实现

  1. 选定功能包右击 —-> 添加 launch 文件夹(xml文件)
  2. 选定 launch 文件夹右击 —-> 添加 launch 文件

点滴学习记录 - 图35

  1. 编辑 launch 文件内容
  1. <launch>
  2. <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
  3. <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
  4. <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
  5. </launch>
  1. - **<font style="color:rgb(51, 51, 51);">node</font>**<font style="color:rgb(51, 51, 51);"> ---> 包含的某个节点</font>
  2. - **<font style="color:rgb(51, 51, 51);">pkg </font>**<font style="color:rgb(51, 51, 51);">-----> 功能包</font>
  3. - **<font style="color:rgb(51, 51, 51);">type</font>**<font style="color:rgb(51, 51, 51);"> ----> 被运行的节点文件</font>
  4. - **<font style="color:rgb(51, 51, 51);">name</font>**<font style="color:rgb(51, 51, 51);"> --> 为节点命名</font>
  5. - **<font style="color:rgb(51, 51, 51);">output</font>**<font style="color:rgb(51, 51, 51);">-> 设置日志的输出目标</font>
  1. 运行 launch 文件 roslaunch 包名 launch文件名
  2. 运行结果: 一次性启动了多个节点

又犯了一个低级错误:launch文件没有建立在工作空间目录下的功能包下!!!建立在了工作空间下!!!浪费了半个多小时!!!

还有ubuntu18.04的vscode编写python节点的时候不能有一点儿的汉语,包括注释中。否则会报错。但是ubuntu20.04却正常显示运行。可能是ubuntu18.04的问题或者是虚拟机的问题。待日后在双系统18.04上实验实验。

ros更改package名字(至少三个地方!!!)

1、修改CMakeLists.txtproject(name)

将name改为new_name

2、修改package.xml

name

3、修改launch文件

这个最容易忽略,launch文件直接复制过来时,package名都是原来的。这里最好ctrl+H,替换所有name为new_name,不会遗漏。

————————————————

版权声明:本文为CSDN博主「冰冻三尺go」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012686154/article/details/88098247

第9章 ROS架构

设计者

维护者

系统结构

自身结构

1.设计者

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem
  • Plumbing: 通讯机制(实现ROS不同节点之间的交互)
  • Tools :工具软件包(ROS中的开发和调试工具)
  • Capabilities :机器人高层技能(ROS中某些功能的集合,比如:导航)
  • Ecosystem:机器人生态系统(跨地域、跨软件与硬件的ROS联盟)

2.维护者

立足维护者的角度: ROS 架构可划分为两大部分
  • main:核心部分,主要由Willow Garage 和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。
  • universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,他们调用下层的库;最上层的代码是应用级的代码,让机器人完成某一确定的功能。

3.系统架构

立足系统架构: ROS 可以划分为三层
  • OS 层,也即经典意义的操作系统ROS 只是元操作系统,需要依托真正意义的操作系统,目前兼容性最好的是 Linux 的 Ubuntu,Mac、Windows 也支持 ROS 的较新版本
  • 中间层是 ROS 封装的关于机器人开发的中间件,比如:
    • 基于 TCP/UDP 继续封装的 TCPROS/UDPROS 通信系统
    • 用于进程间通信 Nodelet,为数据的实时性传输提供支持
    • 另外,还提供了大量的机器人开发实现库,如:数据类型定义坐标变换运动控制….
  • 应用层功能包,以及功能包内的节点,比如: masterturtlesim的控制与运动节点…

4.自身结构

就 ROS 自身实现而言: 也可以划分为三层
  • 文件系统ROS文件系统级指的是在硬盘上面查看的ROS源代码的组织形式
  • 计算图ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程,计算图中的重要概念: 节点(Node)、消息(message)、通信机制主题(topic)、通信机制服务(service)
  • 开源社区ROS的社区级概念是ROS网络上进行代码发布的一种表现形式 - 发行版(Distribution) ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。 - 软件库(Repository) ROS依赖于共享开源代码与软件库的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。 - ROS维基(ROS Wiki) ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及其他行为。网址是http://wiki.ros.org/ - Bug提交系统(Bug Ticket System)如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。 - 邮件列表(Mailing list) ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。网址是http://lists.ros.org/ - ROS问答(ROS Answer)用户可以使用这个资源去提问题。网址是https://answers.ros.org/questions/ - 博客(Blog)你可以看到定期更新、照片和新闻。网址是https://www.ros.org/news/,不过博客系统已经退休,ROS社区取而代之,网址是https://discourse.ros.org/
现在处于学习的初级阶段,只是运行了ROS的内置案例,编写了简单的ROS实现,因此,受限于当前进度,不会详细介绍所有设计架构中的所有模块,当前只介绍文件系统与计算图,下一章会介绍 ROS 的通信机制,这也是ROS的核心实现之一。

1、ROS文件系统 点滴学习记录 - 图36

  1. WorkSpace --- 自定义的工作空间
  2. |--- build:编译空间,用于存放CMakecatkin的缓存信息、配置信息和其他中间文件。
  3. |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
  4. |--- src: 源码
  5. |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
  6. |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
  7. |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
  8. |-- scripts 存储python文件
  9. |-- src 存储C++源文件
  10. |-- include 头文件
  11. |-- msg 消息通信格式文件
  12. |-- srv 服务通信格式文件
  13. |-- action 动作格式文件
  14. |-- launch 可一次性运行多个节点
  15. |-- config 配置信息
  16. |-- CMakeLists.txt: 编译的基本配置
· ROS 文件系统中部分目录和文件前面编程中已经有所涉及,比如功能包的创建、src目录下cpp文件的编写、scripts目录下python文件的编写、launch目录下launch文件的编写,并且也配置了 package.xml 与 CMakeLists.txt 文件。其他目录下的内容后面教程将会再行介绍,当前我们主要介绍: package.xml 与 CMakeLists.txt 这两个配置文件。 ### 1.package.xml 该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。
  1. <?xml version="1.0"?>
  2. <!-- 格式: 以前是 1,推荐使用格式 2 -->
  3. <package format="2">
  4. <!-- 包名 -->
  5. <name>demo01_hello_vscode</name>
  6. <!-- 版本 -->
  7. <version>0.0.0</version>
  8. <!-- 描述信息 -->
  9. <description>The demo01_hello_vscode package</description>
  10. <!-- One maintainer tag required, multiple allowed, one person per tag -->
  11. <!-- Example: -->
  12. <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  13. <!-- 维护人员 -->
  14. <maintainer email="xuzuo@todo.todo">xuzuo</maintainer>
  15. <!-- One license tag required, multiple allowed, one license per tag -->
  16. <!-- Commonly used license strings: -->
  17. <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
  18. <!-- 许可证信息,ROS核心组件默认 BSD -->
  19. <license>TODO</license>
  20. <!-- Url tags are optional, but multiple are allowed, one per tag -->
  21. <!-- Optional attribute type can be: website, bugtracker, or repository -->
  22. <!-- Example: -->
  23. <!-- <url type="website">http://wiki.ros.org/demo01_hello_vscode</url> -->
  24. <!-- Author tags are optional, multiple are allowed, one per tag -->
  25. <!-- Authors do not have to be maintainers, but could be -->
  26. <!-- Example: -->
  27. <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
  28. <!-- The *depend tags are used to specify dependencies -->
  29. <!-- Dependencies can be catkin packages or system dependencies -->
  30. <!-- Examples: -->
  31. <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  32. <!-- <depend>roscpp</depend> -->
  33. <!-- Note that this is equivalent to the following: -->
  34. <!-- <build_depend>roscpp</build_depend> -->
  35. <!-- <exec_depend>roscpp</exec_depend> -->
  36. <!-- Use build_depend for packages you need at compile time: -->
  37. <!-- <build_depend>message_generation</build_depend> -->
  38. <!-- Use build_export_depend for packages you need in order to build against this package: -->
  39. <!-- <build_export_depend>message_generation</build_export_depend> -->
  40. <!-- Use buildtool_depend for build tool packages: -->
  41. <!-- <buildtool_depend>catkin</buildtool_depend> -->
  42. <!-- Use exec_depend for packages you need at runtime: -->
  43. <!-- <exec_depend>message_runtime</exec_depend> -->
  44. <!-- Use test_depend for packages you need only for testing: -->
  45. <!-- <test_depend>gtest</test_depend> -->
  46. <!-- Use doc_depend for packages you need only for building documentation: -->
  47. <!-- <doc_depend>doxygen</doc_depend> -->
  48. <!-- 依赖的构建工具,这是必须的 -->
  49. <buildtool_depend>catkin</buildtool_depend>
  50. <!-- 指定构建此软件包所需的软件包 -->
  51. <build_depend>roscpp</build_depend>
  52. <build_depend>rospy</build_depend>
  53. <build_depend>std_msgs</build_depend>
  54. <!-- 指定根据这个包构建库所需要的包 -->
  55. <build_export_depend>roscpp</build_export_depend>
  56. <build_export_depend>rospy</build_export_depend>
  57. <build_export_depend>std_msgs</build_export_depend>
  58. <!-- 运行该程序包中的代码所需的程序包 -->
  59. <exec_depend>roscpp</exec_depend>
  60. <exec_depend>rospy</exec_depend>
  61. <exec_depend>std_msgs</exec_depend>
  62. <!-- The export tag contains other, unspecified, tags -->
  63. <export>
  64. <!-- Other tools can request additional information be placed here -->
  65. </export>
  66. </package>

2.CMakelists.txt

文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。
  1. cmake_minimum_required(VERSION 3.0.2) #所需 cmake 版本
  2. project(demo01_hello_vscode) #包名称,会被 ${PROJECT_NAME} 的方式调用
  3. ## Compile as C++11, supported in ROS Kinetic and newer
  4. # add_compile_options(-std=c++11)
  5. ## Find catkin macros and libraries
  6. ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
  7. ## is used, also find other catkin packages
  8. #设置构建所需要的软件包
  9. find_package(catkin REQUIRED COMPONENTS
  10. roscpp
  11. rospy
  12. std_msgs
  13. )
  14. ## System dependencies are found with CMake's conventions
  15. #默认添加系统依赖
  16. # find_package(Boost REQUIRED COMPONENTS system)
  17. ## Uncomment this if the package has a setup.py. This macro ensures
  18. ## modules and global scripts declared therein get installed
  19. ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
  20. # 启动 python 模块支持
  21. # catkin_python_setup()
  22. ################################################
  23. ## Declare ROS messages, services and actions ##
  24. ## 声明 ROS 消息、服务、动作... ##
  25. ################################################
  26. ## To declare and build messages, services or actions from within this
  27. ## package, follow these steps:
  28. ## * Let MSG_DEP_SET be the set of packages whose message types you use in
  29. ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
  30. ## * In the file package.xml:
  31. ## * add a build_depend tag for "message_generation"
  32. ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
  33. ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
  34. ## but can be declared for certainty nonetheless:
  35. ## * add a exec_depend tag for "message_runtime"
  36. ## * In this file (CMakeLists.txt):
  37. ## * add "message_generation" and every package in MSG_DEP_SET to
  38. ## find_package(catkin REQUIRED COMPONENTS ...)
  39. ## * add "message_runtime" and every package in MSG_DEP_SET to
  40. ## catkin_package(CATKIN_DEPENDS ...)
  41. ## * uncomment the add_*_files sections below as needed
  42. ## and list every .msg/.srv/.action file to be processed
  43. ## * uncomment the generate_messages entry below
  44. ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
  45. ## Generate messages in the 'msg' folder
  46. # add_message_files(
  47. # FILES
  48. # Message1.msg
  49. # Message2.msg
  50. # )
  51. ## Generate services in the 'srv' folder
  52. # add_service_files(
  53. # FILES
  54. # Service1.srv
  55. # Service2.srv
  56. # )
  57. ## Generate actions in the 'action' folder
  58. # add_action_files(
  59. # FILES
  60. # Action1.action
  61. # Action2.action
  62. # )
  63. ## Generate added messages and services with any dependencies listed here
  64. # 生成消息、服务时的依赖包
  65. # generate_messages(
  66. # DEPENDENCIES
  67. # std_msgs
  68. # )
  69. ################################################
  70. ## Declare ROS dynamic reconfigure parameters ##
  71. ## 声明 ROS 动态参数配置 ##
  72. ################################################
  73. ## To declare and build dynamic reconfigure parameters within this
  74. ## package, follow these steps:
  75. ## * In the file package.xml:
  76. ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
  77. ## * In this file (CMakeLists.txt):
  78. ## * add "dynamic_reconfigure" to
  79. ## find_package(catkin REQUIRED COMPONENTS ...)
  80. ## * uncomment the "generate_dynamic_reconfigure_options" section below
  81. ## and list every .cfg file to be processed
  82. ## Generate dynamic reconfigure parameters in the 'cfg' folder
  83. # generate_dynamic_reconfigure_options(
  84. # cfg/DynReconf1.cfg
  85. # cfg/DynReconf2.cfg
  86. # )
  87. ###################################
  88. ## catkin specific configuration ##
  89. ## catkin 特定配置##
  90. ###################################
  91. ## The catkin_package macro generates cmake config files for your package
  92. ## Declare things to be passed to dependent projects
  93. ## INCLUDE_DIRS: uncomment this if your package contains header files
  94. ## LIBRARIES: libraries you create in this project that dependent projects also need
  95. ## CATKIN_DEPENDS: catkin_packages dependent projects also need
  96. ## DEPENDS: system dependencies of this project that dependent projects also need
  97. # 运行时依赖
  98. catkin_package(
  99. # INCLUDE_DIRS include
  100. # LIBRARIES demo01_hello_vscode
  101. # CATKIN_DEPENDS roscpp rospy std_msgs
  102. # DEPENDS system_lib
  103. )
  104. ###########
  105. ## Build ##
  106. ###########
  107. ## Specify additional locations of header files
  108. ## Your package locations should be listed before other locations
  109. # 添加头文件路径,当前程序包的头文件路径位于其他文件路径之前
  110. include_directories(
  111. # include
  112. ${catkin_INCLUDE_DIRS}
  113. )
  114. ## Declare a C++ library
  115. # 声明 C++ 库
  116. # add_library(${PROJECT_NAME}
  117. # src/${PROJECT_NAME}/demo01_hello_vscode.cpp
  118. # )
  119. ## Add cmake target dependencies of the library
  120. ## as an example, code may need to be generated before libraries
  121. ## either from message generation or dynamic reconfigure
  122. # 添加库的 cmake 目标依赖
  123. # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
  124. ## Declare a C++ executable
  125. ## With catkin_make all packages are built within a single CMake context
  126. ## The recommended prefix ensures that target names across packages don't collide
  127. # 声明 C++ 可执行文件
  128. add_executable(Hello_VSCode src/Hello_VSCode.cpp)
  129. ## Rename C++ executable without prefix
  130. ## The above recommended prefix causes long target names, the following renames the
  131. ## target back to the shorter version for ease of user use
  132. ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
  133. #重命名c++可执行文件
  134. # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
  135. ## Add cmake target dependencies of the executable
  136. ## same as for the library above
  137. #添加可执行文件的 cmake 目标依赖
  138. add_dependencies(Hello_VSCode ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
  139. ## Specify libraries to link a library or executable target against
  140. #指定库、可执行文件的链接库
  141. target_link_libraries(Hello_VSCode
  142. ${catkin_LIBRARIES}
  143. )
  144. #############
  145. ## Install ##
  146. ## 安装 ##
  147. #############
  148. # all install targets should use catkin DESTINATION variables
  149. # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
  150. ## Mark executable scripts (Python etc.) for installation
  151. ## in contrast to setup.py, you can choose the destination
  152. #设置用于安装的可执行脚本
  153. catkin_install_python(PROGRAMS
  154. scripts/Hi.py
  155. DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  156. )
  157. ## Mark executables for installation
  158. ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
  159. # install(TARGETS ${PROJECT_NAME}_node
  160. # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
  161. # )
  162. ## Mark libraries for installation
  163. ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
  164. # install(TARGETS ${PROJECT_NAME}
  165. # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  166. # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  167. # RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
  168. # )
  169. ## Mark cpp header files for installation
  170. # install(DIRECTORY include/${PROJECT_NAME}/
  171. # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
  172. # FILES_MATCHING PATTERN "*.h"
  173. # PATTERN ".svn" EXCLUDE
  174. # )
  175. ## Mark other files for installation (e.g. launch and bag files, etc.)
  176. # install(FILES
  177. # # myfile1
  178. # # myfile2
  179. # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
  180. # )
  181. #############
  182. ## Testing ##
  183. #############
  184. ## Add gtest based cpp test target and link libraries
  185. # catkin_add_gtest(${PROJECT_NAME}-test test/test_demo01_hello_vscode.cpp)
  186. # if(TARGET ${PROJECT_NAME}-test)
  187. # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
  188. # endif()
  189. ## Add folders to be run by python nosetests
  190. # catkin_add_nosetests(test)

2、ROS文件系统相关命令 (Linux相关操作命令的升级)

ROS 的文件系统本质上都还是操作系统文件,我们可以使用Linux命令来操作这些文件,不过,在ROS中为了更好的用户体验,ROS专门提供了一些类似于Linux的命令,这些命令较之于Linux原生命令,更为简介、高效。文件操作,无外乎就是增删改查与执行等操作,接下来,我们就从这五个维度,来介绍ROS文件系统的一些常用命令。 ### 1.增 catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包 (已经用过,不过在vscode里面直接右键建立新的额功能包)

sudo apt install xxx === 安装 ROS功能包

2.删 (purge)

sudo apt purge xxx ==== 删除某个功能包 (purge本来的意思就是清除的意思) ### 3.查 (list/find/search) rospack list === 列出所有功能包 rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径 roscd 包名 === 进入某个功能包 rosls 包名 === 列出某个包下的文件 apt search xxx === 搜索某个功能包

点滴学习记录 - 图37

4.改

rosed 包名 文件名 === 修改功能包文件

需要安装 vim

比如:rosed turtlesim Color.msg

5.执行

5.1roscore

roscore ===** **是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。

roscore 将启动:
  1. - <font style="color:rgb(51, 51, 51);">ros master</font>
  2. - <font style="color:rgb(51, 51, 51);">ros 参数服务器</font>
  3. - <font style="color:rgb(51, 51, 51);">rosout 日志节点</font>
用法:
  1. roscore
或(指定端口号)
  1. roscore -p xxxx

5.2rosrun

rosrun **包名 可执行文件名** === 运行指定的ROS节点

比如:rosrun turtlesim turtlesim_node

5.3roslaunch

roslaunch 包名 launch文件名 === 执行某个包下的 launch 文件

3、ROS计算图

1、计算图简介

· 前面介绍的是ROS文件结构,是磁盘上 ROS 程序的存储结构,是静态的,而 ros 程序运行之后,不同的节点之间是错综复杂的,ROS 中提供了一个实用的工具:rqt_graph。 rqt_graph能够创建一个显示当前系统运行情况的动态图形。ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程。rqt_graph是rqt程序包中的一部分。 ### 2、计算图安装 如果前期把所有的功能包(package)都已经安装完成,则直接在终端窗口中输入 rosrun rqt_graph rqt_graph 如果未安装则在终端(terminal)中输入
  1. $ sudo apt install ros-<distro>-rqt
  2. $ sudo apt install ros-<distro>-rqt-common-plugins
请使用你的ROS版本名称(比如:kinetic、melodic、Noetic等)来替换掉 例如当前版本是 Noetic,就在终端窗口中输入
  1. $ sudo apt install ros-noetic-rqt
  2. $ sudo apt install ros-noetic-rqt-common-plugins

3、计算图演示

接下来以 ROS 内置的小乌龟案例来演示计算图 首先,按照前面所示,运行案例 然后,启动新终端,键入: rqt_graph 或 rosrun rqt_graph rqt_graph,可以看到类似下图的网络拓扑图,该图可以显示不同节点之间的关系。

点滴学习记录 - 图38

本章小结

本章内容主要介绍了ROS的相关概念、设计目标、发展历程等理论知识,安装了 ROS 并搭建了 ROS 的集成开发环境,编写了第一个 ROS小程序,对ROS实现架构也有了宏观的认识。ROS的大门已经敞开,接下来就要步入新的征程了。