第 2 節

入门操作

0瀏覽次數0訪問次數--跳出率--平均停留

简介

终端环境搭建

如果在上方安装ROS2的时候,已经将该语句添加到~/.bashrc了,则不必再跟着这步操作了。

source /opt/ros/humble/setup.bash  #将ROS2环境变量配置到当前位置
echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc    #每次启动终端都会运行该句

ros2 run demo_nodes_cpp talker

用ctrl+c来进行取消程序运行

ros2 run demo_nodes_py listener

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

命令行操作

mkdir -p 新建文件夹

rm -R 递归删除(删掉文件夹及里面包含的文件夹及文件)

touch 新建文件

rm 删除文件

cd ..退回上级目录(cd 点点)


会弹提示信息,告诉我们后面要跟的参数

ros2 node list会把当前ROS2正在运行的节点列出来

ros2 node info + /节点名 可以查看目标节点的详细情况

会弹提示信息,告诉我们后面要跟的参数

可以通过话题来显示机器人运动的状态

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"

ros2 bag record /turtle1/cmd_vel
ros2 bag play rosbag2_2022_04_11-17_35_40/rosbag2_2022_04_11-17_35_40_0.db3

ros2 bag record + 话题

按Ctrl+C结束,然后录制的数据在当前终端的目录下

如何去复现呢?

ros2 bag play + 文件夹名称

ROS2 HelloWorld(C++)

1.创建功能包

指令就是创建ros2的功能包

ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake / ament_python + --dependencies(依赖) + rclcpp(ROS2的CPP客户端) + --node-name(节点名) + 节点名

ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld

源文件自动生成了,文件名和我们指定的node name是一致的。

这是自动生成的内容,但是和ROS2没有任何关系。

如果依赖的库不止这一个,则再回车,

xxx

再添加下一个

10行是查找包

12行是添加可执行的

add_executable 的第一个参数是 可执行文件的名字(默认和节点名一致,默认和源文件名一致) 第二个参数是源文件的名字

17行是为我们的可执行程序添加依赖 我们的可执行程序依赖于RCLCPP这个库

22行是要为我们的可执行程序设立一个安装目录,创建在了当前功能包下的lib目录,也就是 工作空间名/install/功能包名/lib

编辑配置文件之后编译,用cd..返回ws目录

图标为绿色,是没有警告也没有错误

是黄色的则有警告

是红色的则有致命错误

可执行二进制文件的路径

source install/setup.bash #刷新环境变量

ros2 run pkg01_helloworld_cpp helloworld

ros2 run 功能包名称 可执行文件名(默认和节点名一致)

编辑ROS2 C++源文件:

#include "rclcpp/rclcpp.hpp"

int main(int argc, char ** argv)
{
  rclcpp::init(argc,argv);

  auto node = rclcpp::Node::make_shared("helloworld_node");

  RCLCPP_INFO(node->get_logger(),"hello world!");

  rclcpp::shutdown();

  return 0;
}

ROS2 HelloWorld(Python)

ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld

ros2 pkg create + 功能包名 + --build-type(构建类型) + ament_cmake / ament_python + --dependencies(依赖) + rclpy(ROS2的Python客户端) + --node-name(节点名) + 节点名

与node name和可执行二进制文件同名

默认这里面已经有代码,但是和ROS2无关,这是标准的python代码

二进制可执行文件 映射到 源文件的main函数

如何编译呢?

先返回上一级,来到ws目录

有个黄色警告,但是不影响我们使用。

source ./install/setup.bash

刷新环境变量

ros2 run pkg02_helloworld_py helloworld


import rclpy

def main():
    rclpy.init()
    node = rclpy.create_node("helloworld_py_node")
    node.get_logger().info("hello world by python!")
    rclpy.shutdown()

if name == '__main__':
    main()

运行优化(bash终端环境)

要使用绝对路径

尽量不要这么干,ROS2有一个bug,就是不同工作空间的功能包可能会调用混乱,所以先不要搞全局的运行优化。

VScode环境搭建

看C/C++,Python,CMake,XML,YAML文件就可以代码高亮显示

在写一些ROS2消息的代码可以提供代码补齐等操作

编写机器人模型所要用的插件,也可以进行代码补齐

ROS2经常生成PDF文件,可以通过这个插件来查看

ROS2插件建议等成熟之后再进行安装

这个官方插件可以尝试安装

人工智能代码补全

MarkDown高亮


