ROS学习笔记-安装、环境搭建、初步体验与基本包命令

本文详细介绍了在Ubuntu上安装ROS2的过程,包括解决安装过程中遇到的问题,如设置源和rosdep更新,以及如何使用Autolabor和鱼香ROS的一键安装。随后介绍了ROS2的基本操作,如启动节点、图形化界面和HelloWorld示例,以及ROS的工作空间结构和IDE配置。
摘要由CSDN通过智能技术生成

前言

本文是一篇附属文章,总文章:ROS学习笔记总纲目_Jenlibein的博客-CSDN博客



正文

 1.简要说明

本次学习主要跟进Autolabor的教程进行学习

(1)Autolabor:

        b站视频:【Autolabor初级教程】ROS机器人入门_哔哩哔哩_bilibili

        课程文档:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

(2)鱼香ROS:

        b站视频:【鱼香ROS】动手学ROS2|ROS2基础入门到实践教程|小鱼带你手把手学习ROS2_哔哩哔哩_bilibili        CSDN:【ROS2机器人入门到实战】4.ROS2初体验_鱼香ROS的博客-CSDN博客

2.ROS2安装

2.1问题解决

 一开始我用原本已经安装好的Ubuntu 22.04.3系统去跟进Autolabor视频教程的安装步骤。但是到了设置安装源那一步,发现总是出现提示:无法安全地用该源进行更新,所以默认禁用该源这让人十分头疼,于是我跑到网上找解决方法,却弹出各种方案。

于是我想是不是系统的问题,于是我下载了Autolabor提供的系统版本(20.04):ubuntu-releases-20.04安装包下载_开源镜像站-阿里云

果然接下来比较顺利的完成了。

但是到了初始化rosdep时候又弹出了ERROR,这次Autolabor有给出解决方案,具体查看该页后记,即第6点:1.2.4 安装 ROS · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

但是个人认为这个方法又是太麻烦,我又到网上看了看,发现一个很好的方法:ROS rosdep update更新失败(简单解决)_rosdep update reading in sources list data from /e-CSDN博客

最后我发现一个最好的安装方法,就是鱼香ROS中提供的【一键安装】。相信在经历之前这么多的安装事故之后,发现【一键安装】是多么令人向往。

我们在Ubuntu中打开终端,输入以下代码:

sudo wget http://fishros.com/install -O fishros && . fishros

然后选择安装ROS2桌面版即可,我这里选择与Autolabor安装一样Ubuntu 20.04.6的ROS2 noetic版

详细安装教程参考鱼香ROS:【ROS2机器人入门到实战】3.动手安装ROS2_ros2安装-CSDN博客

注意!

Ubuntu22.04以上只支持安装ROS2

我们下载ROS1,可用一键安装里面Melodic的ROS1版本

2.2测试-ROS体验

首先启动一个终端,输入

roscore

2.2.1涂鸦乌龟

打开新的终端Ctrl+Alt+T,输入下面的指令,启动模拟器

rosrun turtlesim turtlesim_node

启动一个新的终端Ctrl+Alt+T,输入以下指令,启动遥控器

rosrun turtlesim turtle_teleop_key

此时按上下左右就可以控制乌龟了

2.2.2RQT可视化

保持前面的海龟运行状态,打开新的终端,输入rqt。

进入界面后选择以下选项

选择完成后就可以看到以上两个节点之间的数据关系了。

2.2.3拓展:信息发送与接收

此处似乎是因为ROS版本不同导致的无法运行

3.HelloWorld实现

3.1创建工作空间并初始化

1.创建文件夹

首先进入用户目录

cd ~

接着输入下述命令(首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。我的自定义名称为Demo01_ws。)

mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

2进入 src 创建 ros 包并添加依赖

以下命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。此处自定义ROS包名为helloworld

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

3.2实现helloworld

进入到自定义ROS包名的文件夹中

创建cpp文件(也可以用python,则创建py文件)

这里用vim打开,当然你也可以用gedit或者vscode来写

cd helloworld
vim helloworld.cpp

粘贴以下之后打上 ( :wq )退出

#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;
}

