Ubuntu20.04安装ROS

Qf要变强!!O_o 2024-07-09 16:37:03 阅读 80

文章目录

一、ROS的介绍二、ROS软件安装2.1 设置sources.list,添加软件包2.2 设置密钥2.3 安装2.4 设置环境变量2.5 初始化rosdep克隆rosdistro文件修改文件1:20-default.list修改文件2:gbpdistro_support.py修改文件3:rep3.py修改文件4:__init__.py

2.6 安装python-rosdep2.7 创建20-default.list文件2.8 完成初始化rosdep2.9 安装rosinstall2.10 运行ROS

三、小海龟demo四、了解ROS话题和消息的发布与获取的方式,终端命令发布话题控制海龟圆周运动。4.1 话题获取4.2 消息获取4.3 获取消息格式4.4 命令行实现控制圆周运动

五、C++编码实现小海龟圆周运动5.1 创建ROS工作空间5.2 创建ROS功能包5.3 C++代码

参考文章小结

一、ROS的介绍

ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”。

ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。ROS并不是一个实时的框架,但ROS可以嵌入实时程序。

二、ROS软件安装

参考网站:http://wiki.ros.org/cn/Installation/Ubuntu

2.1 设置sources.list,添加软件包

<code>sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

在这里插入图片描述

notice

Linux 中“>”和“>>”的区别

两个运算符都是输出方向运算符。主要区别如下:

“>”:覆盖现有文件,或者如果目录中不存在所提及名称的文件,则创建一个文件。

“>>”:追加现有文件,或者如果目录中不存在所提及名称的文件,则创建一个文件。

2.2 设置密钥

<code>sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

在这里插入图片描述

2.3 安装

首先确保软件包索引是最新的,否则上述修改是无效的,使用如下命令更新

<code>sudo apt update

在这里插入图片描述

使用桌面完整安装:ROS、rqt、rviz、机器人通用库、2D/3D 模拟器和 2D/3D 感知

<code># Ubuntu 20.04

sudo apt install ros-noetic-desktop-full

# Ubuntu 18.04

sudo apt install ros-melodic-desktop-full

在这里插入图片描述

2.4 设置环境变量

在终端输入如下指令,对环境变量进行配置

<code>echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc

在这里插入图片描述

2.5 初始化rosdep

克隆rosdistro文件

因为<code>https://raw.githubusercontent.com网站在国内被屏蔽无法访问,直接进行初始化会失败,所以先将需要的rosdistro文件克隆下来。将克隆好的文件夹放置在你自己指定的本地文件夹下,我这里放置在了/opt/ros/noetic/文件夹下。(注:从github上获取需要让linux可以连接上外网,或者在主机上下载后上传到虚拟机中)

cd /opt/ros/noetic/

git clone https://github.com/ros/rosdistro.git

修改文件1:20-default.list

文件路径:/opt/ros/noetic/rosdistro/rosdep/sources.list.d/将里面的URL改为file路径,需要删除默认URL路径中的/master/

cd /opt/ros/noetic/rosdistro/rosdep/sources.list.d/

sudo gedit 20-default.list

# 修改为如下内容

# os-specific listings first

yaml file:///opt/ros/noetic/rosdistro/rosdep/osx-homebrew.yaml osx

# generic

yaml file:///opt/ros/noetic/rosdistro/rosdep/base.yaml

yaml file:///opt/ros/noetic/rosdistro/rosdep/python.yaml

yaml file:///opt/ros/noetic/rosdistro/rosdep/ruby.yaml

gbpdistro file:///opt/ros/noetic/rosdistro/releases/fuerte.yaml fuerte

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

在这里插入图片描述

修改文件2:gbpdistro_support.py

文件路径为:<code>/usr/lib/python3/dist-packages/rosdep2/(Noetic路径为python3,Melodic或者老版本路径为python2.7)

cd /usr/lib/python3/dist-packages/rosdep2/

sudo gedit gbpdistro_support.py

# 修改为如下内容

FUERTE_GBPDISTRO_URL = 'file:///opt/ros/noetic/rosdistro/' \

'releases/fuerte.yaml'

在这里插入图片描述

修改文件3:rep3.py

文件路径为:<code>/usr/lib/python3/dist-packages/rosdep2/

cd /usr/lib/python3/dist-packages/rosdep2/

sudo gedit rep3.py

# 修改为如下内容

REP3_TARGETS_URL = 'file:///opt/ros/noetic/rosdistro/releases/targets.yaml'

在这里插入图片描述

修改文件4:init.py

文件路径为:<code>/usr/lib/python3/dist-packages/rosdistro/

cd /usr/lib/python3/dist-packages/rosdistro/

sudo gedit __init__.py

# 修改为如下内容

DEFAULT_INDEX_URL = 'file:///opt/ros/noetic/rosdistro/index-v4.yaml'

在这里插入图片描述

2.6 安装python-rosdep

在终端输入如下指令安装<code>python-rosdep,如果不安装,在运行sudo rosdep init时可能出现sudo:rosdep:找不到命令的错误。

# Noetic版本ROS为python3-rosdep

sudo apt-get install python3-rosdep

# Melodic版本ROS为python-rosdep

sudo apt-get install python-rosdep

在这里插入图片描述

2.7 创建20-default.list文件

安装了python-rosdep后,因为国内网络被屏蔽的原因运行sudo rosdep init还无法下载或连接失败的错误。所以用如下命令创建这个文件。

<code>sudo mkdir -p /etc/ros/rosdep/sources.list.d

