Ubuntu18.04安装ROS系统(melodic版)并实现小海龟仿真

文章目录

  • 一、ROS简介
    • 1.1 ROS全称
    • 1.2 ROS简介
  • 二、ROS的安装
  • 三、ROS实例运行——小海龟
    • 3.1 运行小海龟
    • 3.2 用话题器查看小海龟节点间信息的传递
    • 3.3 按控制量移动海龟运行
    • 3.4 用C++编写一段程序控制小海龟走圆形
  • 四、总结&参考资料

一、ROS简介

1.1 ROS全称

ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。

1.2 ROS简介

ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括:

  • 基于服务的同步RPC(远程过程调用)通讯;
  • 基于Topic的异步数据流通讯,还有参数服务器上的数据存储。

ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。
为了实现“共享与协作”这一首要目标,人们制订了ROS架构中的其他支援性目标:

  • “轻便”:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。
  • ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。
  • 语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。
  • 测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。
  • 扩展性:ROS适合于大型实时系统与大型的系统开发项目。

参考资料:https://baike.baidu.com/item/ros/4710560?fr=aladdin

二、ROS的安装

1.添加ROS软件源

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


2.添加密钥

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654


3.安装ROS

sudo apt update
sudo apt-get install ros-melodic-desktop-full

说明: 需要根据Ubuntu的版本选择合适的ROS版本。否则会出现Unable to locate package
ros-kinetic-desktop-full的错误。ROS的版本主要有Melodic、Lunar、Kinetic版本,根据linux系统不同选择合适的版本,报错也就解决了。安装时间比较长。


4.初始化rosdep

 sudo apt-get install python3-pip

  sudo pip3 install 6-rosdep

  sudo 6-rosdep
sudo rosdep init
rosdep update


5.设置环境变量

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

三、ROS实例运行——小海龟

3.1 运行小海龟

以下三个命令需要单独打开三个终端。其中,运行界面出现在第二条命令运行后,操作界面在第三条命令运行后的终端

1.启动ROS master

roscore

2.启动小海龟仿真器

rosrun turtlesim turtlesim_node

3.启动小海龟控制节点

rosrun turtlesim turtle_teleop_key

3.2 用话题器查看小海龟节点间信息的传递

重新打开一个终端,输入

rosnode list

此时可以看到ROS运行的有哪些节点。


若想查看具体的节点,则可以输入

rosnode info /XXXX

此时可以看到具体的节点信息
例如下图:

若想使用话题器,则输入

rostopic list


若想查看话题的具体信息,则输入

rostopic info /xxxxx

监听话题内容

rostopic echo /turtle1/cmd_vel

以上命令可以通过话题监听查看小海龟运动的实时的线速度、角速度

3.3 按控制量移动海龟运行

如果想控制小海龟运动,就自己发布一个消息,发布一次信息,比如发布小海龟线速度,rostopic pub /turtle1/cmd_vel geometry_msgs/Twist “linear:修改linear的X为1.0,回车后,看见小海龟向前运动了一截。如果想按照一定的频率发布消息,那就要加一个参数,rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist …,即可。

3.4 用C++编写一段程序控制小海龟走圆形

工作空间workspace,我们在开发一个ROS项目的时候,是以工作空间来代表一个项目的。

  • workspace: 工作空间
  • build:ros编译打包的结果产出目录。我们不需要对这个文件夹做任何编辑操作,属于自动生成。
  • devel: 开发所需要的目录
  • src:存放package的目录
  • CMakeLists.txt: 整个工作空间编译的脚本。此文件我们通常不用去做修改操作。

工作单元package,一个项目中可以创建多个工作单元,这个工作单元,我们称之为package。

  • pkg1: package的名称,开发过程中根据自己实际情况进行创建设定。
  • CMakeLists.txt: 当前package的编译脚本。通常需要为c++代码添加编译时的依赖,执行等操作。
  • package.xml: package相关信息。通常添加一些ros库的支持
    i- nclude文件夹: 存放c++ 头文件的
  • config文件夹:存放参数配置文件,格式为yaml
  • launch文件夹:存放.launch文件的。
  • src:c++源代码
  • scripts:python源代码
  • srv:存放定义的service
  • msg: 存放自定义的消息协议
  • action: 存放自定义的action
    2.1 Workspace创建

