ros1学习

本文详细介绍了在ROS中创建节点、使用topics与messages通信,通过C++实现机器人运动控制,以及使用小海龟仿真器和hector_mapping进行SLAM建图的过程。作者分享了从基础到实践的教程,包括launch文件的编写和使用工具如rqt_graph和rviz进行可视化。
摘要由CSDN通过智能技术生成

本文作为我学习ROS的笔记,大多教程来自B站UP——机器人工匠阿杰讲解很通透,适合我这种新手入门

ros1小海龟仿真器

ROS通信实操(小乌龟通信实现)

1、打开仿真器并用键盘控制
2、用话题查看器查看两个node之间的消息传递

rosrun rqt_graph rqt_graph

在这里插入图片描述teleop_turtle与turtlesim两个节点之间通过/turtle1/cmd_vel进行通信,也就是话题,按键信息会发布在这个话题上,然后turtlesim_node从这个话题接受信息控制其移动,所以需要写一个文件发送控制指令。

3、发布节点使小乌龟圆周运动
在这里插入图片描述

# Twist后的指令通过‘Tab’键补全
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:                                                      
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0" 

工作空间创建
ROS学习–第3篇:ROS基础—创建工作空间

节点的创建

在这里插入图片描述

cd 

在这里插入图片描述

#include <ros/ros.h>

int main(int argc, char*argv[])
{
    /* code */
    ros::init(argc, argv, "chao_node");
    printf("我的枪去而复返\n");
    while(ros::ok())
    {
        printf("别投\n");
    }
    return 0;
}

CmakeLists.txt中最下面添加

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

编译

在这里插入代码片

TOPIC 话题与Message消息

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char*argv[])
{
    /* code */
    ros::init(argc, argv, "chao_node");
    printf("我的枪去而复返\n");

    ros::NodeHandle nh;
    //  < 消息类型 >(“话题名称”,缓冲区消息数量)
    ros::Publisher pub = nh.advertise<std_msgs::String>("kuai_shang_che_kai_hei",10);

    ros::Rate loop_rate(10);
    while(ros::ok())
    {
        printf("我要开始刷屏了!\n");
        std_msgs::String msg;
        msg.data = "国服马超代飞";
        pub.publish(msg);
        loop_rate.sleep();
    }
    return 0;
}


rostopic echo /kuai_shang_che_kai_hei

下面data显示是由于中文的问题,换成英文没有问题
在这里插入图片描述

查看消息发布频率

rostopic hz /kuai_shang_che_kai_hei

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建订阅者节点

ma_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>

void chao_callback(std_msgs::String msg)
{
    printf(msg.data.c_str());  //  .c_str  转换成string型
    printf("\n");
}

void yao_callback(std_msgs::String msg)
{
    printf(msg.data.c_str());  //  .c_str  转换成string型
    printf("\n");
}

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "ma_node");

    ros::NodeHandle nh;

    //最后一个是回调函数
    ros::Subscriber sub = nh.subscribe("kuai_shang_che_kai_hei",10,chao_callback);
    ros::Subscriber sub_2 = nh.subscribe("ge_ge_dai_wo",10,yao_callback);

    while (ros::ok())
    {
        ros::spinOnce();  //查看有无新消息包收到
    }
    return 0;
}

在终端分别开启三个节点

rosrun ssr_pkg chao_node 

 #发布者yao_node
rosrun ssr_pkg yao_node

# 订阅者ma_node
rosrun atr_pkg ma_node 

在这里插入图片描述
使用如下指令查看话题和消息的通讯关系

rqt_graph

在这里插入图片描述
在这里插入图片描述

Launch文件编写

在这里插入图片描述

launch文件是只要有一个节点,就会启动roscore,所以不用单独写roscore
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
编写如下launch启动文件

<launch>

    <node pkg = "ssr_pkg" type = "yao_node" name = "yao_node" />
    <node pkg = "ssr_pkg" type = "chao_node" name = "chao_node" />
    <node pkg = "atr_pkg" type = "ma_node" name = "ma_node" output = "screen"/>

</launch>

在终端用如下指令运行

roslaunch atr_pkg kai_hei.launch

在这里插入图片描述

机器人运动控制的C++实现(发布速度)

vel_node.cpp

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char *argv[])
{
    ros::init(argc ,argv , "vel_node");

    ros::NodeHandle n;
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel",10);

    geometry_msgs::Twist vel_msg;
    vel_msg.linear.x = 0.1;
    vel_msg.linear.y = 0;
    vel_msg.linear.z = 0;
    vel_msg.angular.x = 0;
    vel_msg.angular.y = 0;
    vel_msg.angular.z = 0;

    ros::Rate r(30);
    while (ros::ok())
    {
        vel_pub.publish(vel_msg);
        r.sleep();
    }
    return 0;
}

# 打开仿真环境
roslaunch wpr_simulation wpb_simple.launch

# 速度发布
rosrun vel_pkg vel_node

在这里插入图片描述

hector-mapping初体验(slam建图)

# 安装(若安装过wpr_simulation依赖项,则无需安装)
sudo apt install ros-melodic-hector-mapping

# 运行建图
roslaunch hector_mapping hector_mapping

#在rviz中订阅map
rviz

在rviz中分别订阅三个话题
在这里插入图片描述在这里插入图片描述

# 运行小车控制器
rosrun rqt_robot_steering rqt_robot_steering

在这里插入图片描述

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值