前言
本人ROS小白,利用寒假时间学习ROS,在此以笔记的方式记录自己每天的学习过程。争取写满15篇(1/15)。
环境:Ubuntu20.04、ROS1:noetic
环境配置:严格按照下方学习链接的教程配置,基本一次成功。
学习链接:【Autolabor初级教程】ROS机器人入门
对应链接文档:ROS机器人入门课程《ROS理论与实践》
本期关键词:vscode,helloworld(C++/python),launch
VScode
VScode的安装
- 在Ubuntu浏览器里直接搜索VScode,进入官网下载即可,注意要下载Linux版本的。
- 在“下载”文件夹里找到刚刚下载的.deb文件,双击开始安装即可,如果安装失败,提示“密钥无法识别”等信息,可以运行指令
sudo chmod 777 安装包文件名
,然后再重复点击几次安装,直到成功为止。(本人就是这样安装成功的)
初始环境配置
- 安装C++、Python、ROS等插件
- 在创建好的工作空间下打开code,重新配置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"
}
]
}
// You can use the shortcut key "Ctrl+Shift+B" to complie.
- 使用
Ctrl+Shift+B
快捷键编译,成功编译即初始化成功。
Hello World编写
实现流程
- 创建工作空间
- 创建ROS包,并添加依赖(通常为
roscpp rospy std_msgs
) - 编辑源文件(.cpp/.py)
- 编辑配置文件(CMakeLists.txt)
- 编译并执行(
catkin_make
和rosrun
)
工作空间创建
mkdir -p catkin_ws/src
在当前目录创建文件cd catkin_ws
catkin_make
- 用
ls
查看catkin_ws
目录下是否多出了build
和devel
,有就表示创建成功 - 需注意,ROS包的命名规则要求包名不能有大写字母,否则会有以下警告:
WARNING: Package name "HelloWorld_Test" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes.
基于C++
- 在catkin_ws目录下打开vscode,命令:
code .
- 在src目录下创建ROS包和依赖库,在新的src目录下创建.cpp文件,测试代码如下:
#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;
}
- 写好之后修改CMakeLists.txt文件
# 这里的helloworld_test是hello.cpp的映射
add_executable(helloworld_test src/hello.cpp)
target_link_libraries(helloworld_test
${catkin_LIBRARIES}
)
Ctrl+Shift+B
编译- 另外:写C++代码时,VScode的一键代码排版快捷键:
Alt+Shift+Q
(可修改,我在Ubuntu的就是这,在Windows上的是Alt+Shift+F
) - 代码执行:编译好之后,在工作空间目录(
catkin_ws
目录)下执行source ./devel/setup.bash
,然后再运行roscore
,新开终端,运行rosrun helloworld_test(包名) helloworld_test(cpp文件的映射)
- 注意:一定要先执行
roscore
指令再执行source ./devel/setup.bash
,最后再执行rosrun helloworld_test(包名) helloworld_test(cpp文件的映射)
,否则会报错,找不到ROS包
基于Python
- 在ROS包下创建scripts文件夹,在scripts里创建.py文件,测试代码如下所示:
#! /usr/bin/env python
# 第一行是用来声明Python解释器的
import rospy # 1.导包
if __name__ == "__main__":
rospy.init_node("Hello_Vscode_p") # 2.初始化 ROS 节点
rospy.loginfo("Hello VScode, 我是 Python ....") #3.日志输出 HelloWorld
- 添加可执行权限:
chmod +x 文件名.py
- 编辑ROS包下的CMakeLists文件(注意不要编辑到工作空间src下的CMakeLists)
catkin_install_python(PROGRAMS
scripts/hello_p.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
- 配置好以上,编译和执行流程和C++的一样
launch文件
- 示例:pkg、type、name是必有属性;pkg就是包,type就是节点类型,name可以自定义
<launch>
<!--add node-->
<!--turtle GUI-->
<node pkg="turtlesim" type="turtlesim_node" name="gui" />
<node pkg="turtlesim" type="turtle_teleop_key" name="key" />
<node pkg="helloworld" type="hello_c" name="hello" output="screen"/>
</launch>
- 可以理解为将多个节点指令打包输出,使用
roslaunch
运行launch文件。 - 终端指令格式:
roslaunch helloworld(ROS包名) start_turtle.launch(ROS包launch文件夹下的launch文件)