ubuntu 20.04安装ROS体验小海龟转圈圈

news2024/11/24 10:32:06

文章目录

  • 前言
  • 一、ros安装
    • 1、添加ROS软件源:
    • 2、添加密钥:
    • 3、安装ROS:
    • 4、初始化rosdep:
    • 5、设置环境变量:
    • 6、安装rosinstall
  • 二、体验小海龟案例
    • 1.键盘控制小海龟:
      • 1、新建一个终端运行ros
      • 2、新建终端启动小海龟的仿真器
      • 3、新建终端打开键盘控制器
    • 2.话题查看器查看两个node之间的消息传递
    • 3、C++写一个程序,控制小海龟走一个圆形
  • 三、总结
  • 四、参考


前言

环境:
ubuntu 20.04
VMware16.0
vscode


一、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 ‘hkp://keyserver.ubuntu.com:80’ --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3、安装ROS:

sudo apt update

注:这句命令是更新软件源,会从上面的软件源搜索所有与ros相关的安装包的路径,更新到系统中,可能会有某些出现错误,可以更换为热点再试试。

可是我遇到的这个问题怎么也找不到,后面发现这不是安装ros必须的,好像是我前面安装了python2.7然后改为3.8出现的问题吧,进行了许多操作也无法解决,然后我就先忽略了。
在这里插入图片描述

sudo apt install ros-noetic-desktop-full

注意:不同的ubuntu版本对应不同版本的ros,我是ubuntu20.0.4,所以采用noetic,这里的下载时间可能会有点久,稍等。

4、初始化rosdep:

sudo rosdep init

初始化rosdep,用于帮助我们完成一些功能包的依赖的设置和安装。
错误1:
在这里插入图片描述

这种情况可能是被墙了,重试几次或者换一下网络。

错误2:
在这里插入图片描述
输入下面的命令修改一下host文件:

       sudo gedit /etc/hosts

在这里插入图片描述

在第一行添加raw.githubusercontent.com的ip地址,再进行初始化:

        199.232.28.133 raw.githubusercontent.com

错误3:
在这里插入图片描述
输入下面命令:

sudo rm /etc/ros/rosdep/sources.list.d/20-default.list

如果正常的化应该会出现下面的情况,可是我的不正常,又回到第二个错误了:
在这里插入图片描述

于是我借助了六部工坊的配置修改工具进行处理:
1、安装Python的软件包管理工具 pip

     sudo apt-get install python3-pip

2、使用pip安装配置修改工具

      sudo pip3 install 6-rosdep

3、运行配置修改工具

      sudo 6-rosdep

随后便可以正常运行sudo rosdep init了。如果还是解决不了,建议可以采用鱼香大佬的一键安装,简单直接。
鱼香一键安装

  • init完了以后输入下面的命令进行更新:
 rosdep update

5、设置环境变量:

注意下面这行命令也与ubuntu的版本有关:

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

运行下面的命令让环境变量生效:

        source ~/.bashrc

6、安装rosinstall

       sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool

错误:在这里插入图片描述

没能成功解决,但运行roscore成功。

在这里插入图片描述
至此,ros安装结束。

二、体验小海龟案例

1.键盘控制小海龟:

1、新建一个终端运行ros

        roscore

2、新建终端启动小海龟的仿真器

            rosrun turtlesim turtlesim_node

3、新建终端打开键盘控制器

          rosrun turtlesim turtle_teleop_key

通过键盘上下键对小海龟进行控制,一个小细节就是,鼠标需要在打开键盘的终端点击一下键盘才生效。
在这里插入图片描述

2.话题查看器查看两个node之间的消息传递

在上面的三个终端运行的时候,再新建一个终端输入下面的命令查看话题:

rqt_graph

在这里插入图片描述

/teleop_turtle发布者通过 /turtle1/cmd_vel 这个话题向订阅者 /turtlesim 进行发布内容。

3、C++写一个程序,控制小海龟走一个圆形

输出话题的内容:

rostopic info /turtle1/cmd_vel

在这里插入图片描述
查看自定义类型有什么:

rosmsg show geometry_msgs/Twist

在这里插入图片描述

  • 实践:

因为ros中已经封装了小海龟的案例,所以我们可以写一个C++程序通过话题通信对小海龟进行控制。

  • 创建工作空间并用code打开:
mkdir -p test_ws/src
cd test_ws
catkin_make 
code .     
  • 设置环境变量:
source devel/setup.bash
  • 创建功能包:
    cd到src目录下,新建haigui包
catkin_create_pkg haigui std_msgs roscpp
  • 在功能包下的右击创建cpp文件:
    在这里插入图片描述
  • 代码:
