
ROS学习从0到1
记录自己学习ros的路径,从基础知识开始。
一蓑烟雨荏平生
热爱生活,热爱编程。
展开
-
树莓派4B ubuntu16.04 +ros+melodic 镜像,已经安装好meolodic版本的ros 免费分享
树莓派4B ubuntu16.04 +ros+melodic 镜像,已经安装好meolodic版本的ros 免费分享。原创 2023-02-10 12:37:19 · 366 阅读 · 2 评论 -
Part6.2ROS amcl 定位
1.amcl包<launch><node pkg="amcl" type="amcl" name="amcl" output="screen"> <!-- Publish scans from best pose at a max of 10 Hz --> <param name="odom_model_type" value="diff"/> <param name="odom_alpha5" value="0.1"/> &l原创 2021-12-06 11:46:31 · 408 阅读 · 0 评论 -
Part6.1ROS gmapping 建图实现
1.新建功能包导入依赖: amcl,gmapping,map_server,move_base2.编写gmapping节点launch文件<launch><!--仿真环境下设置为true--><param name="use_sim_time" value="true"/> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">原创 2021-12-06 11:35:10 · 662 阅读 · 0 评论 -
ROS多机通信时间同步 解决the NTP socket is in use, exiting 的问题
一 . 服务端进行的操作 (PC端)1.服务端 pc端 首先要安装NTP用于时间同步sudo apt-get install ntp2.对pc端的文件进行配置sudo nano /etc/ntp.conf添加代码restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap server 127.127.1.0 fudge 127.127.1.0 stratum 10注意第一行的代码,要根据客户端的ip地址来设置,在客户端的终端输入原创 2021-12-05 10:27:08 · 1437 阅读 · 0 评论 -
Part5.3 ros机器人仿真 gazebo篇
1.gezebo 是对小车的物理信息进行仿真因为要用到小车的碰撞参数,以及惯性矩阵,所以要先设置一个xacro头文件<!--封装了球 长方形 圆柱的惯性矩阵的算法--><robot name="base" xmlns:xacro="http://wiki.ros.org/xacro"> <!-- Macro for inertia matrix --> <xacro:macro name="sphere_inertial_matrix" par原创 2021-11-25 16:26:32 · 1277 阅读 · 0 评论 -
Part5.2 ros机器人仿真 XACRO篇 xacro详解
1.xacro在上文中实现了用urdf去构建小车模型,但是在小车模型构建过程中,我们发现,代码的复用性很低,不易对数据进行更改,cacro对函数以及变量进行了封装,用xacro编写的程序可读性更高,代码复用性更好。2.用xacro构建机器人模型2.1 构建底盘模型<!--创建底盘的xacro文件--><!-- 根标签--><robot name="my_base" xmlns:xacro="http://www.ros.org/wiki/xacro">原创 2021-11-23 16:34:56 · 2369 阅读 · 0 评论 -
Part5.1.3 ros机器人仿真 URDF篇 joint标签简介
1.本文通过在urdf进行机器人的建模建模的urdf文件如下:joint 标签是用来描述两个坐标系之间的关系的<robot name="mycar"><!--小车底盘--> <link name="base_link"> <visual> <geometry> <!--设置机器人的形状 盒型,圆柱型,球形--> <!--<box size="1 1 1"/>--> <原创 2021-11-23 10:19:34 · 780 阅读 · 0 评论 -
Part5.1.2 ros机器人仿真 URDF篇 link标签简介
<robot name="mycar"> <link name="base_link"> <visual> <geometry> <!--设置机器人的形状 盒型,圆柱型,球形--> <!--<box size="1 1 1"/>--> <cylinder radius="0.5" length="0.1" /> <!--<sphere radius="0.3原创 2021-11-21 11:34:51 · 663 阅读 · 0 评论 -
Part5.1.1 ros机器人仿真 URDF篇 初识
1.URDFURDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。2.RVIZRViz 是 ROS Visualization Tool 的首字母缩写,直译为ROS的三维可视化工具。它的主要目的是以三维方式显示ROS消息,可以原创 2021-11-21 11:05:52 · 330 阅读 · 0 评论 -
Part4.4ros中的坐标变换 实操
1.实现小乌龟追随案例一只小乌龟在前面跑,另一只追在后面2.launch文件集成<launch><!--小乌龟生成和键盘控制节点--> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" output="screen"/> <node pkg="operation" type="turtlesim_new" name="turtlesim_new" output="scree原创 2021-11-19 16:48:05 · 586 阅读 · 0 评论 -
Part4.3 ros中的坐标变换多坐标变换
1.实现目标相对与world坐标系,有两个子坐标系,已经知道子坐标系的位置,求son1相对于son2的位置2.发布两个坐标系相对于world的位置,用launch文件实现<launch><!--发布son1和son2相对于world的关系--><node pkg="tf2_ros" name="son1toworld" type="static_transform_publisher" args="5 0 0 0 0 0 /world /son1" output="s原创 2021-11-19 10:35:53 · 853 阅读 · 0 评论 -
Part4.2 ros中的坐标变换 动态坐标变换
1.实现目标 实时接受小乌龟坐标系相对于word坐标系的位置关系然后把乌龟坐标系中的点转变为world坐标系中的点2.发布方实现#include "ros/ros.h"#include "turtlesim/Pose.h" //乌龟姿态的消息类型#include "tf2_ros/transform_broadcaster.h" //发布对象依赖的头文件#include "geometry_msgs/TransformStamped.h" //组织发布坐标系之间的关系所需要的头文件#inclu原创 2021-11-18 17:35:21 · 478 阅读 · 0 评论 -
Part4.1ros中的坐标变换 静态坐标变换
1.简述本例来实现一个座标点在另一个坐标系中的转换,其中转换函数ros已经给封装好了。依赖的功能包:tf2、tf2_ros、tf2_geometry_msgs、roscpp rospy std_msgs geometry_msgs2.发布方的实现去发布两个坐标系之间的关系#include "ros/ros.h"#include "tf2_ros/static_transform_broadcaster.h" //发布对象依赖的头文件#include "geometry_msgs/Transfo原创 2021-11-18 11:54:31 · 1367 阅读 · 0 评论 -
Part3.2 launch 文件的应用(其他元素)
1.node中的属性之argsargs 是把外部的参数传到node节点中去。<launch><node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/><node pkg="operation" type="turtlesim_new" name="turtlesim_new" args="5 5 1.7 turtlesim2" output="screen"/></launc原创 2021-11-16 16:07:46 · 682 阅读 · 0 评论 -
Part3.1 launch 文件的应用(基本元素)
1.launch简介用简短的一句话来形容launch就是,批量发布节点的机器。为使用者一次性发布多个节点,以及对每个节点进行配置提供了便利。2.最简单的launch文件<launch> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/><node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key"/&原创 2021-11-16 09:51:02 · 208 阅读 · 0 评论 -
Part2.3.3 参数通信实际操作 C++实现
用两套API来实现小乌龟显示背景的更换#include "ros/ros.h"/*更换小乌龟的显示背景*//* ding@ding-TravelMate-P259-G2-MG:~$ rosparam list/rosdistro/roslaunch/uris/host_ding_travelmate_p259_g2_mg__44777/rosversion/run_id/turtlesim/background_b/turtlesim/background_g/turtlesim/b原创 2021-11-12 20:24:48 · 797 阅读 · 0 评论 -
Part2.3.2 参数通信的实践 (C++)
本文以c语言为例子,对参数进行增删改查的操作#include "ros/ros.h"/* 实现参数的新增和修改 需求:首先设置小车的共享参数和类型,半径 0.5 然后修改为 0.2 实现:使用两套API 使用1.ros::NodeHandle setParam(“键”,值) 2.ros::param set("键",值)*/ int main(int argc,char *argv[]) { ros::init(argc原创 2021-11-12 19:00:02 · 820 阅读 · 0 评论 -
Part2.3.1 初识ros(noetic) 通信方式总结 参数通信
1.理论模型参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色:ROS Master (管理者)Talker (参数设置者)Listener (参数调用者)整个流程由以下步骤实现:1.Talker 设置参数Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。2.Listener 获取参数Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。3.ROS Master 向原创 2021-11-12 18:57:12 · 292 阅读 · 0 评论 -
Part2.2.3 服务通信实际操作 C++实现
调用服务去生成一只新的乌龟与话题通信类似,首先去获得所有服务的话题,/spawn .然后查看话题的类型,turtlesim/Spawn,然后查看消息的具体内容都包括什么,具体的代码实现如下所示。#include "ros/ros.h"#include "turtlesim/Spawn.h"#include <cstdlib>/*调用服务/spawn 去生成一只新的乌龟ding@ding-TravelMate-P259-G2-MG:~$ rosservice list/clear原创 2021-11-12 18:40:04 · 807 阅读 · 0 评论 -
Part 2.2.2 服务通信的实践 (C++)
自定义消息类型首先在功能包下新建srv文件夹,然后创建srv文件 。本次例子是来实现客户端提交两个数,服务端来进行求和。配置文件如下:订阅方的实现:#include"ros/ros.h"#include "service_client/Sum.h" //自定义服务消息类型#include <cstdlib>int main(int argc,char *argv[]){ ros::init(argc,argv,"Sum_client"); //初始化节点 if(原创 2021-11-12 11:52:15 · 975 阅读 · 0 评论 -
Part2.2.1 初识ros(noetic) 通信方式总结 服务通信
服务通信理论模型 服务通信较之于话题通信更简单些,理论模型如下图所示,该模型中涉及到三个角色:ROS master(管理者)Server(服务端)Client(客户端)0.Server注册Server 启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含提供的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。1.Client注册Client 启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要请求的服务的名称。ROS Mast..原创 2021-11-12 10:44:16 · 482 阅读 · 0 评论 -
Part2.1.4话题通信实际操作 C++实现
1.之前大家已经知道了如何去生成小乌龟节点,本节会带着大家通过话题通信去控制小乌龟进行运动,以及去订阅乌龟的运动信息。首先,要知道控制乌龟运动的节点话题是什么首先启动 乌龟显示节点然后通过rostopic list 去查看所有的活跃话题其中/turtle1/cmd_vel 是速度订阅话题,接下来要看一下该话题的消息类型,通过rostopic type /turtle1/cmd_vel话题的消息类型为 geometry_msgs/Twist ,然后去看一下该消息类型的信息和参数,通过rosms原创 2021-11-11 17:18:15 · 534 阅读 · 0 评论 -
Part2.1.3 话题通信的实践 自定义消息类型(C++)
1 组织要发布的数据在功能包的src目录下,msg文件夹,在msg文件夹下新建msg类型的文件消息类型格式string nameuint8 sexuint8 ageuint8 unknown = 0uint8 male = 1 uint8 female = 2.xml配置文件cmake 配置文件2.发布方程序#include "ros/ros.h"#include "sub_pub/Person.h"int main(int argc,char*argv[]){原创 2021-11-11 10:13:44 · 475 阅读 · 0 评论 -
Part2.1.2 话题通信的实践 (C++)
1 发布方的实现/*包含的头文件*/#include "ros/ros.h"#include"std_msgs/String.h"#include <sstream>/* 发布一个话题 hello,消息类型为string*/int main(int argc,char *argv[]){ setlocale(LC_ALL,"");/*初始化ros节点 argc,和argv可用于在调用launch文件时输入参数 */ ros::init(argc,argv,"原创 2021-11-11 09:57:35 · 126 阅读 · 0 评论 -
Part2.1.1 初识ros(noetic) 通信方式总结 话题通信
一 . ros 的通信方式的简介1 .话题通信话题通信是ros的基本通信方式之一。话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三个角色:ROS Master (管理者)Talker (发布者)Listener (订阅者)ROS Master 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接,连接建立后,Talker 可以发布消息,且发布的消息会被 Listene原创 2021-11-09 21:23:25 · 1008 阅读 · 0 评论 -
part 1 ros的安装
ROS 的安装1.关于ros是什么,很多教程都给出了解释,在此不再赘述。只是给出在ubuntu上安装ros的步骤。2.2.1配置ubuntu的软件和更新配置ubuntu的软件和更新,允许安装不经认证的软件。首先打开“软件和更新”对话框,具体可以在 Ubuntu 搜索按钮中搜索。打开后按照下图进行配置(确保勾选了"restricted", “universe,” 和 “multiverse.”)2.2.设置安装源sudo sh -c 'echo "deb http://packages.ro原创 2021-11-08 21:38:08 · 217 阅读 · 0 评论