- http://www.autolabor.com.cn/book/ROSTutorials/">http://www.autolabor.com.cn/book/ROSTutorials/
- 第1章 ubuntu软件设置安装源
- 第2章 ubuntu各个版本与ros版本的对饮关系
- 第3章 ~ / . 的含义
- 第4章 ROS设置环境变量
- 亲测适用于18.04和20.04)">第5章 ROS 初始化失败解决方法(亲测适用于18.04和20.04)
- 第6章 ROS终端基本命令">第6章 ROS终端基本命令
- 第8章 高效的ros集成环境搭建
- 3.vscode 集成 ROS 插件
- 4.vscode 使用_基本配置
- 待测试)(已测试)">3、launch文件演示(
待测试)(已测试) - ros更改package名字(至少三个地方!!!)">ros更改package名字(至少三个地方!!!)
- 第9章 ROS架构
- 2、ROS文件系统相关命令 (Linux相关操作命令的升级)
- 3、ROS计算图
- 本章小结
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 然后,我们也可以直接打开这个.bashrc文件来看有哪些环境变量,运行下面这个命令即可。 gedit ~/.bashrc第5章 ROS 初始化失败解决方法(亲测适用于18.04和20.04)
按照奥特学院的步骤进行操作以后,依旧失败。原因找到了:先删除之前的init文件。按照实现操作后重新进行初始化和更新操作即可。
2.进入”/usr/lib/python2.7/dist-packages/“ 查找rosdep中和raw.githubusercontent.com相关的内容,调用命令:
find . -type f | xargs grep “raw.githubusercontent”
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章 ROS终端基本命令
区分好ros话题、节点、服务的关系。
一、启动命令roscore
你在运行所有ROS程序前首先要运行的命令。
roscore
二、相对包的快捷命令
【注意】:出现没有此包的原因是没有加载环境变量,ROS_PACKAGE_PATH中没有要找的包的环境变量。你要先加载环境变量1.打开roscd
roscd是cd的快捷版,可以直接打开到包的位置。 比如:/home/volume/catkin_ws/src/my_package
roscd [本地包名称[/子目录]]
cd 与 roscd 的区别
# cd
# cd
volume@lenovo:~$ cd ~/catkin_ws/src/my_package
volume@lenovo:~/catkin_ws/src/my_package$
# roscd
volume@lenovo:~$ roscd my_package/ #简单实用,不需要过多的累赘
volume@lenovo:~/catkin_ws/src/my_package$
2.找到包的位置
rospack find [包名称]
**输出包所在的位置(查找路径的时候会很方便)**
volume@lenovo:~$ rospack find my_package
/home/volume/catkin_ws/src/my_package
三、查看命令
1.rosnode
(1)列出当前节点list
其中:
rosnode list
- /rosout:ROS中相当于stdout/stderr。这个节点用于收集和记录节点调试输出信息,所以它总是在运行的。
(2)查看节点信息info
rosnode info [node_name]
例子:
# 例子
volume@lenovo:~$ rosnode info /turtlesim
--------------------------------------------------------------------------------
Node [/turtlesim] # 节点名字
Publications: # 节点发布的话题Publications
* /rosout [rosgraph_msgs/Log]
* /turtle1/color_sensor [turtlesim/Color]
* /turtle1/pose [turtlesim/Pose]
Subscriptions: # 节点订阅的话题Subscriptions
* /turtle1/cmd_vel [geometry_msgs/Twist]
Services: # 节点提供的服务
* /clear
* /kill
* /reset
* /spawn
* /turtle1/set_pen
* /turtle1/teleport_absolute
* /turtle1/teleport_relative
* /turtlesim/get_loggers
* /turtlesim/set_logger_level
contacting node http://lenovo:35497/ ...
Pid: 4365 # 节点的Pid
Connections: # 计算图中链接的节点
* topic: /rosout
* to: /rosout
* direction: outbound
* transport: TCPROS
* topic: /turtle1/cmd_vel
* to: /teleop_turtle (http://lenovo:35617/)
* direction: inbound
* transport: TCPROS
————————————————
版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552
(3)ping测试节点ping
rosnode ping [节点名称]
2.rostopic
(1)列出所有的话题list
不分类:
rostopic list
按照订阅和发布分类:
rostopic list -v
(2)查看话题信息info
例如:
rostopic info [topic_name话题名字]
(3)查看话题类型type
rostopic type topic_name
(4)监听话题消息echo
rostopic echo [topic_name]
这里显示了小海龟的线速度和角速度。
(5)发布消息pub (暂时失败)
失败现象:发布消息的格式有问题!!!
用来在cmd中调试。- 单次执行:发布一次
rostopic pub topic_name topic_type
- 连续执行:一秒中发布rate_times次
rostopic pub -r rate_times topic_name topic_type
例子:
# 消息内容打个tab就能自动补全,然后修改其内容成我们想要的
volume@lenovo:~$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
publishing and latching message. Press ctrl-C to terminate
————————————————
版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552
volume@lenovo:~$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
————————————————
版权声明:本文为CSDN博主「sandalphon4869」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sandalphon4869/article/details/103927552
3.rosservice ros服务
(1)列出服务list
rosservice list
(2)查看服务信息info
rosservice info service_name
(3)调用服务call (暂时失败)
rosservice call service_name
失败原因:error!!!!
四、运行命令
1.rosrun
(1)基本用法
rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。 用法:
rosrun [package_name] [node_name]
比如运动小海龟的节点:现在我们可以运行turtlesim包中的 turtlesim_node
rosrun turtlesim turtlesim_node
(2)重命名节点
用法:
例如: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的对比如下:
创建后,工作空间目录下只有一个src文件夹
进入到该空间对该空间进行编译: cd [] catkin_make, 编译后多出了两个文件夹devel和build文件夹
(1)文件系统级理解ROS架构 工作空间架构,一目了然
src源文件空间:这个文件夹放置各个功能包和一个用于这些功能包的CMake配置文件CMakeLists.txt。这里做一下说明,由于ROS中的源码采用catkin工具进行编译,而catkin工具又是基于cmake技术的,所以我们会在src源文件空间和各个功能包中都会见到一个文件CMakeLists.txt,这个文件就是起**编译配置**的作用。
build**编译空间**:这个文件夹放置CMake和catkin编译功能包时产生的缓存、配置、中间文件等。
devel开发空间:这个文件夹放置编译好的可执行程序,这些可执行程序是不需要安装就能直接运行的。一旦功能包源码编译和测试通过后,可以将这些编译好的可执行文件直接导出与其他开发人员分享。
到此第一步结束。
2、进入src创建ros功能包并且添加依赖
ros功能包是ros中软件组织的基本形式,一个功能包具有用于创建ROS程序的最小结构和最少内容,他可以包含ROS运行的进程(节点)、配置文件等。
功能包中主要包含的配置文件如上图所示。
CMakeLists.txt功能包**配置**文件:用于这个功能包cmake编译时的配置文件。
package.xml功能包清单文件**:用xml的标签格式标记这个功能包的各类相关信息,比如包的名称、依赖关系等。主要作用是为了更容易的安装和分发功能包。**
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:用于查看功能包的依赖关系图。 关于这些工具命令的具体使用方法,会在后面的章节中结合实例进行具体的讲解。这里只是先介绍给大家,让大家有个概念上的了解,感兴趣的朋友也可以自己上网了解这些命令的具体用法。操作步骤:
cd src /进入到工作空间的功能包节点源文件存放目录
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs /创建功能包,添加依赖项
上述命令会在工作空间下生成一个功能包,该功能包依赖于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目录编辑源文件 (区别)
cd 自定义的功能包的src目录下
gedit helloworld.cpp /没有的话会自动创建
C++代码实现(文件名自定义)
#include "ros/ros.h"
int main(int argc,char *argv[])
{
//执行ros节点初始化
ros::init(argc,argv,"hello");
//创建ros节点句柄 (非必须)
ros::NodeHandle n;
//控制台输出hello world
ROS_INFO ("hello world!")
return 0;
}
(2)编辑ros功能包下的Cmakelist.txt文件 (区别)
add_executable(上面步骤的源文件名 src/上面步骤的源文件名.cpp)
target_link_libraries(上面步骤的源文件名${catkin_LIBRARIES})
纠正:target_link_libraries link和libraries的l应该是小写!!!!!!(因为这个问题耽误了至少30min!!)
(3)进入工作空间目录并且编译
cd 自定义空间名称
catkin_make
生成 build devel……编译后devel文件夹中多了一个share文件夹
(4)执行
先启动命令1
roscore
再启动命令2
cd 工作空间
source ./devel/setup.bash
rosrun 功能包名 C++节点(现在看来c++节点的名字就是该cpp程序的名字)
命令行输出:hello world!
注意:source ~/工作空间/devel/setup.bash 可以直接添加进 .bashrc文件,使用上更加方便
添加方式一:直接使用gedit或者vi编辑 .bashrc文件,最后面添加该内容(自己采用的这种方式)**见最后一行。**
添加后,以后可以忽略这一步。直接进入到工作空间,运行rosrun命令。
添加方式二:echo “source ~/工作空间/devel/setup.bash”>>~/.bashrc
》》》》》疑问:cpp文件中,这个节点初始化的名字比如“hello”是什么,有什么用?????(关键词:计算图中)
解答:网上说这确实是节点的名称,这一句是初始化ros节点并指明节点的名称,这里给节点取名为hello_node,一旦程序运行后就可以在ros的计算图中被注册为hello_node名称标识的节点。
3.2 Helloworld (python版本)
(1)进入ros包添加scripts目录并编辑python文件 (区别)
cd ros包
mkdir scripts
创建后功能包多了一个scripts文件,大概就是为了不与cpp文件混淆在一起吧
新建python文件:(文件名自定义)
gedit XXXX.py
#!/usr/bin/env python
"""
python版 helloworld
"""
import rospy
if __name__ ="__main__":
rospy.init_node("hello")
rospy.loginfo("hello world")
注:如何正确理解 if name =”main“: (做验证码识别)
name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。name 是python的内置变量,当执行当下程序时,该变量就是main, if name =”main“ 就是ture.
https://www.zhihu.com/question/49136398这个链接通过举例子讲解的很形象。
(2)为python文件添加可执行权限 (区别)
chmod +x 自定义的文件名.py
注:chmod +x : 意思就是给执行权限
链接出处:https://blog.csdn.net/u012106306/article/details/80436911
执行后表面上看起来没什么效果。
(3)编辑ROS功能包下的CmakeList.txt文件 (区别)
catkin_install_python(PROGRAMS scripts/自定义文件名.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
(4)进入工作空间目录并编译(与c++版本的一致)
cd 自定义空间名称
catkin_make
(5)进入工作空间目录并执行 (与c++基本一致)
先启动命令1
roscore
再启动命令2
cd 工作空间
source ./devel/setup.bash
rosrun 包名 自定义文件名.py
在c++版本执行rosrun的时候执行功能包下的文件名无需添加后缀.cpp。但是python文件需要添加文件后缀.py。
命令行输出:hello world!
第8章 高效的ros集成环境搭建
和大多数开发环境一样,理论上,在 ROS 中,只需要记事本就可以编写基本的 ROS 程序,但是工欲善其事必先利其器,为了提高开发效率,可以先安装集成开发工具和使用方便的工具:终端、IDE….1、安装终端
1.安装
sudo apt install terminator
2.添加到收藏夹
显示应用程序 —-> 搜索 terminator —-> 右击 选择 添加到收藏夹3.Terminator 常用快捷键
在一个终端标签内的操作
Alt+Up //移动到上面的终端
Alt+Down //移动到下面的终端
Alt+Left //移动到左边的终端
Alt+Right //移动到右边的终端
Ctrl+Shift+O //水平分割终端
Ctrl+Shift+E //垂直分割终端
Ctrl+Shift+Right //在垂直分割的终端中将分割条向右移动
Ctrl+Shift+Left //在垂直分割的终端中将分割条向左移动
Ctrl+Shift+Up //在水平分割的终端中将分割条向上移动
Ctrl+Shift+Down //在水平分割的终端中将分割条向下移动
Ctrl+Shift+S //隐藏/显示滚动条
Ctrl+Shift+F //搜索
Ctrl+Shift+C //复制选中的内容到剪贴板
Ctrl+Shift+V //粘贴剪贴板的内容到此处
Ctrl+Shift+W //关闭当前终端
Ctrl+Shift+Q //退出当前窗口,当前窗口的所有终端都将被关闭
Ctrl+Shift+X //最大化显示当前终端
Ctrl+Shift+Z //最大化显示当前终端并使字体放大
Ctrl+Shift+N or Ctrl+Tab //移动到下一个终端
Ctrl+Shift+P or Ctrl+Shift+Tab //Crtl+Shift+Tab 移动到之前的一个终端
在不同终端标签之内的工作。
F11 //全屏开关
Ctrl+Shift+T //打开一个新的标签
Ctrl+PageDown //移动到下一个标签
Ctrl+PageUp //移动到上一个标签
Ctrl+Shift+PageDown //将当前标签与其后一个标签交换位置
Ctrl+Shift+PageUp //将当前标签与其前一个标签交换位置
Ctrl+Plus (+) //增大字体
Ctrl+Minus (-) //减小字体
Ctrl+Zero (0) //恢复字体到原始大小
Ctrl+Shift+R //重置终端状态
Ctrl+Shift+G //重置终端状态并clear屏幕
Super+g //绑定所有的终端,以便向一个输入能够输入到所有的终端
Super+Shift+G //解除绑定
Super+t //绑定当前标签的所有终端,向一个终端输入的内容会自动输入到其他终端
Super+Shift+T //解除绑定
Ctrl+Shift+I //打开一个窗口,新窗口与原来的窗口使用同一个进程
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
备注:
dpkg 是Debian package的简写,为”Debian“ 操作系统 专门开发的套件管理系统,用于软件的安装,更新和移除。 所有源自”Debian”的Linux的发行版都使用 dpkg,
2.2 卸载
sudo dpkg —purge code
3.vscode 集成 ROS 插件
使用 VScode 开发 ROS 程序,需要先安装一些插件,常用5个插件如下:4.vscode 使用_基本配置
(1)创建ros工作空间 (和前面一样)
mkdir -p xxx_ws/src(必须得有 src)
cd xxx_ws
catkin_make
(2)启动vscode
进入ROS工作空间后启动
cd xxx_ws
code .
(3)vscode编译ros(重要!!!!)
设置快捷键 ctrl + shift + B 调用编译,选择:**catkin_make:build**
可以点击配置设置为默认,修改.vscode/tasks.json 文件
{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
(4)创建ros功能包
选定 src 右击 —-> create catkin package设置包名 添加依赖
(5)C++实现
**<font style="color:rgb(51, 51, 51);">在功能包的 src 下新建 cpp 文件</font>**
/*
控制台输出 HelloVSCode !!!
*/
#include "ros/ros.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
//执行节点初始化
ros::init(argc,argv,"HelloVSCode");
//输出日志
ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");
return 0;
}
PS1: 如果没有代码提示
修改 .vscode/c_cpp_properties.json 设置 “cppStandard”: “c++17”PS2: main 函数的参数不可以被 const 修饰
PS3: 当ROS__INFO 终端输出有中文时,会出现乱码
INFO: ????????????????????????
解决办法:在函数开头加入下面代码的任意一句
setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");
插曲**(代码提示问题:添加“cppstandard”c++17)**
(6)python实现
在 功能包 下新建 scripts 文件夹,添加 python 文件,并添加可执行权限
#! /usr/bin/env python
"""
Python 版本的 HelloVScode,执行在控制台输出 HelloVScode
实现:
1.导包
2.初始化 ROS 节点
3.日志输出 HelloWorld
"""
import rospy # 1.导包
if __name__ == "__main__":
rospy.init_node("Hello_Vscode_p") # 2.初始化 ROS 节点
rospy.loginfo("Hello VScode, 我是 Python ....") #3.日志输出 HelloWorld
犯的错误:
- 编辑好python文件后,没有执行chmod命令。在vscode里面可以直接右击scripts打开终端。
- 最可笑的错误:将scripts文件创建在了src下面,导致错误,查了将近1个小时!!!应该与src并列!!!
- 在ros功能包CMakeList里面配置cpp版本和python版本的指令。直接将原来的批注取消修改替换即可。批注取消:ctrl+/。
(7)配置CMakeLists.txt
C++配置:
add_executable(节点名称
src/C++源文件名.cpp
)
target_link_libraries(节点名称
${catkin_LIBRARIES}
)
python配置:
catkin_install_python(PROGRAMS scripts/自定义文件名.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
发现的问题:在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、实现
- 选定功能包右击 —-> 添加 launch 文件夹(xml文件)
- 选定 launch 文件夹右击 —-> 添加 launch 文件
- 编辑 launch 文件内容
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
- **<font style="color:rgb(51, 51, 51);">node</font>**<font style="color:rgb(51, 51, 51);"> ---> 包含的某个节点</font>
- **<font style="color:rgb(51, 51, 51);">pkg </font>**<font style="color:rgb(51, 51, 51);">-----> 功能包</font>
- **<font style="color:rgb(51, 51, 51);">type</font>**<font style="color:rgb(51, 51, 51);"> ----> 被运行的节点文件</font>
- **<font style="color:rgb(51, 51, 51);">name</font>**<font style="color:rgb(51, 51, 51);"> --> 为节点命名</font>
- **<font style="color:rgb(51, 51, 51);">output</font>**<font style="color:rgb(51, 51, 51);">-> 设置日志的输出目标</font>
- 运行 launch 文件 roslaunch 包名 launch文件名
- 运行结果: 一次性启动了多个节点
又犯了一个低级错误:launch文件没有建立在工作空间目录下的功能包下!!!建立在了工作空间下!!!浪费了半个多小时!!!
还有ubuntu18.04的vscode编写python节点的时候不能有一点儿的汉语,包括注释中。否则会报错。但是ubuntu20.04却正常显示运行。可能是ubuntu18.04的问题或者是虚拟机的问题。待日后在双系统18.04上实验实验。
ros更改package名字(至少三个地方!!!)
1、修改CMakeLists.txtproject(name)
将name改为new_name
2、修改package.xml
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,为数据的实时性传输提供支持
- 另外,还提供了大量的机器人开发实现库,如:数据类型定义、坐标变换、运动控制….
- 应用层功能包,以及功能包内的节点,比如: master、turtlesim的控制与运动节点…
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/。
1、ROS文件系统
· ROS 文件系统中部分目录和文件前面编程中已经有所涉及,比如功能包的创建、src目录下cpp文件的编写、scripts目录下python文件的编写、launch目录下launch文件的编写,并且也配置了 package.xml 与 CMakeLists.txt 文件。其他目录下的内容后面教程将会再行介绍,当前我们主要介绍: package.xml 与 CMakeLists.txt 这两个配置文件。 ### 1.package.xml 该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的manifest.xml文件。
WorkSpace --- 自定义的工作空间
|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
|--- src: 源码
|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
|-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
|-- scripts 存储python文件
|-- src 存储C++源文件
|-- include 头文件
|-- msg 消息通信格式文件
|-- srv 服务通信格式文件
|-- action 动作格式文件
|-- launch 可一次性运行多个节点
|-- config 配置信息
|-- CMakeLists.txt: 编译的基本配置
<?xml version="1.0"?>
<!-- 格式: 以前是 1,推荐使用格式 2 -->
<package format="2">
<!-- 包名 -->
<name>demo01_hello_vscode</name>
<!-- 版本 -->
<version>0.0.0</version>
<!-- 描述信息 -->
<description>The demo01_hello_vscode package</description>
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<!-- 维护人员 -->
<maintainer email="xuzuo@todo.todo">xuzuo</maintainer>
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<!-- 许可证信息,ROS核心组件默认 BSD -->
<license>TODO</license>
<!-- Url tags are optional, but multiple are allowed, one per tag -->
<!-- Optional attribute type can be: website, bugtracker, or repository -->
<!-- Example: -->
<!-- <url type="website">http://wiki.ros.org/demo01_hello_vscode</url> -->
<!-- Author tags are optional, multiple are allowed, one per tag -->
<!-- Authors do not have to be maintainers, but could be -->
<!-- Example: -->
<!-- <author email="jane.doe@example.com">Jane Doe</author> -->
<!-- The *depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
<!-- <depend>roscpp</depend> -->
<!-- Note that this is equivalent to the following: -->
<!-- <build_depend>roscpp</build_depend> -->
<!-- <exec_depend>roscpp</exec_depend> -->
<!-- Use build_depend for packages you need at compile time: -->
<!-- <build_depend>message_generation</build_depend> -->
<!-- Use build_export_depend for packages you need in order to build against this package: -->
<!-- <build_export_depend>message_generation</build_export_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use exec_depend for packages you need at runtime: -->
<!-- <exec_depend>message_runtime</exec_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!-- <test_depend>gtest</test_depend> -->
<!-- Use doc_depend for packages you need only for building documentation: -->
<!-- <doc_depend>doxygen</doc_depend> -->
<!-- 依赖的构建工具,这是必须的 -->
<buildtool_depend>catkin</buildtool_depend>
<!-- 指定构建此软件包所需的软件包 -->
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<!-- 指定根据这个包构建库所需要的包 -->
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<!-- 运行该程序包中的代码所需的程序包 -->
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
<!-- Other tools can request additional information be placed here -->
</export>
</package>
2.CMakelists.txt
文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。
cmake_minimum_required(VERSION 3.0.2) #所需 cmake 版本
project(demo01_hello_vscode) #包名称,会被 ${PROJECT_NAME} 的方式调用
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
#设置构建所需要的软件包
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
## System dependencies are found with CMake's conventions
#默认添加系统依赖
# find_package(Boost REQUIRED COMPONENTS system)
## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# 启动 python 模块支持
# catkin_python_setup()
################################################
## Declare ROS messages, services and actions ##
## 声明 ROS 消息、服务、动作... ##
################################################
## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
## * add a build_depend tag for "message_generation"
## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
## but can be declared for certainty nonetheless:
## * add a exec_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
## * add "message_generation" and every package in MSG_DEP_SET to
## find_package(catkin REQUIRED COMPONENTS ...)
## * add "message_runtime" and every package in MSG_DEP_SET to
## catkin_package(CATKIN_DEPENDS ...)
## * uncomment the add_*_files sections below as needed
## and list every .msg/.srv/.action file to be processed
## * uncomment the generate_messages entry below
## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
## Generate messages in the 'msg' folder
# add_message_files(
# FILES
# Message1.msg
# Message2.msg
# )
## Generate services in the 'srv' folder
# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )
## Generate actions in the 'action' folder
# add_action_files(
# FILES
# Action1.action
# Action2.action
# )
## Generate added messages and services with any dependencies listed here
# 生成消息、服务时的依赖包
# generate_messages(
# DEPENDENCIES
# std_msgs
# )
################################################
## Declare ROS dynamic reconfigure parameters ##
## 声明 ROS 动态参数配置 ##
################################################
## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
## * add "dynamic_reconfigure" to
## find_package(catkin REQUIRED COMPONENTS ...)
## * uncomment the "generate_dynamic_reconfigure_options" section below
## and list every .cfg file to be processed
## Generate dynamic reconfigure parameters in the 'cfg' folder
# generate_dynamic_reconfigure_options(
# cfg/DynReconf1.cfg
# cfg/DynReconf2.cfg
# )
###################################
## catkin specific configuration ##
## catkin 特定配置##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
# 运行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo01_hello_vscode
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
)
###########
## Build ##
###########
## Specify additional locations of header files
## Your package locations should be listed before other locations
# 添加头文件路径,当前程序包的头文件路径位于其他文件路径之前
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
## Declare a C++ library
# 声明 C++ 库
# add_library(${PROJECT_NAME}
# src/${PROJECT_NAME}/demo01_hello_vscode.cpp
# )
## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# 添加库的 cmake 目标依赖
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# 声明 C++ 可执行文件
add_executable(Hello_VSCode src/Hello_VSCode.cpp)
## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
#重命名c++可执行文件
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
## Add cmake target dependencies of the executable
## same as for the library above
#添加可执行文件的 cmake 目标依赖
add_dependencies(Hello_VSCode ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
## Specify libraries to link a library or executable target against
#指定库、可执行文件的链接库
target_link_libraries(Hello_VSCode
${catkin_LIBRARIES}
)
#############
## Install ##
## 安装 ##
#############
# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
#设置用于安装的可执行脚本
catkin_install_python(PROGRAMS
scripts/Hi.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
## Mark executables for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
# install(TARGETS ${PROJECT_NAME}_node
# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )
## Mark libraries for installation
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
# )
## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
# FILES_MATCHING PATTERN "*.h"
# PATTERN ".svn" EXCLUDE
# )
## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
# # myfile1
# # myfile2
# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )
#############
## Testing ##
#############
## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_demo01_hello_vscode.cpp)
# if(TARGET ${PROJECT_NAME}-test)
# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()
## Add folders to be run by python nosetests
# 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 === 搜索某个功能包4.改
rosed 包名 文件名 === 修改功能包文件
需要安装 vim
比如:rosed turtlesim Color.msg
5.执行
5.1roscore
roscore ===** **是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
roscore 将启动:用法:
- <font style="color:rgb(51, 51, 51);">ros master</font>
- <font style="color:rgb(51, 51, 51);">ros 参数服务器</font>
- <font style="color:rgb(51, 51, 51);">rosout 日志节点</font>
或(指定端口号)
roscore
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)中输入请使用你的ROS版本名称(比如:kinetic、melodic、Noetic等)来替换掉
$ sudo apt install ros-<distro>-rqt
$ sudo apt install ros-<distro>-rqt-common-plugins
$ sudo apt install ros-noetic-rqt
$ sudo apt install ros-noetic-rqt-common-plugins