ros学习随笔

ros学习

根据B站up主:机器人工匠阿杰


VScode

消除错误提示
ctrl+shift+P---->error squiggles---->禁用错误波形曲线


依赖项


Topic话题和Message消息

1、话题Topic是节点间进行持续通讯的一种形式
2、话题通讯的两个节点通过话题的名称建立起话题通讯连接
3、话题通讯的数据叫Message
4、消息通常会通过一定的频率持续不断地发送
publisher
subscriber

5、一个ros节点网络中,可以同时存在多个话题
6、一个话题可以有多个发布者,也可以有多个订阅者
7、一个节点可以对多个话题进行订阅,也可以发布多个话题
8、不同的传感器消息通常会拥有各自独立的话题名称,每个话题只有一个发布者
9、机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发布者

10、launch文件

<launch>
    <node pkg="ssr_pkg" type="yao_node" name="yao_node"/>
    <node pkg="ssr_pkg" type="chao_node" name="chao_node" launch-prefix="gnome-terminal -e" /> //单独输出在一个终端窗口
    <node pkg="atr_pkg" type="ma_node" name="ma_node" output="screen"/>
</launch>

运动控制(矢量运动和旋转运动的结合)

1、矢量运动(上下前后左右)
2、旋转运动(左右旋转,翻滚,前倾,后仰等)
3、右手坐标(食指(指向机器人正前方)x,中指y,拇指z),旋转坐标(握拳,拇指指向x正方向,其他四指是滚转正方向,其他类似)
4、geometry_msgs/twist.msg
5、机器人核心节点

借助仿真wpr_simulation
roslaunch wpr_simulation wpb_simple.launch
rosrun  wpr_simulation demo_vel_ctrl
------------------------------------
速度控制节点-->速度控制话题/cmd_vel-->机器人核心节点

 - 构建一个新软件包,包名vel_pkg
 - 在软件包中新建一个节点,vel_node
 - 在节点中,NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub
 - 构建一个geometry_msgs/twist类型的消息包vel_msg,用来承载要发送的的速度值
 - 构建循环,不停的使用vel_pub发布速度包vel_msg
#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;
}

激光雷达

使用RViz观测传感器数据

ROS系统中的激光雷达消息包格式

在这里插入图片描述

激光雷达节点-(sensor_msgs::LaserScan)--雷达数据话题-(sensor_msgs::LaserScan)--数据获取节点
1、构建新的软件包lidar_pkg
2、创建节点lidar_node
3、申请订阅话题/scan,设置回调函数LidarCallback
4、ROS_INFO
#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"


void LidarCallback(const sensor_msgs::LaserScan lidar_msgs)
{
    float fMidDist = lidar_msgs.ranges[180];
    ROS_INFO("前方测距 range[180] = %f  m", fMidDist);
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"lidar_node");
    ros::NodeHandle n;
    ros::Subscriber lidar_sub = n.subscribe("/scan",10, LidarCallback);
    
    ros::spin();
    return 0;
}

激光雷达避障

激光雷达节点---雷达数据话题---雷达避障节点---速度控制话题---机器人底盘节点
1、NodeHandle发布速度控制话题/cmd_vel
2、构建速度控制包vel_cmd
3、根据激光雷达的测距值,实时调整机器人运动速度,避开障碍物

ROS 中的 IMU 惯性测量单元消息包

sensor_msgs/Imu.msg
加速度

标准消息包

标准消息包std_msgs

 - Bool
 - Byte
 - ...
 -   

常规消息包common_msgs 
 - 几何消息包geometry_msgs
 	-加速度,惯量,四元数,三维矢量。。。
 - 导航消息包nav_msgs
 - 传感器消息包sensor_msgs
 	- 激光雷达,立体相机,运动关节 
 - 自定义消息类型
 	

在这里插入图片描述

自定义消息类型在c++节点

在这里插入图片描述

栅格地图格式

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

SLAM

Hector_Mapping
激光雷达节点-->雷达话题数据/scan-->SLAM节点-->/map地图数据话题-->Rviz
参数:
	(https://wiki.ros.org/hector_mapping)
```yaml
<launch>
	<include file = "$(find wpr_simulation)/launch/wpb_stage_slam.launch" />
	<node pkg = "hector_mapping" type= "hector_mapping" name= "hector_mapping" >
			<param name = value = />
			...  
	</node>
	<node pkg = "rviz" type= "rviz" name= "rviz" />
	<node pkg = "rqt_rboot_steering" type= "rqt_rboot_steering" name= "rqt_rboot_steering" />

</launch>

未完。。。学习中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值