![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ROS
文章平均质量分 68
Kevin_Xie86
这个作者很懒,什么都没留下…
展开
-
std::cout、printf 和 RCLCPP_INFO的对比
typedef 重新定义数据格式后,std::cout是不能正常输出显示的,必须用printf()才能输出uint8_t类型的数据值,需要标明数据的类型。ROS2自带的log输出,分等级,带颜色,输出格式与printf相同,需要标明数据的类型。自带,不用标明数据的类型,可以直接输出,不过只能输出几种基本格式的数据。原创 2022-09-11 16:16:35 · 3195 阅读 · 0 评论 -
ROS2 创建python包
有的时候,python中修改了一个数值,重新编译后,可能编译器没有发现修改的地方,有可能不执行修改后的值。所以,为了保险起见,如果比较小的改动,把install和build中相应包的文件删除后再编译,确保编译器一定是按修改后的代码来编译的。如果报错,没有找到该msgs,则到。以上指令为创建一个名为。的python功能包。的开始引用即可,比如。......原创 2022-07-26 13:29:42 · 1629 阅读 · 0 评论 -
ROS2安装、配置、编译helloworld及自定义消息
1、安装ROS21.1 添加密钥打开终端,输入以下指令添加密钥:sudo apt install curl gnupg2 -ycurl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -1.2 设置软件源输入以下指令将存储库添加到源列表中:sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros原创 2022-05-24 09:53:27 · 2028 阅读 · 0 评论 -
ros进阶--tf2的使用
在tf2系统中,将包分为tf2和tf2_ros。tf2用来进行坐标旋转,以及tf、msg两种四元素数据结构的变换;tf2_ros负责与ROS数据通信打交道,负责发布tf或订阅tf,即发布者和订阅者是在tf2_ros命名空间下的。1、tf2 (姿态变换和tf格式转换)1.1 四元数的组成一个四元素有4个成员(x,y,z,w)。不绕xyz轴旋转的常用单位四元数为(0,0,0,1)。注意: w 是最后一个,但是一些库像 Eigen 把 w 放在第一的位置。#include <tf2原创 2021-06-23 15:32:09 · 5043 阅读 · 1 评论 -
ros进阶--msg、srv和参数服务器的使用
ROS不是传统意义上的操作系统,不是用于进程管理和调度,而是构建在其它操作系统之上的一种结构化的通讯层。一、自定义msg1.定义msg文件功能包下新建msg目录,添加文件Person.msg。string nameuint16 agefloat64 height2.编辑配置文件package.xmlpackage.xml中添加编译依赖与执行依赖。message_generationbuild_depend>message_runtimeexec_depend>3.CMa原创 2021-06-23 15:28:33 · 302 阅读 · 0 评论 -
2D激光雷达运动畸变矫正_base里程计
参考了他人博客,对其中的坐标系转换计算进行更细化的理解,以及归纳了一些函数流程。1、激光雷达运动畸变的原因如上图所示,系1和系2是同一帧激光数据的laser frame。如果雷达扫描频率较低,如10Hz,那么一帧激光点云的第1束和最后1束光束会相差100ms,robot在这段时间内会运动,导致一帧内laser frame已经从系1变化到系2.在同一帧点云里,我们会默认laser frame是不动的,即认为laser扫描到P2时,laser frame是在系1处,但实际上laser frame已经是原创 2021-03-16 19:58:34 · 1319 阅读 · 1 评论 -
ROS与boost:bind()简单解析
1 boost:bind()bind接收的第一个参数必须是一个可调用的对象f,包括函数、函数指针、函数对象和成员函数指针,之后bind最多接受9个参数,参数数量必须与f的参数数量相等,这些参数被传递给f作为形参。绑定完成后,bind会返回一个函数对象ob(类似auto ob = boost::bind(f,...)),它内部保存了f的拷贝,具有operator(),返回值类型被自动推导为f的返回类型。在发生调用时这个函数对象ob将把之前存储的参数转发给f完成调用.如:void func(x,y);原创 2021-01-19 16:29:39 · 1242 阅读 · 0 评论 -
ROS MessageFilter订阅多个激光雷达话题进行同步处理
0 MessageFilterhttp://wiki.ros.org/message_filtersmessage_filters消息过滤器类似一个消息缓存,当消息到达消息过滤器的时候,可能并不会立即输出,需要满足一定条件才输出,比如有最简单的直接输出消息,还有常用的时间同步器,tf转换等.1 消息的订阅与回调message_filters::Subscriber<std_msgs::UInt32> topic_sub(nh, "topic_name", 1);topic_sub.re原创 2021-01-19 10:32:30 · 4455 阅读 · 1 评论 -
ROS时间戳函数和输出显示
double t = msg->header.stamp.toSec()//把时间戳转化成浮点型格式pringf("time:%f\n",t);//输出显示PS: printf()格式%d 有符号十进制整数%f 浮点数(包括float和double)%s 字符串[.精度]// 如: pringf("time:%.6f\n",t)表示小数点右边6位...原创 2021-01-18 11:22:13 · 5279 阅读 · 2 评论 -
Ubuntu安装/卸载ROS-kinetic相关pkg
sudo apt-get install ros-kinetic-xxkinetic可以换成别的ros版本;xx可以是导航包base_local_planner,那就变成sudo apt-get install ros-kinetic-base-local-planner原创 2020-07-01 09:54:15 · 378 阅读 · 0 评论 -
ROS sensor_msgs/LaserScan Message简单说明
std_msgs/Header headerfloat32 angle_min //开始扫描角度float32 angle_max //结束扫描角度float32 angle_increment //每次扫描增加的角度(角度分辨率)float32 time_increment //每次扫描时间间隔(*注1)float32 scan_time //扫描的时间间隔float32 range_min //最小范围,测距最小值float32 range_max //最大范围,测距最大值float原创 2020-06-02 10:46:13 · 1671 阅读 · 2 评论 -
C++类对象化编写ROS的sub&pub
按照官方教程,写一个简单的ROS接收/发送是很容易的。但是C++倡导对象化,把ROS节点注册、topic接收/发送写到类里,还是一个很好的做法。一方面工程大了之后,方便管理;另一方面个人看起来也更舒服。1、C++ classclass_demo.cpp#include <ros/ros.h>#include <geometry_msgs/Twist.h>#include <nav_msgs/Odometry.h>class RobotMove { pub原创 2020-05-22 10:51:06 · 752 阅读 · 0 评论 -
ros::NodeHandle::param()
官方描述param()函数从参数服务器取参数值给变量。如果无法获取,则将默认值赋给变量。这个函数的功能和getParam()函数类似,区别是param()函数还提供了一个默认值。原创 2020-05-20 11:54:47 · 6336 阅读 · 0 评论 -
ros::spin() 和 ros::spinOnce()机制作用和区别
1、 机制:消息发布器一直循环发送msg到topic chatter上;消息订阅器一旦发现 chatter上有data,就会把msg放到一个队列回调函数中,但还未执行callback函数。当运行ros::spin()和ros::spinOnce()时,就会执行callback函数。区别就是执行的不同。2、作用:1) ros::spinOnce()当spinOnce()被调用时,调用队列中第1个数据作为callback函数的参数;等到下次spinOnce()被调用时,队列中第2个数据被使用,以此类推原创 2020-05-19 10:18:41 · 2965 阅读 · 1 评论 -
ROS安装 sudo rosdep init出错
sudo gedit /etc/hosts###在文件末尾添加199.232.28.133 raw.githubusercontent.com参考sudo rosdep init ERROR: cannot download default sources list from:【closed】但是这篇博文中添加的ip对我没有用,找了另一篇博文的ip,就可以了。...原创 2020-05-12 11:17:37 · 337 阅读 · 0 评论 -
rosserial和rosbridge
rosserial用于非ros设备与ros设备进行通信的一种协议rosserial{客户端→无ROS环境服务器端→ROS环境 rosserial\left\{\begin{matrix} 客户端→无ROS环境 \\ 服务器端→ROS环境 \end{matrix}\right.rosserial{客户端→无ROS环境服务器端→ROS环境USB(通用串行总线)基于串口,但严格来说不是...原创 2020-05-06 13:32:21 · 819 阅读 · 0 评论 -
yocs_cmd_vel_mux和yocs_velocity_smoother
1、yocs_cmd_vel_mux进行速度的选择,比如机器人在自主导航时遇到紧急情况要切换到手动控制模式,这时就要将机器人控制权从自主导航的节点切换到方向盘、手柄、键盘、急停开关等控制节点。例如机器人自主导航时可能会有下面4种优先级的任务(通常将自主行为的优先级设为最低): 3 (highest priority): safety controller (安全控制) 2: keyboar...原创 2020-04-30 14:09:12 · 1392 阅读 · 1 评论 -
Cartographer安装 踩坑奉献
Cartographer安装断断续续弄了三天,理论上应该挺容易的,但还是踩了好多坑。当然,hitcm大神的方法可能100%成功,但是我没有试,因为大神把cartographer重新封装,没有办法根据自己项目的需求修改里边的内容。所以只能按照官网的方法来安装,还参照了这篇博文的内容——问题解决方案2-------------ros的 Cartographer,ninja,ceres-solver,...原创 2020-03-25 15:10:55 · 2385 阅读 · 2 评论 -
Ubuntu16.04安装和简单使用ROS的usb-cam包
官方的git网址:https://github.com/ros-drivers/usb_cam1、安装直接用命令行就可以安装,更加便捷sudo apt-get install ros-kinetic-usb-cam2、简单使用ls /dev/video看看有几个摄像头设备,选择自己需要显示的设备,再修改usb-cam的launch文件,就可以使用。...原创 2020-02-17 16:32:55 · 1897 阅读 · 0 评论 -
roslaunch的使用
标签1、<node><node…/>pkg=“功能包”;type=“可执行文件”;name=“节点名称”.ns = “命名空间”;可以让你在自定义的命名空间里运行节点。2、<include>该标签可以导入另一个roslaunch XML文件到当前文件。<include file ="$(find pkg-name)/path/filename...原创 2019-12-27 11:06:04 · 387 阅读 · 0 评论