虽然报错,但是程序是可以正常运行的。(主要是vscode找不到头文件)

            "includePath": [
                "${default}",
                "${workspaceFolder}/**",
                "/opt/ros/humble/include/**"
            ],

/**代表要包含该文件夹下的所有的子集


按Ctrl + `(ESC底下的按键)把VSCODE终端打开

--node-name也是可选参数,如果不配置,则不会有源文件,也不会有可执行文件到源文件的映射

不需要修改,已经默认生成好了

再返回WS目录进行编译(但是此时编译是编译整个WS目录下的所有功能包)

刷新环境变量并运行



如何在一个功能包里添加多个源文件呢?

新建一个新文件,比如hellovscode2.cpp

但是此时该文件是一个孤零零的文件,他没有做任何的配置,对应的,编译完之后也不会被执行。

我们想编译执行该文件,必须配置相关的配置文件。

选中的这些用不着,可以删掉

运行优化(colcon build)

平常会全编译WS目录下的文件

colcon build --packages-select xxx xxx xxx #可以指向多个包

VScode环境进阶

clangd插件代码提示(可选,但是建议)

https://colcon.readthedocs.io/en/released/index.html

由于C/C++插件在大项目里的表现简直拉胯的一批,所以我们选择使用llvm里的clangd插件来进行代码提示。

但clangd依赖于cmake生成一个编译信息文件,我们需要一些步骤来生成该文件。

由于ROS2没有像ROS1那样的一个总的规范的CMakeLists,所以配置起来没有ROS1那么方便。

  1. 配置colcon build参数
    1. 方法一:(不建议) 每次 编译要用该命令:
    colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    

      等同于在cmake文件里写上(一般不建议改cmakelists)
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    
    1. 方法二:全局参数(更加推荐)
mkdir ~/.colcon

vim ~/.colcon/defaults.yaml

按下insert(插入)按键

输入下方内容

build:
  cmake-args:
    - -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

按下ESC,并按下:wq,然后按下Enter(回车)即可成功保存。

在编译的时候正常用colcon build就可以自动启用CMAKE_EXPORT_COMPILE_COMMANDS=ON参数了。

  1. 然后再来配置clangd插件
    1. 先下载clangd插件
    2. 下载clangd文件

      按住Ctrl shift P打开搜索框
      输入clangd 找到下载语言服务器这一项目,点击安装clangd(请保持良好的网络状况)
    1. 接着配置clangd:

禁用C/C++的代码提示功能

如果没有上图的弹窗,可以进行手动关闭,依然是ctrl shift P,输入settings然后找到如下图的选项

找到下图这个选项,改成disabled即可。

"C_Cpp.intelliSenseEngine": "disabled"

  1. 重启clangd

然后ctrl shift P搜索clangd找到如下图的选项(重启clangd语言服务器前,要先colcon build)

代码提示就正常啦

安装其他工具

terminal

安装terminator(选装,因人而异,有更好用的Warp,请往下看)
sudo apt install terminator

快捷键功能记忆方法
Ctrl + Shift + E垂直分屏,左右分E = East,往东边开一个窗口,也就是左右分
Ctrl + Shift + O水平分屏,上下分O = Over / Under,上下叠放
Ctrl + Shift + S隐藏/显示滚动条S = Scrollbar,滚动条
F11全屏/退出全屏F = Fullscreen,F11 本来就是很多软件的全屏键
Ctrl + Tab在不同 pane 之间切换跟浏览器切 Tab 类似,循环切换
Ctrl + L清屏L = clear 里的 L,也可以理解成“拉到新页面”
Ctrl + Shift + W关闭当前 paneW = Window,关当前小窗口
Ctrl + Shift + Q退出整个 TerminatorQ = Quit,退出程序

因为他本身的字体非常暗,所以要设置一下.

cp ~/.config/terminator/config ~/.config/terminator/config.bak
vim ~/.config/terminator/config

按一下ggdG,注意大小写. 然后按下insert按键, 然后让文件内容为:

[global_config]
  title_transmit_bg_color = "#31363b"
  title_transmit_fg_color = "#fcfcfc"
  title_receive_bg_color = "#232629"
  title_receive_fg_color = "#fcfcfc"
  title_inactive_bg_color = "#232629"
  title_inactive_fg_color = "#bdc3c7"

[keybindings]

[profiles]
  [[default]]
    use_theme_colors = False
    use_system_font = False
    font = Noto Sans Mono 11

    background_type = solid
    background_color = "#232629"
    foreground_color = "#fcfcfc"
    cursor_color = "#fcfcfc"

    palette = "#232629:#ed1515:#11d116:#f67400:#1d99f3:#9b59b6:#1abc9c:#fcfcfc:#7f8c8d:#ff5555:#50fa7b:#fdbc4b:#3daee9:#ff79c6:#8be9fd:#ffffff"

    scrollback_infinite = True

[layouts]
  [[default]]
    [[[window0]]]
      type = Window
      parent = ""
      size = 920, 660
    [[[child1]]]
      type = Terminal
      parent = window0

[plugins]

最后,按下ESC,输入:wq保存并退出.

然后完全关闭 Terminator,再重新打开。 这个配置会做几件事:

  1. 背景:接近 Konsole Breeze 的深灰,不是死黑
  2. 字体:接近纯白,比以前亮很多
  3. 蓝色:换成更亮的 KDE 蓝
  4. 绿色/黄色/青色:也整体提亮
  5. 顶部红色标题条:改成灰色,不再那么刺眼
Warp Terminal(推荐,更好看,也支持分屏)

相比 Terminator,Warp Terminal 的默认外观更现代,字体更清楚,界面也更亮堂。

最重要的是,它也支持类似 Terminator 的多 pane 分屏,所以可以作为 Terminator 的现代平替。

不过需要注意,Warp 的快捷键和 Terminator 不完全一样。

  1. 安装
    1. Ubuntu / Debian 安装
      wget -O warp-terminal.deb "https://app.warp.dev/download?package=deb"
      sudo apt install ./warp-terminal.deb
      

      安装完成后,可以在应用菜单里打开 Warp,也可以在终端里输入:
      warp-terminal
      
    2. Fedora / RHEL 安装
      如果你用的是 Fedora、RHEL、CentOS 这类发行版,可以安装 rpm 包:
      wget -O warp-terminal.rpm "https://app.warp.dev/download?package=rpm"
      sudo dnf install ./warp-terminal.rpm
      

      启动方式同样是:
      warp-terminal
      
  2. Warp 常用快捷键
快捷键功能记忆方法
Ctrl + Shift + D向右分屏D = Divide,分割出一个新的 pane,默认往右边开
Ctrl + Shift + E向下分屏E = Extend Down,向下面扩展一个新的 pane
Ctrl + Alt + 方向键按方向切换 pane想去哪边就按哪个方向键
Ctrl + Shift + [切换到上一个 pane[ 可以理解成往前切
Ctrl + Shift + ]切换到下一个 pane] 可以理解成往后切
Ctrl + Shift + Enter最大化/还原当前 paneEnter 进入当前 pane 的专注模式
Ctrl + Shift + W关闭当前 paneW = Window,关闭当前小窗口
Ctrl + Shift + T新建标签页T = Tab,新开一个标签页
Ctrl + PageUp切换到上一个标签页类似浏览器切换标签
Ctrl + PageDown切换到下一个标签页类似浏览器切换标签
Ctrl + L清屏L = clear 里的 L,相当于翻到一个新页面
Ctrl + =放大字体等号旁边通常也是加号,表示放大
Ctrl + -缩小字体减号,表示缩小
Ctrl + 0恢复默认字体大小归零,恢复默认
  1. Warp 的特点
    1. 默认颜值比 Terminator 高,不需要额外折腾配色
    2. 支持一直分屏,适合大屏幕开发
    3. 字体渲染比较清楚,观感比 Terminator 亮堂
    4. 支持命令块,长命令输出看起来更清晰
    5. 支持 AI 功能,但不使用 AI 也可以当普通终端使用

首次打开 Warp 时可能需要联网初始化。之后即使离线也可以作为普通终端使用,只是 AI、协作等云端功能不能用。

如果只是想要一个传统、稳定、轻量的终端,可以继续用 Terminator。

如果想要更好看的界面、更现代的交互体验,并且也需要分屏,那么 Warp 是一个很不错的选择。

git

咱们的Git入门教程:Vinci机器人队Git入门教程

ROS2体系框架

Client Library就是ROS2的客户端,比如rclcpp,rclpy。

Abstract DDS Layer是DDS抽象层,这样DDS可以实现可插拔,可以随便替换DDS模块。

Intra-process API是进程内通讯API,可以提高通信效率的一类API。

音乐页