cd /etc/ros/rosdep/sources.list.d

sudo gedit 20-default.list

# 在文件中添加如下内容

#os-specific listings first

yaml file:///opt/ros/noetic/rosdistro/rosdep/osx-homebrew.yaml osx

#generic

yaml file:///opt/ros/noetic/rosdistro/rosdep/base.yaml

yaml file:///opt/ros/noetic/rosdistro/rosdep/python.yaml

yaml file:///opt/ros/noetic/rosdistro/rosdep/ruby.yaml

gbpdistro file:///opt/ros/noetic/rosdistro/releases/fuerte.yaml fuerte

#newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

在这里插入图片描述

2.8 完成初始化rosdep

在终端输入如下指令,完成初始化rosdep

<code>rosdep update

在这里插入图片描述

2.9 安装rosinstall

<code># Noetic版本ROS为

sudo apt install python3-rosdep

sudo apt install python3-rosinstall

sudo apt install python3-rosinstall-generator

sudo apt install python3-wstool

sudo apt install build-essential

# Melodic版本ROS为

sudo apt install python-rosdep

sudo apt install python-rosinstall

sudo apt install python-rosinstall-generator

sudo apt install python-wstool

sudo apt install build-essential

2.10 运行ROS

roscore

在这里插入图片描述

三、小海龟demo

<code>roscore运行

在这里插入图片描述

新开一个bash,输入<code>rosrun turtlesim turtlesim_node

在这里插入图片描述

新建一个bash,输入<code>rosrun turtlesim turtle_teleop_key,使用上下左右键控制移动

在这里插入图片描述

四、了解ROS话题和消息的发布与获取的方式,终端命令发布话题控制海龟圆周运动。

4.1 话题获取

先将小海龟demo运行起来,然后再开一个bash,输入<code>rqt_graph

在这里插入图片描述

这个图描述了两个,publisher是/teleop_turtle,subscriber是/turtlesim,也就是publisher通过话题向turtlesim发送控制信息。

4.2 消息获取

bash输入<code>rostopic info /turtle1/cmd_vel

在这里插入图片描述

type表示话题的数据类型。

4.3 获取消息格式

<code>rosmsg show geometry_msgs/Twist

在这里插入图片描述

分别表示线速度和角速度,取值只有x,z。

<code>rostopic echo /turtle1/cmd_vel 打印传递的信息。

在这里插入图片描述

4.4 命令行实现控制圆周运动

先输入以下命令

<code>rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:

接下来按下Tab建,会自动帮我们补全。

在这里插入图片描述

然后修改数据,将线速度的x修改为1,角速度的z也修改为1。

在这里插入图片描述

五、C++编码实现小海龟圆周运动

5.1 创建ROS工作空间

创建工作空间

<code>mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/src

catkin_init_workspace

编译工作空间

cd ~/catkin_ws

catkin_make

source devel/setup.bash

检查环境变量

echo $ROS_PACKAGE_PATH

5.2 创建ROS功能包

创建功能包

cd ~/catkin_ws/src

catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs

编译功能包

cd ~/catkin_ws

catkin_make

source devel/setup.bash

5.3 C++代码

创建publisher.cpp文件

在位置~/catkin_ws/src/learning_topic/src/下创建publisher.cpp文件。发布话题的逻辑

1.初始化ROS节点

2.向ROS Master注册节电信息,包括发布的话题名和话题中的消息类型

3.创建消息数据

4.按照一定频率循环发布消息

C++代码:

#include <sstream>

#include "ros/ros.h"

#include "std_msgs/String.h"

#include "geometry_msgs/Twist.h"

int main(int argc, char **argv)

{

//初始化节点

ros::init(argc, argv, "publisher");

//创建节点句柄

ros::NodeHandle n;

//创建publisher,发布话题[/turtle1/cmd_vel],消息类型[geometry_msgs::Twist]

ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);

//设置循环频率

ros::Rate loop_rate(100);

while (ros::ok())

{

//定义发布的数据

geometry_msgs::Twist msg;

//定义linear数据

geometry_msgs::Vector3 linear;

linear.x=1;

linear.y=0;

linear.z=0;

//定义angular数据

geometry_msgs::Vector3 angular;

angular.x=0;

angular.y=0;

angular.z=1;

msg.linear=linear;

msg.angular=angular;

//发布msg数据

chatter_pub.publish(msg);

//循环等待回调函数

ros::spinOnce();

//按照循环频率延时

loop_rate.sleep();

}

return 0;

}

添加编译选项

cd ~/catkin_ws/src/learning_topic

gedit CMakeLists.txt

在最后添上如下代码

add_executable(publisher src/publisher.cpp)

target_link_libraries(publisher ${catkin_LIBRARIES})

保存退出,再进行编译命令

cd ~/catkin_ws

catkin_make

在这里插入图片描述

启动小海龟并实现控制

<code>roscore

#打开新终端

rosrun turtlesim turtlesim_node

#打开新终端

cd ~/catkin_ws

#下面这一步是为了保证rosrun命令能够找到相应的功能包,有可以省去这一步骤的方法,各位可以自行查找

source ~/catkin_ws/devel/setup.bash

rosrun learning_topic publisher

在这里插入图片描述

参考文章

Ubuntu20.04.4安装ROS Noetic详细教程

ubuntu20.04ros从安装到卸载

ROS运行程序让小海龟实现圆周运动

小结

初步认识了ROS系统,了解了其具体应用,认识其节点间通信机制的重要性。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。