新建工作空间目录结构

  • 1.新建一个文件夹,命名为catkin_ws

  • 2.在文件夹 catkin_ws 下创建一个文件夹 src

  • 3.移动到src目录下输入catkin_init_workspace。在src文件夹中出现CMakeLists.txt文件

  • 4.返回catkin_ws,对其进行编译

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make


而后要设置环境变量
设置环境变量是为了让系统知道功能包的位置在哪,以便能找到。确保安装脚本正确地覆盖了工作空间,ROS_PACKAGE_PATH环境变量包含在目录中。
在catkin_ws路径下终端输入source devel/setup.bash,使系统知道功能包放置在catkin_ws这个工作空间下。

检查环境变量
查看当前环境变量,终端输入:

echo $ROS_PACKAGE_PATH


创建package
来到workspace的src目录下,新建my_turtle_package包

cd ./src
catkin_create_pkg my_turtle_package std_msgs rospy roscpp


catkin_create_pkg是创建package的命令。运行以上命令,会新建好package的目录,并且在目录中创建CMakeLists.txt,package.xml,src,include等文件和 目录第一个参数firstros是指创建的package名称,可以根据自己的实际需求去设定。

后面的参数roscpp,rospy,rosmsg是指当前创建的这个package需要提供哪些环境依赖。

roscpp是对c++的一种依赖,有了它就可以用c++开发ros程序。
rospy是对python的一种依赖,有了它就可以用python开发ros程序。

进入my_turtle_package的src文件中

创建CPP文件并编写程序

touch yuan.cpp
gedit yuan.cpp

而后将如下代码复制到文件中

#include "ros/ros.h"
#include<geometry_msgs/Twist.h> //运动速度结构体类型  geometry_msgs::Twist的定义文件
 
int main(int argc, char *argv[])
{
    ros::init(argc, argv, "vel_ctrl");  //对该节点进行初始化操作
    ros::NodeHandle n;         //申明一个NodeHandle对象n,并用n生成一个广播对象vel_pub
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
    //vel_pub会在主题"/cmd_vel"(机器人速度控制主题)里广播geometry_msgs::Twist类型的数据
    ROS_INFO("draw_circle start...");//输出显示信息
    while(ros::ok())
    {
        geometry_msgs::Twist vel_cmd; //声明一个geometry_msgs::Twist 类型的对象vel_cmd,并将速度的值赋值到这个对象里面
 
        vel_cmd.linear.x = 2.0;//前后(+-) m/s
        vel_cmd.linear.y = 0.0;  //左右(+-) m/s
        vel_cmd.linear.z = 0.0;
 
        vel_cmd.angular.x = 0;
        vel_cmd.angular.y = 0;
        vel_cmd.angular.z = 1.8; //机器人的自转速度,+左转,-右转,单位是rad/s
        vel_pub.publish(vel_cmd); //赋值完毕后,发送到主题"/cmd_vel"。机器人的核心节点会从这个主题接受发送过去的速度值,并转发到硬件体上去执行
 
        ros::spinOnce();//调用此函数给其他回调函数得以执行(比例程未使用回调函数)
    }
    return 0;
}



修改CMakeLists.txt文件内容
返回my_turtle_package,打开CMakeLists.txt文件

cd  ..
gedit CMakeLists.txt

在CMakeLists.txt文件中找到##Declare a C++ executable,在这一行的前面添加如下内容:

add_executable(yuan src/yuan.cpp)
target_link_libraries(yuan ${catkin_LIBRARIES})


进入catkin_ws,编译程序

cd ~/catkin_ws/
catkin_make


运行小海龟实例
以下三个代码块在三个终端中打开

roscore
rosrun turtlesim turtlesim_node
cd  ~/catkin_ws/
source devel/setup.bash			#程序注册
rosrun my_turtle_package yuan

运行结果如下:

四、总结&参考资料

https://blog.csdn.net/qq_43279579/article/details/114291635
https://blog.csdn.net/qq_44339029/article/details/120579608
安装ROS系统一定要对应自己所安装的Ubuntu系统版本进行安装(博主Ubuntu系统版本为18.04,ROS系统版本为melodic版)。此外,在初始化rosdep时,实际只用运行最后两个命令即可,但是由于网络问题,往往很难直接进行在线安装,因此需要借助参考资料中所介绍的国内开发者开发的工具,当然亦可以直接下载安装包进行离线安装。本次实验运行了ROS入门的小海龟示例,初步体验了一下ROS系统。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月28日
下一篇 2023年11月28日

相关推荐