/*
    编写 ROS 节点,控制小乌龟画圆
    准备工作:
        1.获取topic(已知: /turtle1/cmd_vel)
        2.获取消息类型(已知: geometry_msgs/Twist)
        3.运行前,注意先启动 turtlesim_node 节点
    实现流程:
        1.包含头文件
        2.初始化 ROS 节点
        3.创建发布者对象
        4.循环发布运动控制消息
*/
 
#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    // 2.初始化 ROS 节点
    ros::init(argc,argv,"control");
    ros::NodeHandle nh;
    // 3.创建发布者对象
    ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1000);
    // 4.循环发布运动控制消息
    //4-1.组织消息
    geometry_msgs::Twist msg;
    msg.linear.x = 1.0;
    msg.linear.y = 0.0;
    msg.linear.z = 0.0;
 
    msg.angular.x = 0.0;
    msg.angular.y = 0.0;
    msg.angular.z = 2.0;
 
    //4-2.设置发送频率
    ros::Rate r(10);
    //4-3.循环发送
    while (ros::ok())
    {
        pub.publish(msg);
 
        ros::spinOnce();
    }
 
 
    return 0;
}

在这里插入图片描述

  • 错误1:
    在这里插入图片描述

这两句在最初引入的时候会报错,好像是找不到文件,我们需要在报红处点击详情进行include操作。

在这里插入图片描述

不同版本的位置不同,一般都在opt下,在输入节后,在方框外点击使其生效。

  • 错误2:
    在这里插入图片描述

出现这种问题的情况比较多,我是因为修改了没保存,所以大家在下载完vscode之后设置为自动保存最好。

  • 修改haigui文件夹下的CMakeLists.txt文件内容:
    在这里插入图片描述

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

  • 测试:

退回到test_ws下的目录进行编译,使得代码生效。

依次打开下面三个终端进行测试:

roscore

输入上面的命令启动ros

rosrun turtlesim turtlesim_node

运行小海龟

cd  ~/test_ws/                 //进入工作空间
source devel/setup.bash			//设置环境
rosrun haigui circular
  • 效果:

ros小海龟


三、总结

其实假期阶段已经安装过ros2,只不过当时是使用别的up主封装好的一键安装的方法,简单省事。现在又重新一步步进行下载安装感觉就是对ros的内在的一些操作理解更加透彻。尤其是遇到各种各样的问题,进一步提高了解决问题的能力。但是,在我入门过ros2后,感觉ros让我不是很舒服,可能还没适应,老是感觉ros2更好用,命令也好记,以上就是ros的初体验。

四、参考

ROS通信实操(小乌龟通信实现)(九)C++、Python
详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络资源面经3

文章目录hive 与 mysql 的区别类加载器的种类&#xff0c;有什么机制&#xff0c;机制有何用处MapReduce实现wordcount流程full GC 和 old GC 区别避免频繁的Full GChive 与 mysql 的区别 数据存储位置 hive数据存储在hdfs上&#xff0c;mysql的数据存储在本地磁盘中。数据规模…

自排查Nginx域名失效

静态分离 用户访问域名——>Nginx——>网关——>微服务 问题&#xff1a; 访问域名后发现不能跳转到首页 检查&#xff1a; 1.检测hosts文件 结果&#xff1a;正确配置域名没有发现问题 2.检查Nginx配置&#xff08;Nginx总配置、服务配置&#xff09; Nginx总配置 服…

【需求响应】基于数据驱动的需求响应优化及预测研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

SpringBoot+Vue中使用AES进行加解密(加密模式等对照关系)

场景 若依前后端分离版本地搭建开发环境并运行项目的教程&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客 在上面搭建起来前后端架构之后&#xff0c;在前后端分别进行AES方式的加解密。 AndroidJava中使用Aes对称加密的工具类…

内存泄漏分析及规避方法

啥是内存泄漏&#xff1f;内存泄漏就是堆内存中的某些对象&#xff0c;你虽然不再使用它们了&#xff0c;但是垃圾回收器还回收不了他们&#xff0c;长此以往内存就慢慢耗没了。内存泄漏怎么检测&#xff1f;如果你的服务经常占用内存很大&#xff0c;慢慢隔一段时间需要重启一…

Linux学习第十三节-软件包

1.分类 二进制包 rpm包 2.软件包管理 软件包之间的依赖关系 命令格式&#xff1a;rpm [选项] 软件包 常用选项&#xff1a; -q #仅查询软件是否安装 -qa #列出所有已经安装在系统中所有软件&#xff0c;可以和grep过滤指定的软件包 -qi #列出软件包详细信息&#xff0c…

xxl-job启用https访问

一、准备证书 1.进入想要生成证书的目录 2.在路径中输入cmd,点击回车 &#xff08;1&#xff09; &#xff08;2&#xff09; 3.输入命令keytool -genkeypair -alias "boot" -keyalg "RSA" -keystore "seek.keystore" 4.输入信息&#xff0c…

12_MySQL数据类型

