ros入门(题尾一键安装)

2023-05-16

运行ros

` 提示:因为手头有英伟达树莓派跟激光雷达,也有ros小车


直接上现成的,但是会卡。而且不好用,所以建议自己安装一个

链接:https://pan.baidu.com/s/16eDEqTB7y9wE9ghmqoTofA
提取码:yylk

文章目录

  • 运行ros
  • 前言
  • 一、安装ros
    • 1、ubunutu安装ros
  • 二、试试?
    • 1.配置环境
    • 2.小海龟
  • 三、基础
    • 1.建立基础工程
    • 2.创建功能包
  • 四.自定义话题消息类型
    • 应用消息
  • 五.自定义服务消息类型
  • 区别


前言

手头有雷达,所以像试试ros操作系统


在这里插入图片描述

一、安装ros

ros对于ubuntu是有版本要求的,一下是版本对应关系

ubuntu版本对应ros版本
16.04Kinetic
18.04Melodic
20.04Noetic

这里我们可以lsb_release -a查看我们的ubunutu版本,避免出错

book@100ask:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.2 LTS
Release:	18.04
Codename:	bionic
book@100ask:~$ 

1、ubunutu安装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 apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80'   --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如下代表成功
在这里插入图片描述

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

安装malodic_ros,这一步时间还挺长的

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

在这里插入图片描述

然后就是初始化

sudo pip3 install rosdepc
sudo rosdepc init
rosdepc update

链接: link

在这里插入图片描述

二、试试?

1.配置环境

打开终端输入以下,

echo "source /opt/ros/melodic/setup.bash" >>~/.bashrc
 //这样每次打开终端就不用重复输入
source ~/.bashrc 

也可以打开文件看看
在这里插入图片描述

2.小海龟

打开三个终端,分别输入

roscore   所有的ros都必须启动这个,就是管理者意思
rosrun turtlesim turtlesim_node   运行这个就会出现小海龟
rosrun turtlesim turtle_teleop_key   运行这个就会可以通过小键盘去控制小海龟

在这里插入图片描述

更简单的方法
一行代码安装ROS链接: 一行代码安装ROS

三、基础

1.建立基础工程

mkdir -p catkin_ws/src
创建联级目录
cd catkin_ws/src
到src目录后初始化工作空间
catkin_init_workspace
返回 catkin_make目录
catkin_make

ls发现当前目录有个devel跟build,具体干嘛的后面再说,大概就是build用来储存一些编译后的文件,devel是一些环境设置的文件,而为了以后的方便操作,将本地的工作空间加入的终端打开的环境变量中,我们可以在home目录下打开 .bashrc 这个文件并且加入

source /home/book/catkin_ws/devel/setup.bash

到 .bashrc 里面如图,因为运行某些程序的时候需要此终端有这个环境
在这里插入图片描述

2.创建功能包

我们到了其功能包cd catkin_ws/src/目录下
然后创建我们的功能包,msg是名称,后面两个是他的依赖项

catkin_create_pkg msg std_msgs roscpp 

里面有这四个文件,CMakeLists.txt是编译文件,跟Makefile一样,
package.xml 是配置文件,在嵌入式中很常见,主要设置一些编译过程中需要的依赖项,以及储存一些设置断电后一些系统设置的系统环境变量

CMakeLists.txt  include  package.xml  src

在这里大概讲下他的文件结构,小编开始学习的时候也有点发怵

四.自定义话题消息类型

我们在功能包目录下创建msg文件,在此文件夹目录下创建一个后为.msg的animal.msg文件,输入以下文本,实际机器人情况就是一些gps的数据

string animal
string action
uint8  age
uint8  sex
uint8  x
uint8  y
uint8  z  

然后在我们的功能包目录下的package.xml 最后加入

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

代表我们能编译msg文件

在这里插入图片描述
然后打开我们的CMakeLists.txt自行修改,大概就是配置编译.msg文件
在这里插入图片描述

在这里插入图片描述
找到catkin_package,加入message_runtime

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES server
  CATKIN_DEPENDS roscpp std_msgs message_runtime
#  DEPENDS system_lib
)

然后我们回到工作空间主目录,进行catkin_make
在这里插入图片描述
此时我们就会发现生成了一个.h文件
在这里插入图片描述

应用消息

同样在CMakeLists。txt下进行编辑
在这里插入图片描述

add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher  ${catkin_LIBRARIES})
add_dependencies(person_publisher  ${PROJECT_NAME}_generate_messages_cpp )

add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

pub

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
 */
 
#include <ros/ros.h>
#include "msg/animal.h"

int main(int argc, char **argv)
{
    // ROS节点初始化
    ros::init(argc, argv, "person_publisher");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
    ros::Publisher person_info_pub = n.advertise<msg::animal>("/person_info", 10);

    // 设置循环的频率
    ros::Rate loop_rate(1);

    int count = 0;
    while (ros::ok())
    {
        // 初始化learning_topic::Person类型的消息
    	msg::animal person_msg;
		person_msg.action = "creep";
        person_msg.animal="cat";
		person_msg.age  = 4;
		person_msg.sex  = 0;
        person_msg.x=1;
        person_msg.y=2;
        person_msg.z=3;

        // 发布消息
		person_info_pub.publish(person_msg);

       	ROS_INFO("Publish Person Info: action:%s  age:%d  sex:%d", 
				  person_msg.action.c_str(), person_msg.age, person_msg.sex);

        // 按照循环频率延时
        loop_rate.sleep();
    }

    return 0;
}

sub

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将订阅/person_info话题,自定义消息类型learning_topic::Person
 */
 
#include <ros/ros.h>
#include "msg/animal.h"

// 接收到订阅的消息后,会进入消息回调函数
void personInfoCallback(const msg::animal::ConstPtr& msg)
{
    // 将接收到的消息打印出来
    ROS_INFO("Subcribe Person Info: action:%s   animal:%s   age:%d  sex:%s x:%d  y:%d  x:%d", 
			 msg->action.c_str(), msg->animal.c_str(), msg->age,msg->sex ? "公" : "母",msg->x,msg->y,msg->z );
}

int main(int argc, char **argv)
{
    // 初始化ROS节点
    ros::init(argc, argv, "person_subscriber");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallback
    ros::Subscriber person_info_sub = n.subscribe("/person_info", 10, personInfoCallback);

    // 循环等待回调函数
    ros::spin();

    return 0;
}
结果

在这里插入图片描述

五.自定义服务消息类型

我们在功能包目录下创建msg文件,在此文件夹目录下创建一个后为.srv的message.srv文件,输入以下文本,实际机器人情况就是一些gps的数据,跟话题消息很像对不对,但是多了一行—下面的回应,意思是服务消息是有回应的

string name
uint8  age
uint8  sex

uint8 unknown = 0
uint8 male    = 1
uint8 female  = 2

---
string result

然后在我们的功能包目录下的package.xml 最后加入

  <build_depend>message_generation</build_depend>
  <exec_depend>message_runtime</exec_depend>

代表我们能编译msg文件

在这里插入图片描述
然后打开我们的CMakeLists.txt自行修改,大概就是配置编译.msg文件
在这里插入图片描述
加入服务的消息编译
在这里插入图片描述

找到catkin_package,加入message_runtime

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES server
  CATKIN_DEPENDS roscpp std_msgs message_runtime
#  DEPENDS system_lib
)

最后跟话题一样,对应用程序进行编译

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

运行即可

区别

我们可以看到话题有个队列去存消息,然年去更新掉最开始的信息,类似于堆,话题跟服务的大概区别就udp跟tcp,我们再服务的有个callback有个返回,可以想象类似于tcp的返回的sck包

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ros入门(题尾一键安装) 的相关文章

  • kinova-jaco2使用Moveit!控制真实机械臂抓取固定点物体

    kinova jaco2使用Moveit 控制真实机械臂抓取固定点物体 一 机械臂坐标系 坐标系方向 位姿方向 轴的起始点 二 启动机械臂和Moveit 三 实现抓取 python代码 python文件建议直接用python启动 四 遇到的
  • Python 实现 Dijkstar 路径规划算法

    Dijstar 最短路径算法 用于计算起始点到最终点的最短路径 一般采用的是贪心算法策略 原理可以参考 图解 Open list 和 close list 环境 Terminal 需要预先安装两个库 matplotlib 和 math pi
  • ROS系统基本功能的使用详解(基本指令/节点/服务/启动文件/动态参数)

    ROS系统基本功能的使用详解 一 创建工作空间 二 创建与编译ROS功能包 三 ROS的基本命令 3 1 节点 3 2 主题 3 3 服务 3 4 参数服务器 四 节点的创建与运行 4 1 创建源文件 4 2 修改CMakeLists tx
  • SLAM-hector_slam 简介与使用

    hector slam功能包使用高斯牛顿方法 不需要里程计数据 只根据激光信息便可构建地图 所以他的总体框架如下 hector slam功能包 hector slam的核心节点是hector mapping 它订阅 scan 话题以获取SL
  • V-REP安装

    小知识 是当前目录 是父级目录 是根目录 1 下载V REP 官网地址 http www v rep eu downloads html 我用ubuntu16 04下载V REP PRO EDU V3 5 0 Linux tar 2 解压安
  • ROS学习(1)——ROS1和ROS2的区别

    因为机器人是一个系统工程 它包括了机械臂结构 电子电路 驱动程序 通信框架 组装集成 调试和各种感知决策算法等方面 任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 但是我们又希望自己能造出一个机器人跑一跑 验证一下自己的算法 所以
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • ROS 第四天 ROS中的关键组件

    1 Launch文件 通过XML文件实现多节点的配置和启动 可自动启动ROS Master
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • 如何将曲面拟合到一组数据点并获得曲面方程

    乌班图 ROS 思维 Python程序 我正在尝试获取适合点云数据中的一组点的表面方程 数据来自激光雷达扫描仪 我在 rviz 中选择整个扫描的一部分 并获得该选择的坐标选定表面的图片 所选曲面并不总是如此线性 因为材质中可能存在轻微的曲线
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • ROS 从 python 节点发布数组

    我是 ros python 的新手 我正在尝试从 python ros 节点发布一个一维数组 我使用 Int32MultiArray 但我无法理解多数组中布局的概念 谁能给我解释一下吗 或者还有其他方式发布数组吗 Thanks usr bi
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c

随机推荐

  • WIFI原理

    1 路由器向下提供给接入的用户一个id xff0c 也就是类似于192 168 1 231 xff0c 这样的ip地址 xff0c 所有在这个路由器下的用户的ip地址的前面的网络号是相同的 xff0c 都是192 168 1 xff08 x
  • :: 在 C++ 中的作用

    一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般是该类的成员名称 xff0c C 43 43 为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 另外 xff0c 在类外定义类中已申明的函数成员时 x
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • 基于stm32的mpu6050传感器实验

    64 TOCMPU6050 43 STM32学习笔记 学习了差不多两天的mpu6050 xff0c 参考了很多篇博客还有看一些资料 xff0c 今晚终于把这个东西在我的串口显示出来了 xff0c 下面就废话不多说 xff0c 开始我的笔记啦
  • Ubuntu 20.04 ROS Noetic及Realsense-ROS的安装和多机通信

    Ubuntu 20 04 ROS Noetic及Realsense ROS的安装和多机通信 1 Ubuntu20 04 ROS Noetic安装 参考官方安装教程 ROS Installation 请以以上安装步骤为准 xff0c 因为随着
  • 机械硬盘基本知识

    硬盘内部的物理结构很复杂 xff0c 只能从大的颗粒度去看内部的结构 xff0c 总体来说 xff0c 硬盘结构包括 xff1a 盘片 磁头 盘片主轴 控制电机 磁头控制器 数据转换器 接口 缓存 等几个部份 所有的盘片 xff08 一般硬
  • RTK八大基础知识

    RTK作为现代化测量中的测绘仪器 xff0c 已经非常普及 RTK在测量中的优越性也是不言而喻 为了能让RTK的优越性能在使用中充分的发挥出来 xff0c 为了能让RTK使用人员能灵活的应用RTK xff0c 我认为RTK使用人员必须了解以
  • 游戏思考04:网络游戏同步算法产生原因和相关介绍:跟随(插值)、预测、延迟补偿,三种算法(未完待续02/07)

    文章目录 一 网络同步的典型场景二 简单粗暴的数据同步为何行不通 xff1f xff08 帧同步的难题 xff09 1 xff09 网络同步的流程2 xff09 网络延迟和抖动的直观解释3 xff09 产生卡顿 瞬移的原因分析4 xff09
  • 51单片机定时器实现流水灯实验

    实验内容 xff1a 利用AT89C51的定时器0 方式1实现流水灯效果 xff0c 并用仿真验证 定时器0方式1的工作方式 xff1a 定时器的工作方式选择由寄存器TMOD控制 方式选择通过M0和M1控制 xff0c 方式1为16位定时器
  • 51单片机七段数码管显示时钟无按键控制—①—74HC595版

    参考链接 xff1a 51单片机七段数码管显示时钟加按键控制 74HC595版 51单片机七段数码管显示时钟加按键控制 74HC595版 文章目录 一 实验内容 xff1a 二 实验分析 xff1a 三 仿真图 xff1a 四 源代码 xf
  • 51单片机lcd1602显示时间日期

    实验内容 xff1a 使用51单片机控制LCD1602液晶显示屏显示 时间 日期 星期 温度 信息 xff0c 并可通过按键设置值 仿真效果展示 xff1a proteus仿真图 xff1a 硬件测试图 xff1a 说明 xff1a 硬件测
  • 51单片机实现普通时钟

    一 实验内容 xff1a 1 打开单片机 xff0c 数码管显示当前时间0 0 0 xff0c 时 分 秒 xff08 时间为24小时制 xff09 2 按键1 xff1a 按下一次进入秒的修改 xff0c 按下两次修改分钟 xff0c 按
  • No suitable kits found.——QT创建项目错误

    才开始学QT就遇到一个问题 xff0c 无法创建项目 xff0c 在 Kits 这一步提示 No suitable kits found 我的错误原因 xff1a 因为以前装过MinGw环境 xff0c 而且环境里还包含着中文 xff0c
  • Keil5高亮显示相同变量加上护眼配色方案

    先上效果图 xff1a 我们知道 xff0c 之前版本的Keil是不会对相同代码进行高亮显示的 xff0c 不过现在最新版的Keil已经支持对其高亮显示了 xff0c 只不过其配色还是和原来一样有些差强人意 初始效果如下 xff1a 实现上
  • 螺旋队列公式解释

    以1为坐标零点 xff0c 向右为X正 xff0c 向下为Y正 xff0c 任意输入一坐标 xff08 x y xff0c r 61 max x y 为当前所在层数 xff0c 得到下面公式 上边 xff1a top 61 max r 43
  • Bilibili缓存视频在电脑端直接打开方式

    哔哩哔哩移动端缓存的视频和音频分开了 xff0c 使用PotPlayer播放器可以在播放视频的时候加载音频 xff0c 从而不用合并两个文件 具体操作 xff1a 使用PotPlayer播放器打开video m4s文件 打开后点鼠标右键 x
  • C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数 xff0c 正确的函数形参应该是怎样的 xff1f 它是应该声明为一个指针还是一个数组 xff1f 调用函数时实际传递的是一个指针 xff0c 所以函数的形参实际上是一个指针 xff0c
  • 有道词典离线数据包位置

    软件版本 xff1a 9 1 0 位置 xff1a C Users 用户名 AppData Local Yodao DeskDict nmt model 将离线包放入nmt model文件夹后重新启动有道词典即可断网使用长句翻译 汉英互译离
  • 改变Keil5所有窗口的背景颜色

    在网上找了很多都没有找到如何更改Keil5左侧和下侧的背景颜色 xff0c 后来根据一些提示找到了改背景的方法 xff0c 在此分享给有需要的人 首先 xff0c 更换中间那块的背景颜色相信大家都会 xff0c 不过我还是写一下 xff0c
  • ros入门(题尾一键安装)

    运行ros 96 提示 xff1a 因为手头有英伟达树莓派跟激光雷达 xff0c 也有ros小车 直接上现成的 xff0c 但是会卡 而且不好用 xff0c 所以建议自己安装一个 链接 xff1a https pan baidu com s