RM上位机培训——任务三

一、安装ROS

参考链接:

【ROS】Ubuntu18.04下安装ROS-Melodic的步骤及rosdep update报错的解决方案_Quentin_HIT的博客-CSDN博客_ros国内源

noetic/Installation/Ubuntu - ROS Wiki

机器人操作系统 ROS 快速入门教程_哔哩哔哩_bilibili

二、学习ROS

1、ROS核心概念

1、节点Node 节点管理器ROS Master

2、节点通讯方式——话题通信 服务通信

1)话题通信——异步通信(单向传输 发布/订阅模型)

        话题Topic 消息Message

 

 

多话题模型

 

             6、可以通过ROS Index 网站 找到Message的数据类型和数据容量

             简单理解:

             将 消息类型 理解为 结构体类型

             将 实际发送的消息包 理解为 使用结构体类型定义的结构体变量

 2)服务通信——同步通信(有反馈的双向传输 请求/应答模型 通常request和response各1次)

 

 话题与服务的区别

 

 (有点像串口的USART、UART)

 3、参数

(有点像全局静态变量)

4、文件系统

包package

 

 2、ROS命令行工具

格式:rosxxxx

turtle三行:

        roscore
        rosrun turtlesim turtlesim_node
        rosrun turtlesim turtle_teleop_key

rqt_xxx:基于QT的可视化工具

rqt_graph:显示系统计算图

rosnode:显示系统node的可操作命令

rostopic:显示系统当前topic可操作命令

rosservice:显示系统当前service可操作命令

tips:

按一次/两次tab补全

按两次tab列出所有node

 rosbag:话题记录+话题复现(记录数据)

1)话题记录

 -a:-all

-O:将数据保存成压缩包

cmd_record:压缩包名

2)话题复现

rosbag  paly + 压缩包名.bag

3、创建工作空间与功能包

 

 

 4、发布者Publisher的编程实现

 

 

add_executable(文件名 src/文件名.cpp)
target_link_libraries(文件名 ${catkin_LIBRARIES})

 

 

三、Code

#include <ros/ros.h>
#include <geometry_msgs/Twist.h> 
 
int main(int argc, char *argv[])
{   
    //ROS节点初始化
    ros::init(argc, argv, "vel_ctrl");

    // 创建节点句柄  
    ros::NodeHandle n;         
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
    
    ROS_INFO("draw_circle start...");//输出显示信息
    while(ros::ok())
    {
        geometry_msgs::Twist vel_cmd; 
 
        vel_cmd.linear.x = 2.0;
        vel_cmd.linear.y = 0.0; 
        vel_cmd.linear.z = 0.0;
 
        vel_cmd.angular.x = 0;
        vel_cmd.angular.y = 0;
        vel_cmd.angular.z = 1.8; 
        vel_pub.publish(vel_cmd); 
 
        ros::spinOnce();
    }
    return 0;
}

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#define PI 3.14159265358979323846
 
int main(int argc, char **argv){
  ros::init(argc, argv, "draw_rectangle");   
  std::string topic = "/turtle1/cmd_vel"; 
  ros::NodeHandle n;
  ros::Publisher cmdVelPub = n.advertise<geometry_msgs::Twist>(topic, 1);
  
  ros::Rate loopRate(2);
  
  ROS_INFO("draw_retangle start...");
  geometry_msgs::Twist speed; 

  int count = 0;
  while (ros::ok()){
    speed.linear.x = 1; // 设置线速度为1m/s,正为前进,负为后退
    speed.linear.y = 0;
    speed.linear.z = 0;
    speed.angular.x = 0;
    speed.angular.y = 0;
    speed.angular.z = 0; 
    count++;
    while(count == 5)
    {
        count=0;
        speed.angular.z = PI; //转90°
    }
    cmdVelPub.publish(speed); 
    ros::spinOnce();
    loopRate.sleep();
  }
 
  return 0;
}

参考:

10.发布者Publisher的编程实现_哔哩哔哩_bilibili

 13.在ROS中,使用C++编写Publisher发布者节点_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值