• 正文
  • 相关推荐
申请入驻 产业图谱

Ubuntu20安装ROS2-FoxyFitzroy与C++基础测试

6小时前
119
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1 安装步骤

系统是Ubuntu20.04,对应的ROS版本是要安装FoxyFitzroy

1.1 配置语言环境

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

第一条如果有报错,比如:

Get:41 http://mirrors.aliyun.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [160 kB]
Get:42 http://mirrors.aliyun.com/ubuntu focal-security/multiverse amd64 Packages [26.7 kB]
Get:43 http://mirrors.aliyun.com/ubuntu focal-security/multiverse i386 Packages [7,184 B]
Get:44 http://mirrors.aliyun.com/ubuntu focal-security/multiverse amd64 DEP-11 Metadata [940 B]
Reading package lists... Done                                                  
E: The repository 'https://download.docker.com/linux/ubuntu focal Release' no longer has a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

可以再执行一遍,最后是这样的打印

Preparing to unpack .../locales_2.31-0ubuntu9.18_all.deb ...
Unpacking locales (2.31-0ubuntu9.18) over (2.31-0ubuntu9.16) ...
Setting up locales (2.31-0ubuntu9.18) ...
Generating locales (this might take a while)...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IL.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... done
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
  zh_CN.UTF-8... done
  zh_SG.UTF-8... done
Generation complete.
Processing triggers for man-db (2.9.1-1) ...

1.2 开启 universe 仓库,安装 curl

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl gnupg

1.3 添加 ROS2 软件源密钥

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

如果国内下载慢,把上面 http://packages.ros.org/ros2/ubuntu 替换成清华源:http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu

不换也能下载

1.4 更新源,安装桌面完整版(带 rclcpp、rviz2、demo 示例)

sudo apt update
sudo apt upgrade

# 桌面完整版
sudo apt install ros-foxy-desktop python3-argcomplete

最小版本(无可视化工具):sudo apt install ros-foxy-ros-base

我安装的桌面完整版

1.5 自动加载环境变量

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc

1.6 测试ROS2的自带例程

printenv ROS_DISTRO

输出 foxy 就成功。

测试自带 cpp 示例节点:

终端 A:

ros2 run demo_nodes_cpp talker

终端 B 新开一个:

ros2 run demo_nodes_py listener

看到收发消息,代表 rclcpp 底层全部正常。

也可以运行小乌龟例程.

首先启动小乌龟图形窗口,新开终端:

ros2 run turtlesim turtlesim_node

会弹出蓝色小乌龟窗口,然后再开一个终端,输入如下,用于键盘上下左右键控制小乌龟移动

ros2 run turtlesim turtle_teleop_key

再开一个终端,输入如下,可以查看所有通信话题

ros2 topic list

可以看到:

/turtle1/cmd_vel

    • (速度指令)

/turtle1/pose

    (乌龟坐标)

1.7 安装编译工具 colcon

colcon 是 ROS2 的编译构建工具,用来编译 C++ 节点代码

sudo apt install python3-colcon-common-extensions

2 C++程序测试

2.1 创建工作空间(存放 rclcpp 代码)

ROS2 约定:所有代码放在 ~/dev_ws/src 下面。

mkdir -p ~/dev_ws/src
cd ~/dev_ws

~/dev_ws/src 是 ‌ROS 2开发中工作空间的源代码目录‌。 在 ROS 2 的标准开发流程中,dev_ws 通常作为工作空间的根目录,而 src 是其下必须手动创建的子目录,专门用于存放所有功能包(Package)的源代码。放置在此目录下,以便构建工具 colcon 能够识别并编译 。‌‌ ‌

核心作用与结构:‌ ‌

代码存放区‌:所有 ROS 2 功能包的源码(包括 CMakeLists.txt、package.xml 及源代码文件)均需置于 src 内 。 ‌

构建入口‌:执行编译命令时,colcon 会递归扫描 src 目录下的所有包进行构建 。 ‌

标准规范‌:严格遵守将代码放在 src 目录的约定,避免因路径不规范导致编译失败

2.2 创建 C++ 功能包

下面来写第一个 rclcpp 节点

2.2.1 创建包

进入 src 目录创建包:

cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake my_first_rclcpp --dependencies rclcpp std_msgs

--build-type ament_cmake

    • :C++ 包类型(rclcpp 必用)

--dependencies rclcpp std_msgs

    :声明依赖 rclcpp 库 和标准消息库

现在生成目录结构:

src/my_first_rclcpp/
├── CMakeLists.txt
├── package.xml
└── src/

2.2.2 编写自己的代码

进入 src/my_first_rclcpp/src/,新建文件 hello_node.cpp

#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>

// 自定义节点类,继承rclcpp::Node
class HelloNode : public rclcpp::Node
{
public:
    HelloNode() : Node("hello_cpp_node")
    {
        RCLCPP_INFO(this->get_logger(), "rclcpp节点启动成功!");
    }
};

int main(int argc, char * argv[])
{
    // 初始化rclcpp库
    rclcpp::init(argc, argv);
    // 创建节点对象
    auto node = std::make_shared<HelloNode>();
    // 自旋,处理回调,等待消息
    rclcpp::spin(node);
    // 关闭rclcpp
    rclcpp::shutdown();
    return 0;
}

2.2.3 修改 CMakeLists.txt

打开 my_first_rclcpp/CMakeLists.txt,在 ament_target_dependencies 那一块添加可执行文件编译规则:

# 编译src/hello_node.cpp 生成可执行文件 hello_node
add_executable(hello_node src/hello_node.cpp)

# 绑定依赖 rclcpp std_msgs
ament_target_dependencies(hello_node rclcpp std_msgs)

# 安装编译出来的程序,否则ros2 run找不到
install(TARGETS
  hello_node
  DESTINATION lib/${PROJECT_NAME}
)

2.2.4 确认package.xml

确认依赖已经存在,这行要有:

<depend>rclcpp</depend>
<depend>std_msgs</depend>

2.3 编译代码

回到工作空间根目录 ~/dev_ws

cd ~/dev_ws
colcon build

编译完成后会生成:build install log 三个文件夹。

如果邮箱格式不对,会报错:

改正格式后

注:每一次新开终端,还要 source 自己工作空间的 install

source ~/dev_ws/install/setup.bash

2.4 运行这个 rclcpp 节点

ros2 run my_first_rclcpp hello_node

输出:[INFO] [xxx]: rclcpp节点启动成功!,第一个 rclcpp 节点跑通。

3 总结

本篇先介绍了在Ubuntu20.04上安装FoxyFitzroy的过程,然后介绍了ROS2的C++代码编写与运行示例。

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录