1. MySQL中的数据类型常见数据类型的属性&#xff0c;如下&#xff1a;2. 整数类型2.1 类型介绍整数类型一共有 5 种&#xff0c;包括 TINYINT、SMALLINT、MEDIUMINT、INT&#xff08;INTEGER&#xff09;和 BIGINT。它们的区别如下表所示&#xff1a;2.2 可选属性2.2.1:MM : 表…

【Spring 深入学习】事务的理解以及配置

事务的理解以及配置 1. 概述 1.1 什么是事务 事务&#xff08;Transaction&#xff09;指的是一个操作序列&#xff0c;该操作序列中的多个操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的工作单位&#xff0c;是数据库环境中的逻辑工作单位&#xff0c;由D…

springboot之自动配置

文章目录前言一、配置文件及自动配置原理1、配置文件2、yaml1、注解注入方式给属性赋值2、yaml给实体类赋值3、Properties给属性赋值二、springboot的多环境配置四、自动配置总结前言 1、自动装配原理 2、多种方式给属性赋值 3、多环境配置 4、自动配置 一、配置文件及自动配置…

2022年数维杯国际大学生数学建模挑战赛A题自动地震地平线跟踪解题全过程论文及程序

2022年数维杯国际大学生数学建模挑战赛 A题 自动地震地平线跟踪 原题再现&#xff1a; 随着我国经济社会发展&#xff0c;地质工作的重要性也日益提高。地震资料解释是地震勘探工程的一个重要阶段&#xff0c;可以明确油气勘探的地下构造特征&#xff0c;为油气勘探提供良好和…

【NLP相关】attention的代码实现

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

英飞凌Tricore实战系列导读

本文框架 1.系列概述1.1 外设理论及应用介绍1.2 基于TC3xx的MCAL各外设配置开发1.3 基于TC3xx的Davinci工程开发1.4 项目中问题排查经验分享1.5 其他相关话题分享2. 目前已发布系列文章汇总1.系列概述 英飞凌TC3xx以其强大的性能,扩展性,存储及安全性能在汽车电子中扮演着越…

0.基于知识图谱的知识建模详细方案

0.前言 知识图谱以结构化的形式描述客观世界中概念、实体及其关系。实体是客观世界中的事物,概念是对具有相同属性的事物的概括和抽象。本体是知识图谱的知识表示基础,可以形式化表示为,O={C,H, P,A,I},C 为概念集合,如事物性概念和事件类概念,H是概念的上下位关系集…

基于高灵敏度可编程线性霍尔传感器的液压缸位移检测装置(位移传感器)

目前国内工业自动化水平不断提高&#xff0c;工程机械、机床设备等面向自动化的同时&#xff0c;对控制系统的精度要求也越来越严格。在所有使用到液压的机械和设备中&#xff0c;液压缸是必不可少的部件&#xff0c;并且承载着重要的液压转换功能。而液压缸的位移检测在精确控…

Hexo+live2d | 如何把live2d老婆放进自己的博客

参考&#xff1a;Hexo添加Live2D看板娘最新教程live2d-widgetlive2d-widget-models网页/博客Hexo添加live2d游戏角色看板娘,简易添加&#xff0c;碧蓝航线等live2d新型游戏角色模型&#xff08;moc3&#xff09;live2d-moc3jsdelivr方法1可以直接去看参考文章的第一部分的第一篇…

【LeetCode】剑指 Offer 22. 链表中倒数第k个节点 p136 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 1. 题目介绍&#xff08;22. 链表中倒数第k个节点&#xff09; 输入一个链表&#xff0c;输出该链表中倒数第k个节点。为了符合大多数人的习惯&#xff0c;本题从1开始计数&…

C语言-基础了解-21-C输入/输出

C输入/输出 一、标准文件 C 语言把所有的设备都当作文件。所以设备&#xff08;比如显示器&#xff09;被处理的方式与文件相同。以下三个文件会在程序执行时自动打开&#xff0c;以便访问键盘和屏幕 文件指针是访问文件的方式&#xff0c;本节将讲解如何从键盘上读取值以及…

葫芦娃自动化平台-appium实战

一、配置jar包 右键用压缩工具打开jar 修改application.yml文件 name: test666 改为自己名字 libPath、drivenPath:改成自己电脑已有路径 修改appium.properties 文件&#xff0c;方式和上面一样 #APP名称 注意带apk后续 例&#xff1a;test.apk 此文件请放置在项目根目录下 …

Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required 问题处理

错误日志&#xff1a; 解决办法&#xff1a; 1.查看配置文件是否正确 # MyBatis-plus配置 mybatis-plus:# 配置Mapper.xml映射文件mapper-locations: classpath*:/mapper/*Mapper.xml# 配置MyBatis数据返回类型别名&#xff08;默认别名是类名&#xff09;type-aliases-packa…