设置 ROS 安装源
- 官方默认安装源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 清华的安装源(我使用的源)
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
- 中科大的安装源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
设置 key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
安装
- 更新 apt,apt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具
sudo apt update
- 安装所需类型的 ROS:ROS 多个类型,如 Desktop-Full、Desktop、ROS-Base
# noetic 为 Ubuntu20.04 对应的 ROS 版本,根据版本号改名称!
# 18.04 对应 melodic,16.04 对应 kinetic
sudo apt install ros-noetic-desktop-full
# 查看对应 Ubuntu 版本
lsb_release -a
注:由于网络原因,导致连接超时,可能会安装失败,可以多次重复调用更新和安装命令,直至成功
- 若要卸载,则运行下列命令
# Ubuntu 20.04
sudo apt remove ros-noetic-*
配置环境变量
# 以下为 Ubuntu20.04 版本,注意自己的版本
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装构建依赖
- 安装构建依赖的相关工具
# 若为 melodic 版本则下面命令需要更改
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
- 初始化 rosdep
sudo rosdep init
rosdep update
-
由于 raw.githubusercontent.com 被墙,程序无法下载相应的文件导致出现下面情况。
-
修改相关文件,文件中涉及的 URL 内容,如果是:raw.githubusercontent.com/ros/rosdistro/master 都替换成中准备的gitee.com/zhao-xuzuo/rosdistro/raw/master 即可(具体参考文末链接)
cd /usr/lib/python3/dist-packages/ sudo vim ./rosdistro/__init__.py sudo vim ./rosdep2/gbpdistro_support.py sudo vim ./rosdep2/sources_list.py sudo vim ./rosdep2/rep3.py
-
重新执行 sudo rosdep init 和 rosdep update
-
测试 ROS
- 升级 WSL 到 WSLG:以管理员形式打开命令提示符,输入 wsl --update
- 将 VS code 连接到 WSL,VS code 配置可以参考我之前的一篇文章
- 需要插件:C/C++、Python、CMake Tools、ROS
- 使用 VS code 打开终端,输入 roscore
- 使用 VS code 再打开一个终端,输入 rosrun turtlesim turtlesim_node,此时会弹出界面
- 在 WSL 中输入 rosrun turtlesim turtle_teleop_key 来操控小乌龟
参考:安装 ROS
ROS 简易程序——cpp
- 创建工作空间并初始化,可得到三个文件夹
mkdir -p ROS_demo/src # 创建工作空间
cd ROS_demo # 进入工作空间
catkin_make # 调用 catkin_make 命令编译
- 创建 ROS 包并添加依赖:下面将创建一个名为 test 的功能包,其依赖于 roscpp(C++)、rospy(python)、std_msgs
cd src
catkin_create_pkg test roscpp rospy std_msgs
- 编辑源文件:在上面 test 功能包中的 src 文件夹中添加 cpp 文件,以下代码输出 hello world!
// 包含 ros 的头文件
#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;
}
- 编辑配置文件:需要修改 test 功能包中的 CMakeLists.txt 文件,分别需要修改 add_executable 和 target_link_libraries(hello_c.cpp 为上一步创建的源文件名称,hello_c 为映射后的名称)
- 编译源文件:回到工作空间 ROS_demo 中,然后执行 catkin_make,如果前面配置没问题则会出现如下内容
-
执行
- 启动 roscore
- 启动另一个终端进入工作空间并运行如下命令
ROS 简易程序——python
- 前提:已创建 ROS 工作空间(ROS_demo)和 ROS 功能包(test)
- 进入 ROS 包添加 scripts 目录并编辑 python 文件
cd ~/code/ROS_demo/src/test # 路径根据自己而定
mkdir scripts # 与 cpp 源文件存放目录同等级
#! /usr/bin/env python
####### python 文件内容 #######
import rospy
if __name__ == "__main__":
rospy.init_node("Hello")
rospy.loginfo("Hello World!!!!")
- 为 python 文件添加可执行权限
chmod +x hello_p.py # hello_p.py 为创建的文件名
- 编辑 test 功能包中的 CMakeLists.txt 文件,这里只需要修改 catkin_install_python
- 编译并执行,与 cpp 版本一样,只不过使用 rosrun test hello_p.py(rosrun 功能包名 python文件名)
launch 文件
一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下。官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点
- 在功能包(test)下新建一个 launch 文件夹
- 在 launch 文件夹下创建 launch 文件
- 编辑 launch 文件内容
<!-- node: 包含的某个节点; pkg: 功能包; type: 被运行的节点文件; name: 为节点命名; output: 设置日志的输出目标 -->
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI_01"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key_01" />
</launch>
- 通过 source 命令刷新工作空间(ROS_demo)环境
source ./devel/setup.bash
- 运行 launch 文件
# roslaunch 包名 launch文件名
roslaunch test start_turtle.launch
- 运行结果