ros学习笔记(11.14实时更新中)
创始人
2024-04-03 16:52:54
0

0.引言

关于深度学习的学习不能仅仅顾着一个CV领域,也需要很多配套的知识,比如图像学、图像处理、信号处理、图像编码、web、应用端;硬件部分则是ROS、slam、plc、嵌入式
作为一个专硕,没必要太深耕课题,提高知识的广度更有必要,故现在开始学习

1.安装和配置环境

1.1虚拟机

ros、slam的一些项目大都是基于linux系统的,所以要不双系统要不使用虚拟机,这里建议使用甲骨文的virtualbox,免费开源而且比vm ware轻量化和快捷。然后配置ubuntu的系统,现在主流的Linux系统就是ubuntu。网上有很多现成的教程,记得安装virtualbox tools

1.2ROS安装

首先需要更新 aptapt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具。类似于pip和conda

sudo apt update

然后调用,意思是按照官方推荐的配置安装桌面化的ros

sudo apt install ros-noetic-desktop-full

太卡的化记得换源,阿里、豆瓣、中科、清华等等

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’

1.3测试

在linux里启动三个终端,分别输入:
命令行1键入:roscore 意味着启动ros核心,不管什么ros程序,cpp、py的都需要启用ros

命令行2键入:rosrun turtlesim turtlesim_node(此时会弹出图形化界面)
rosrun xx yy相当于python xx,其中xx代表功能包名或者可以理解为项目名,在这里turtlesim代表我们使用龟龟这个包,yy代表程序名或者可以理解为功能名或者节点名(节点在ros很重要,相当于类,但我感觉ros是面向过程的,结点只相当于一个功能的触发器),在这里turtlesim_node代表召唤乌龟。

命令行3键入:rosrun turtlesim turtle_teleop_key
同上,只是turtle_teleop_key代表键盘输入,可以控制龟龟行走。
三个命令虽然是顺序输入的,但是在terminal中耦合性太强了,所以要三个终端来分别控制。后面学习了launch之后就好了一些,launch就是类似bash。
在这里插入图片描述

2.通信

三种通信模式:话题通信(发布订阅模式),服务通信(请求响应模式),参数服务器(参数共享模式)

2.1 话题通信

在这里插入图片描述
最简单的握手:发布方先发布消息,然后接收方再接受消息,接收方没接受的话,发布的消息放在队列中等待,队列前的先销毁。
发布方:

/*需求: 实现基本的话题通信,一方发布数据,一方接收数据,实现的关键点:1.发送方2.接收方3.数据(此处为普通文本)PS: 二者需要设置相同的话题消息发布方:循环发布信息:HelloWorld 后缀数字编号实现流程:1.包含头文件 2.初始化 ROS 节点:命名(唯一)3.实例化 ROS 句柄4.实例化 发布者 对象5.组织被发布的数据,并编写逻辑发布数据*/
// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h" //普通文本类型的消息
#include int main(int argc, char  *argv[])
{   //设置编码setlocale(LC_ALL,"");//2.初始化 ROS 节点:命名(唯一)// 参数1和参数2 后期为节点传值会使用// 参数3 是节点名称,是一个标识符,需要保证运行后,在 ROS 网络拓扑中唯一ros::init(argc,argv,"talker");//3.实例化 ROS 句柄ros::NodeHandle nh;//该类封装了 ROS 中的一些常用功能//4.实例化 发布者 对象//泛型: 发布的消息类型//参数1: 要发布到的话题//参数2: 队列中最大保存的消息数,超出此阀值时,先进的先销毁(时间早的先销毁)ros::Publisher pub = nh.advertise("chatter",10);//5.组织被发布的数据,并编写逻辑发布数据//数据(动态组织)std_msgs::String msg;// msg.data = "你好啊!!!";std::string msg_front = "Hello 你好!"; //消息前缀int count = 0; //消息计数器//逻辑(一秒10次)ros::Rate r(1);//节点不死while (ros::ok()){//使用 stringstream 拼接字符串与编号std::stringstream ss;ss << msg_front << count;msg.data = ss.str();//发布消息pub.publish(msg);//加入调试,打印发送的消息ROS_INFO("发送的消息:%s",msg.data.c_str());//根据前面制定的发送贫频率自动休眠 休眠时间 = 1/频率;r.sleep();count++;//循环结束前,让 count 自增//暂无应用ros::spinOnce();}return 0;
}

接收方

/*需求: 实现基本的话题通信,一方发布数据,一方接收数据,实现的关键点:1.发送方2.接收方3.数据(此处为普通文本)消息订阅方:订阅话题并打印接收到的消息实现流程:1.包含头文件 2.初始化 ROS 节点:命名(唯一)3.实例化 ROS 句柄4.实例化 订阅者 对象5.处理订阅的消息(回调函数)6.设置循环调用回调函数*/
// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h"void doMsg(const std_msgs::String::ConstPtr& msg_p){ROS_INFO("我听见:%s",msg_p->data.c_str());// ROS_INFO("我听见:%s",(*msg_p).data.c_str());
}
int main(int argc, char  *argv[])
{setlocale(LC_ALL,"");//2.初始化 ROS 节点:命名(唯一)ros::init(argc,argv,"listener");//3.实例化 ROS 句柄ros::NodeHandle nh;//4.实例化 订阅者 对象ros::Subscriber sub = nh.subscribe("chatter",10,doMsg);//5.处理订阅的消息(回调函数)//     6.设置循环调用回调函数ros::spin();//循环读取接收的数据,并调用回调函数处理return 0;
}

在执行cpp的程序时候,一定要先把配置文件给写好,先编译再运行。

相关内容

热门资讯

贵州百灵纾困纠纷背后:新希望与... 近日,苗药龙头贵州百灵(002424)与华创证券之间的纾困纠纷一直是市场关注的重点,自2025年8月...
*ST南置(002305)披露... 截至2025年12月29日收盘,*ST南置(002305)报收于2.23元,较前一交易日上涨0.9%...
原创 普... 俄罗斯总统弗拉基米尔·普京签署法律,禁止在俄罗斯境内执行外国刑事法院和国际法院的裁决 相关文件已在俄...
盒马购得面包发馊变臭!商家“仅... 面包发馊发臭 近日,市民刘女士向“新民帮侬忙”反映,从盒马鲜生购入的日式面包,竟然发馊发臭!然而事发...
当年龄不再是“免罚金牌”,彰显... 文/九派新闻特约评论员 舒圣祥 明年1月1日起,新修订的《治安管理处罚法》即将正式施行。新法专门新增...
2026年1月1日起施行!“被... 2025年新修订的治安管理处罚法将于2026年1月1日起施行,针对新修订的内容中与市民生活息息相关的...
“车企起诉电池企业第一案”:2... 编者按: 极氪起诉欣旺达这场官司,无论最终迎来怎样的判决,都注定会为整个行业留下一笔深刻的警示财富。...
逃缴1.09亿美元关税!深圳货... 可以说2025是税务大年,卖家不仅要扛住国内申报的节奏,还得适应一件更现实的事:跨境这门生意,账目和...
青岛榜样|奋战公益诉讼一线,诠... “说是检察官,其实我们更像户外工作者,经常跋山涉水、穿梭于田野乡间,哪里有公益受损和群众需求,哪里就...
双星新材(002585)披露市... 截至2025年12月29日收盘,双星新材(002585)报收于6.82元,较前一交易日上涨1.04%...