ros
鲁伯特1996
ros cpp 单片机
展开
-
ros自定义消息队列
ros中默认消息队列只有一个,也就是说,即使你的话题在另外一个线程注册订阅,也会在主线程通过ros::spin / ros::spinOnce来获取到该话题的消息,并进入回调。如果说,我们主线程需要固定频率来进行计算,而有一个服务/话题需要消耗很长时间,由于只有一个消息队列该服务会有阻塞到主线程的运算的这里就引入了自定义消息队列,我们可以将比较耗时间的服务,或者需要分离的两类计算分别放在不同的队列中比较常见的方式 ros::NodeHandle nh; nh.setCallbackQueue原创 2022-05-07 16:34:07 · 1288 阅读 · 0 评论 -
锚点导航探索
工业amr在运动时,不可能让其进行自由导航特别是多机时,而是通过调度等进行停障,此时要将我们所用的栅格图转化为拓扑图,类似于磁条在敲代码过程中,困扰很久的问题,std::vector不可直接取地址,因为当vector扩容时,会新申请一段连续内存将现有的数据拷贝过去,释放掉原来的内存,这就导致了开始取得地址没有了。当vector扩容时,全部地址都会发生改变...原创 2022-03-16 17:15:37 · 530 阅读 · 3 评论 -
movebase存在的问题
movebase重大bug解析:当机器人在PLANNING状态时,只会开启plan线程,而不会发布速度及其他操作(在executeCycle函数中switch中只会进入PLANNING),而在plan线程中,当运行满足(makplan规划不出路径->当前处于PLANNING状态->未超出设定的全局规划失败次数)三个条件时程序竟然什么也不做,一直规划,直到超出设定的全局规划失败次数才会进入recovery,然后就导致这过程中没有人发布速度,一直按上一次控制状态CONTROLLING发布的速度行驶原创 2022-03-15 16:25:17 · 1108 阅读 · 3 评论 -
movebase软件流程图
忽略movebase流程中的位置震荡,遇到此情况比较少流程图未按照标准,主要是状态机流程太多原创 2022-03-15 16:22:57 · 660 阅读 · 0 评论 -
move_base参数 footprint 阅读
参数movebase costmap中关于机器人关于机器人模型的描述中包含两个参数,robot_radius或者footprint,robot_radius没得说,当机器人是圆形时机器人的半径,而机器人是多边形时才用footprint参数。首先,我们拿一个简单的矩形机器人来做示例,假如机器人长1.0米宽0.5米,首先我们参数设置为:footprint: [[0.5, 0.25], [0.5, -0.25], [-0.5, -0.25], [-0.5, 0.25]] 首先在costmap_2d功能原创 2022-01-19 17:18:58 · 1979 阅读 · 0 评论 -
ros虚拟墙
编写一个基于costmap2d的虚拟墙插件我们可以根据costmap2d中的三个插件来编写一个我们自己的虚拟墙插件,主要使用setcost方法来实现。git下载源码编译后打开功能包中的demo文件夹我们根据其中的global_costmap_params.yaml和local_costmap_params.yaml在plugins添加 -{name: virtual_wall, type:"virtual_wall::VirtuallWall"}即可重新打开导航,然后使用rviz中的"Publ原创 2021-06-20 15:16:47 · 2618 阅读 · 17 评论 -
global_planner解析(5)
前面介绍了我们的搜索算法,下面来介绍我们的主要的插件实现函数 planner_core.cppplanner_core.h#ifndef _PLANNERCORE_H#define _PLANNERCORE_H#define POT_HIGH 10e10#include <ros/ros.h>#include <costmap_2d/costmap_2d.h>#include <geometry_msgs/PoseStamped.h>#include &原创 2021-03-18 09:53:23 · 1206 阅读 · 0 评论 -
global_planner解析(4)
前面简单介绍了路径搜索的基类Expander,里面主要的就是calculatePotentials路径搜索的方法接口,还有路径搜索的扩展方式-普通扩展方式类PotentialCalculator,下面我们来讲一下地杰斯特拉算法该算法主要在dijkstra.h及dijkstra.cpp中我们首先来看一下头文件dijkstra.h//迪杰斯特拉算法#ifndef _DIJKSTRA_H#define _DIJKSTRA_H//优先 大小#define PRIORITYBUFSIZE 10000原创 2021-03-16 11:18:59 · 1300 阅读 · 2 评论 -
global_planner解析(3)
这章我们对路径搜索的基类Expander进行讲解:该部分代码在expander.h文件中,#ifndef EXPANDER_H#define EXPANDER_H#include <nav_planner/planner_core.h>#include <nav_planner/potenrial.h>namespace nav_planner{//扩展器class Expander{public: //构造函数 Expander(Potenti原创 2021-03-15 16:53:08 · 828 阅读 · 0 评论 -
global_planner解析(2)
第二章我们则对功能包的文件及类进行解析:首先我们看一下功能包里面有什么类分别作用(由于本人刚刚入门uml,故图片可能有所偏差)里面最主要的就是插件算法类GlobalPlanner父类nav_core::BaseGlobalPlanner,而路径搜索分别是DijkstraExpansion(地杰斯特拉算法)、AStarExpansion(astar算法),路径回溯PotentialCalculator、QuadraticCalculator(使用梯度下降)然后我们看一下里面有哪些文件:.├── b原创 2021-02-25 11:27:56 · 1014 阅读 · 0 评论 -
global_planner解析(1)
global_planner是ros的一个全局导航插件功能包,实现了astar和Dijkstra寻路算法。我们大部分同学会使用而网上也很少对其的完全解析,今天我们就来解析一下global_planner功能包。第一章将从其参数讲起:以下参数在启动时进行配置-old_navfn_behavior:bool ture使用原来功能包navfn的规划方式use_quadratic:bool true使用二次近似函数,false使用更简单的计算方式节省硬件资源(否的话会扩展周边4个点,是扩展周边八个)u原创 2021-02-25 09:58:38 · 2058 阅读 · 2 评论 -
fox-jetson nano ros安装配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo gedit /etc/apt/sources.listdeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-securi.原创 2020-11-23 11:07:27 · 264 阅读 · 0 评论 -
堆栈算法笔记
堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆(数据结构):堆可以被看成是一棵树,如:堆排序。进出顺序随意栈(数据结构):一种先进后出的数据结构。std::make_heap将[start, end)范围进行堆排序,默认使用less, 即最大元素放在第一个。make_heap()是生成一个堆,大顶堆或小顶堆make_heap(_RAIter,_RAIter) 默认生成大顶堆make_heap(_RAIter,_RAIter,_Compare)原创 2020-08-13 15:03:32 · 225 阅读 · 0 评论 -
ros摄像头参数标定
由于摄像头内部或者外部的一些原因,生成的图像往往会发生畸变,为了避免数据源造成的误差,需要对摄像头的参数进行标定。ROS官方提供了用于单目双目摄像头标定的功能包camera_calibration。camera_ calibration功能包首先在插有待标定摄像头的电脑(本章命令均在插有待标定摄像头电脑里运行)使用以下命令安装摄像头标定功能包sudo apt-get install ros-kinetic-camera-calibration标定需要使用到棋盘格图案的标定靶,可以在光盘或者网上原创 2020-07-10 11:20:40 · 1486 阅读 · 1 评论 -
ros2-Foxy安装教程
ros2已经出到F版了,该如何安装呢,这里选择的是二进制安装方式.首先,确保您的语言环境支持UTF-8。sudo locale-gen en_US en_US.UTF-8sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8export LANG=en_US.UTF-8添加公钥:sudo apt update && sudo apt install curl gnupg2 lsb-releasecurl -s https:原创 2020-08-09 18:19:26 · 3436 阅读 · 6 评论 -
ros-noetic安装教程
ros的最后一个长期支持版本已经悄悄上线了,那么接下来我们就看一下如何在ubuntu20.04下安装.在安装之前,我们应该在软件和更新中更换国内的软件源比如清华源然后我们添加ros软件源:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'当然你也可以选择国内的源,比如也是清华的(在这里添加中科大原创 2020-06-03 23:42:08 · 10250 阅读 · 15 评论 -
ros2时间管理-Rate和Timer
ROS2编程的时间处理包括如ros1的rate睡眠,当然在ros2中你会经常用到Timer计时器系统,类似于单片机的定时器中断一类的软件计时器。Rate:这个我们并不陌生,不管是在前面章节还是在ros1中都大量使用,可以让我们在程序中进行睡眠。但是ros2函数API有一点改变:int main(int argc, char** argv){ rclcpp::init(argc, argv)...原创 2020-04-12 16:53:15 · 7550 阅读 · 1 评论 -
roslaunch解析
1.node是要启动的ROS节点,它包括以下几个参数:Pkg=”mypackage”:节点的功能包Type=”nodetype”:节点的类型Name=”nodename”:节点的名字Args=”arg1 arg2 arg3”:(可选)传递给节点的参数Respawn=”true”: (可选)如果节点停止,自动终止节点Ns=”foo”: (可选)在”foo”命名空间启动节点Output=...原创 2020-07-02 14:50:24 · 218 阅读 · 0 评论 -
gazebo参数列表
一、连杆(link)标签link 连杆的可视化、碰撞和惯性信息设置collision 设置连杆的碰撞计算的信息visual 设置连杆的可视化信息inertial 设置连杆的惯性信息mass 连杆重量(单位:kg)的设置inertia 惯性张量(Inertia tensor)设置origin 设置相对于连杆相对坐标系的移动和旋转geometry 输入模型的形状。提供...原创 2020-03-02 10:18:52 · 1693 阅读 · 0 评论 -
ros2 话题编程之订阅者
您已经了解到主题是通道,节点可以在其中写入或读取信息。 您还看到了可以使用发布者来写主题,因此您可能在想,也应该有某种类似的工具可以从主题中读取信息。 你是对的! 这就是所谓的订阅者。 订户是从主题读取信息的节点。 让我们来进行编写订阅者。首先创建一个名为topic_subscriber_pkg的新程序包。 创建软件包时,添加rclcpp和std_msgs作为依赖项。使用以下命令:ros2 p...原创 2020-01-17 15:14:56 · 1119 阅读 · 0 评论 -
ros2 话题编程之发布者
创建一个名为topic_publisher_pkg的新软件包。 创建程序包时,添加rclcpp和std_msgs作为依赖项。为了创建一个具有roscpp和std_msgs作为依赖关系的包,您应该使用以下命令:[ ]: ros2 pkg create topic_publisher_pkg --build-type ament_cmake--dependencies rclcpp std_msg...原创 2020-01-17 14:44:58 · 799 阅读 · 0 评论 -
ros2安装第一个坑
从安装ros2到现在也有好几天了。成功把我们oryxTarm底盘功能包从ros1-kinetic移植到ros2-dashing上面。下面就说一下遇到的一些坑,原创 2019-11-07 18:17:44 · 637 阅读 · 1 评论 -
roboware快捷键
通用Ctrl+Shift+P, F1 显示命令面板Ctrl+P 快速打开(文件)Ctrl+Shift+N 新窗口/实例Ctrl+Shift+W 关闭窗口/实例Ctrl+, 打开用户设置Ctrl+K+S 键盘快捷键基本编辑Ctrl+X 剪切Ctrl+C 复制Alt+ ↑ / ↓ 上下移动Shift+Alt + ↓ / ↑ 复制行 上/下移动Ctrl+Shift+K 删除行C...原创 2019-09-06 14:49:02 · 2101 阅读 · 1 评论 -
ros分布式通信
ros分布式通信ros是一种分布式软件框架,节点之间通过松耦合的方式进行组合。首先两台/多台机器连接到同一个无线网络下,oryxbot默认静态IP地址192.168.8.1001.除了静态IP,可以通过ifconfig命令查看电脑IP地址,然后可以得出:我的电脑设备名:ln-pc IP地址:192.168.8.185oryxbot设备名:oryxbot-bIP地址:192.168....原创 2019-08-14 17:17:04 · 1004 阅读 · 0 评论 -
ros使用服务启动节点
ros使用服务启动节点最近在忙图形化编程后台程序编写,而由于我们的底盘工控机性能问题不能开机把所有程序自启,特别是摄像头和识别的一些节点。然鹅我连ros开机自启都不知道怎么整,后来在网上看了ros通过gnome-session-properties开机自启ros节点。忽然想到在程序中运行一个脚本,这个脚本中 启动ROS应用程序,任务不就完成了!那一刻我仿佛看到了我的:说干就干,用一句:sy...原创 2019-08-13 11:48:56 · 2399 阅读 · 0 评论 -
dobot示教程序ros
ros dobot示教程序Dobot Magician API接口说明V1.2.2版本1.9HHT功能:原创 2019-08-08 14:16:13 · 1458 阅读 · 0 评论