一、终端
在ROS中我们经常需要打开多个终端窗口,为了更加方便简洁的使用我们安装一款终端软件:Terminator.
1.1 安装
sudo apt install terminator
运行结果如下:
关闭终端,使用Ctrl+Alt+t,打开终端,我们可以看到我们的终端已经变成了下面这样:
此时在终端里我们可以右键来对终端窗口进行水平或垂直分割:
1.2 添加新的终端到收藏夹
(1)点击桌面左下方的显示应用程序
(2)搜索Terminator
(3)右键添加到收藏夹
成功添加!
1.3 常用快捷键
Alt+Up | 移动到上面的终端 |
Alt+Down | 移动到下面的终端 |
Alt+Left | 移动到左边的终端 |
Alt+Right | 移动到右边的终端 |
Ctrl+Shift+W | 关闭当前终端 |
Ctrl+Shift+X | 最大化显示当前终端 |
Ctrl+Shift+C | 复制 |
Ctrl+Shift+V | 粘贴 |
二、VSCode
2.1 下载
下载链接:
https://code.visualstudio.com/docs?start=true
进入网站,点击右上角的Download进入如下界面:
点击中间企鹅下面的.deb后面的X64,开始下载
2.2 安装
打开安装包所在的文件夹,右键在终端打开,输入如下命令:
sudo dpkg -i 包名.deb
运行结果如下:
2.3 添加到收藏夹
点击VSCode运行:
出现如下界面,恭喜安装成功!
2.4 插件安装
2.4.1 C/C++
2.4.2 Python
2.4.3 ROS
2.4.4 CMake Tools
2.4.5 Chinese
2.5 使用的基本配置
2.5.1 创建工作空间并编译
nkdir -p 工作空间名称/src
cd 工作空间名称
catkin_make
2.5.2 启动VSCode
确保当前工作目录在所建的工作空间,输入如下命令:
code .
运行结果如下:
2.5.3 VSCode中编译ROS
在VSCode界面按下快捷键Ctrl+Shift+b,弹出如下内容:
点击catkin_make:build后面的齿轮图标配置任务,将会打开如下文件:
这里我们将文件里的全部内容替换为如下内容:
配置完成之后,在以后的工作中按下快捷键Ctrl+Shift+b,将会默认编译整个工作空间 ,如下图所示:
2.5.4 创建ROS功能包
(1)在src文件夹上右键,点击Create Catkin Package
点击之后弹出如下弹窗,这里是输入功能包的包名,然后回车,这里我的功能包命名为hello
回车之后弹出如下弹窗,这里是添加依赖,包括roscpp、rospy、std_msgs,输入之后回车
出现如下结果,恭喜功能包创建完毕!
2.5.5 源文件编写
2.5.5.1 C++
(1)右键src文件夹,新建文件创建c++源文件,这里我命名为hello_c
(2)编写程序
(3)修改配置文件并进行编译
打开功能包目录下面的CMakeLists.txt文件
找到我们第二篇博客讲过的add_executable和target_link_libraries,首先删除他们附近的井号
对于add_executable(${PROJECT_NAME}_node src/hello_node.cpp)
第二个参数src/hello_node.cpp是我们刚刚编写的源文件,我编写的源文件是在src文件夹下的hello_c.cpp文件,因此将第二个参数修改为src/helllo_c.cpp;第一个参数是给执行文件命名(自定义),这里我命名为hello_c,也就是把第一个参数改为hello_c,当执行hello时就会映射到我编写的helloworld_c.cpp文件。
对于target_link_libraries我们只需要改第一个参数,将其改为我们刚刚命名的执行文件
修改后如下:
保存之后,按下快捷键Ctrl+Shift+b进行编译,成功之后出现如下提示:
(4)执行
首先打开一个新的终端,输入roscore,启动ROS核心
再打开一个新的终端,输入:source ./devel/setup.bash,重新配置环境变量
然后输入:rosrun hello hello_c进行执行,这里的hello是我的功能包的包名,hello_c是刚刚修改配置文件时命名的执行文件名称,运行结果如下:
可以看到成功的打印了hello
2.5.5.2 Python
(1)右键工作空间文件夹(我的工作空间名为hello),新建文件夹创建scripts文件夹,然后右键scripts文件夹创建python源文件,这里我命名为hello_p
(2)编辑源文件
(3)添加权限
右键scripts文件夹,在集成终端打开,输入如下命令:
chmod +x *.py
此命令会给所有的python文件添加执行权限,然后在命令行输入ll,可以看到成功添加了执行权限
(4)修改配置文件并进行编译
打开功能包下的CMakeLists.txt文件
找到第162行的catkin_install_python,我们需要更改的是scripts/my_python_script, my_python_script处应该改为我们刚刚编辑的python源文件,更改后如下:
保存之后,按下快捷键Ctrl+Shift+b进行编译,成功之后出现如下提示:
补充:
如果不配置CMakeLists.txt文件,执行python文件会抛出如下异常:
/usr/bin/env :"python": 没有那个文件或目录
原因:当前的noetic使用的是python3
解决方法:
a.直接申明解释器为python3
b.通过软连接将python链接到python3,如下:
sudo ln -s /usr/bin/python3 /usr/bin/python
(5)执行
首先打开一个新的终端,输入roscore,启动ROS核心
再打开一个新的终端,输入:source ./devel/setup.bash,重新配置环境变量;然后输入:rosrun hello hello_p.py进行执行,这里的hello是我的功能包的包名,hello_p.py是刚刚编写的python文件名称,运行结果如下:
可以看到成功的打印了hello!
三、launch文件
一个程序可能需要启动多个节点,如果逐一启动显然效率低下,官方给出的优化策略是使用launch文件,可以一次启动多个节点。
接下来我们用实现以下乌龟运动案例:
3.1 新建launch文件
右键功能包,新建launch文件夹,在launch文件夹下创建launch文件,文件名自定义,这里我命名为turtle:
3.2 编写launch文件
基本的launch文件框架如下:
完整的launch文件如下:
3.3 执行
首先刷新一下环境变量
source ./devel/setup.bash
然后输入如下命令:
roslaunch 功能包名 launch文件名.launch
我的包名是hello,launch文件名是turtle,所以我编写的命令是:
roslaunch hello turtle.launch
运行结果如下: