速刷一遍ROS
通信(核心)+工具(可以仿真)+功能(调参与优化算法)+生态
松耦合:跟传感器原理无关,只关注输出格式
初始化遇到的问题:
- 用搜狗输入法就行,别的配置太恶心
环境搭建完成,可以跑小乌龟
ROS涉及语言为C++和python,目前选择python
- 先创建一个工作空间
- 创建一个功能包
Catkin_cre会自动补齐后面 helloworld是文件名 roscpp rospy std_msgs三个包加入
- 编辑源文件
进入helloworld,与src平级建一个文件夹scripts
为python文件添加可执行权限
- 编辑配置文件
- 编译并执行
在工作空间打开终端,调用catkin_make
执行的话新开一个命令行启动ros核心
再回刚才界面,调用setup.bash刷新下环境变量
上面是记事本编程,还是安装下IDE
Vscode安装完毕,没有选择python路径,usr/bin/python3
VS使用方法
在工作区目录输入code .就可以打开VSCODE
=
CTRL+SHIFT+B修改catkin_make:build
{
// 有关 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"
}
]
}
配置以后按CTRL+SHIFT+B默认对整个空间进行编译
选择SRC右键Create Catkin Package
Package name:hello_vscode
依赖:rospy roscpp std_msgs
编写代码在src/hellovscode2下新建scripts文件夹
之后要给权限,scripts文件夹在终端中打开
Chmod +x *.py 给所有.py文件添加执行权限
之后修改配置文件CMake 162行CTRL+/解注释 改文件名(必须)
如果不搞解决方法:1.在解释器声明时写python3(不建议) 2.通过软链接将python链接到python3:直接在终端sudo ln -s /usr/bin/python3 /usr/bin/python
再开个终端启动roscore
CD到项目目录
Launch:
问题引出:像之前乌龟的例子,需要启动多个节点,一个一个很麻烦,官方的解决方案是使用launch文件
实现
在项目目录下新建launch文件夹以及.launch后缀的文件
pkg:包名 type:被运行的节点文件 name:为节点命名
运行这个就可以出来乌龟
这样可以执行自定义函数,如果终端要输出文本的话需要设置下output参数=screen
ROS文件系统
catkin:就是之前的demo01_ws
build:编译空间,存放缓存
devel:开发空间,存放编译后生成的目标文件
package包就是功能包,比如之前的hello
scripts存储python文件
launch文件存储.launch
package.xml
重点
CMakeLists.txt
目前要改的地方是162行使用scripts目录下的.py文件
ROS文件系统命令,较之Linux文件操作更加简洁高效
roscore:必须先启动他才能使ROS节点进行通信,它将启动ros master,ros参数服务器,rosout日志节点
rosrun包名 可执行文件名(运行指定的ROS节点)
roslaunch包名 launch文件名(执行某个包下的launch文件)
catkin_create_pkg 自定义包名 依赖包
sudo apt install xxx 安装xxx包
sudo apt purge xxx 卸载xxx包
rospack list 列出所有的功能包
rospack find 查找当前是否包含某个功能包,如果存在返回安装路径
rosls 包名 列出包名下的文件
roscd 进入某个功能包
apt serach ros-noetic-* | grep-i gamapping 搜索有没有当前版本适配的这个包
rosed 包名 文件名 直接进入功能包修改文件(终端中打q退出)
这是ROS的文件结构,他是基于存储的,即是静态的,但执行开程序之后,不同节点的关系是错综复杂的,使用rqt_graph辅助分析,他能够创建一个显示当前系统运行状态的动态的图形,可以表现不同节点的数据交换过程
调用时使用ros rqt_graph rqt_graph 前面一个是包名 后面一个是节点名
首先还是启动乌龟程序