编辑 ros 包下的 Cmakelist.txt文件(去掉原来文件下的某行#号并修改部分内容,可以用搜索功能)

add_executable(步骤3的源文件名   #此处不一定要源文件名,可以自行修改,不过用源文件名方便记忆
  src/步骤3的源文件名.cpp
)
target_link_libraries(步骤3的源文件名  #此处与第一行定义的名称一致
  ${catkin_LIBRARIES}
)

我的使用例:
add_executable(haha   #这里我就没用源文件名,随便定义名字为haha,注意不能和包名相同
  src/helloworld.cpp
)
target_link_libraries(haha
  ${catkin_LIBRARIES}
)

进入工作空间目录并编译

cd ~/Demo01_ws  #此处为你自定义的包名
catkin_make

接下来就可以执行了

先进入新的终端页面输入roscore
然后再进入另一个新的终端输入

cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点

例:
cd ~/Demo01_ws
source ./devel/setup.bash
rosrun helloworld haha

命令行输出: HelloWorld!

source的作用

是将环境变量刷新到当前的终端窗口上,没有刷新则不能执行功能包的相关节点。

若想实现所有终端窗口都能执行功能包的相关节点则要将source ~/工作空间/devel/setup.bash添加进.bashrc文件,使用上更方便。

添加方式1: 直接使用 gedit 或 vi 编辑 .bashrc 文件,最后添加该内容

添加方式2:echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

4.集成开发环境

4.1 安装终端

在 ROS 中,需要频繁的使用到终端,且可能需要同时开启多个窗口

这里有一款较为好用的终端:Terminator。

sudo apt install terminator

(1)快捷键

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 移动到之前的一个终端

 

(2)有关各个标签之间的操作

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                               //打开一个新窗口,新窗口与原来的窗口使用不同的进程

4.2 vscode配置

4.2.1安装

进入vscode官网,下载Linux的.deb版并安装:Documentation for Visual Studio Code

需要安装的vscode插件:(1)C++  (2)CMake Tools  (3)Python  (4)ROS

4.2.2基本配置

创建ROS工作空间

mkdir -p xxx_ws/src(必须得有 src)
cd xxx_ws
catkin_make

启动vscode

cd xxx_ws
code .                 #在该目录下启动vscode

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"
        }
    ]
}

创建 ROS 功能包:选定 src 右击 ---> create catkin package

设置包名(例:hello_vscode)添加依赖(roscpp rospy std_msgs)

在功能包的 src 下新建 cpp 文件

/*
    控制台输出 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 终端输出有中文时,会出现乱码

解决办法:在函数开头加入下面代码的任意一句

setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");

配置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}
)

编译执行

编译: ctrl + shift + B

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

4.3 launch文件展示

4.3.1需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例。如何一次性启动所有节点?官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

4.3.2实现

1 选定功能包右击 ---> 添加 launch 文件夹

2 选定 launch 文件夹右击 ---> 添加 launch 文件

3 编辑 launch 文件内容

<launch>
    <!-- 添加被执行的节点 -->
    <!--乌龟gui-->
    <node pkg="turtlesim" type="turtlesim_node" name="turrle_GUI"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turrle_key"/>
    <node pkg="hello_vscode" type="hello_vscode_c" name="hello" output="screen"/>
</launch>

node ---> 包含的某个节点

pkg -----> 功能包

type ----> 被运行的节点文件

name --> 为节点命名

output-> 设置日志的输出目标

运行环境:source ./devel/setup.bash

运行 launch 文件:roslaunch 包名 launch文件名

例:roslaunch hello_vscode start_turrle.launch

5.ROS架构

5.1文件系统

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: 编译的基本配置

5.2文件系统相关命令

5.2.1执行

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

用法:
roscore

指定端口:
roscore -p xxxx

roscore 将启动: 1.ros master  2.ros 参数服务器  3.rosout 日志节点

2.rosrun运行指定的ROS节点

rosrun 包名 可执行文件名

例:
rosrun turtlesim turtlesim_node

3.roslaunch执行某个包下的 launch 文件

roslaunch 包名 launch文件名

5.2.2功能包

  1.创建

catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包

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

  2.删除

sudo apt purge xxx ==== 删除某个功能包(purge是不保留配置文件,若要保留则选remove)

  3.查询

rospack list === 列出所有功能包

rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径(例:rospack find turtlesim  查询海龟功能包)

roscd 包名 === 进入某个功能包

rosls 包名 === 列出某个包下的文件

apt search xxx === 搜索某个功能包(可用通道符接"grep -i 所需功能包名"来获取所需的功能包)

  4.修改

rosed 包名 文件名 === 修改功能包文件(需要安装 vim)

比如:rosed turtlesim Color.msg

5.3计算图

说明:此处与【2.2测试】中的【2.2.2rqt可视化】一致

1.安装(如果安装的是桌面完整版就不需要安装)

sudo apt install ros-<distro>-rqt
sudo apt install ros-<distro>-rqt-common-plugins
#请使用你的ROS版本名称(比如:kinetic、melodic、Noetic等)来替换掉<distro>。

2.运行

rqt_graph
或
rosrun rqt_graph rqt_graph

可以看到网络拓扑图,该图可以显示不同节点之间的关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值