SLAM从入门到精通(用c++实现机器人运动控制)

news/2024/12/22 1:47:14/

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        之前的一篇文章,我们知道了可以通过wpr_simulation包仿真出机器人和现场环境。如果需要控制机器人,这个时候就需要rqt_robot_steering这个包来实现。可是大家有没有想过,为什么用rqt_robot_steering就可以实现对车的控制,如果是我们自己用c++编程,是不是也可以实现相同的控制呢?

1、rqt_bot_steering控制的原因

        不知道大家对这样的一幅图,究竟还有没有印象。rqt_robot_steering能对小车进行控制,本质原因还是因为它给/cmd_vel发送了消息。简而言之,如果我们能编写对应的消息,那么其实也可以实现对小车的控制。

2、编写vel_node.cpp文件

#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;
}

        代码的编写部分主要集中在vel_msg的发布。这里面有两个知识点,一个是/cmd_vel的发布;一个是vel_msg的填写。其中linear下面的x、y、z指的是三个方向的线速度,而angular下面的x、y、z则指的是围绕三个轴的角速度。线速度的单位一般是m/s,而角速度一般单位是弧度/s。

3、更新CMakelists.txt文件

add_executable(vel_node src/vel_node.cpp)
target_link_libraries(vel_node ${catkin_LIBRARIES})
add_dependencies(vel_node beginner_tutorials_generate_messages_cpp)

4、准备编译

        编译的方法其实很简单,和之前ros的编译方法是一样的。即在catkin_ws输入catkin_make即可。如果没有问题,就可以生成vel_node程序。

5、验证vel_node是否ok

        要验证vel_node程序是否真的发挥了作用,主要流程就是两个步骤。第一,用roslaunch启动wpr_simulation,

roslaunch wpr_simulation wpb_simple.launch

        第二,用rosrun启动vel_node,回头看gazebo里面的小车,如果小车式向前进行了移动,那么说明我们编写的vel_node程序是成功的。反之,如果没有看到这样的现象,那么就要回头看下,究竟我们在编写代码的过程中引入了什么错误。

rosrun beginner_tutorials vel_node


http://www.ppmy.cn/news/1122750.html

相关文章

pom文件被忽略

项目场景&#xff1a; 在idea中创建了一个项目&#xff0c;新建了一个模块 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 发现新建的模块建错了&#xff0c;然后移除模块&#xff0c;删除相关文件后&#xff0c;又新建一个相同名字的模块时&#xff0c;出…

Spring Boot的新篇章:探索2.0版的创新功能

文章目录 引言1. Spring Boot 2.0的响应式编程2. 自动配置的改进3. Spring Boot 2.0的嵌入式Web服务器4. Spring Boot 2.0的Actuator端点5. Spring Boot 2.0的Spring Data改进6. Spring Boot 2.0的安全性增强7. Spring Boot 2.0的监控和追踪8. Spring Boot 2.0的测试改进结论 &…

拓扑排序【学习算法】

拓扑排序【学习算法】 前言版权推荐拓扑排序核心思想207. 课程表解法一解法二 最后 前言 2023-9-24 15:32:23 以下内容源自《【学习算法】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://blog.csd…

多进程编程- POSIX无名信号量

基本概念 无名信号量&#xff08;也称为匿名信号量&#xff09;是一个同步原语&#xff0c;通常用于线程之间的同步&#xff0c;而不是进程之间。与命名信号量&#xff08;用于进程间同步&#xff09;相比&#xff0c;无名信号量的生命周期通常受限于创建它的进程&#xff0c;…

35.浅谈贪心算法

概述 相信大家或多或少都对贪心算法有所耳闻&#xff0c;今天我们从一个应用场景展开 假设存在下面需要付费的广播台&#xff0c;以及广播台信号可以覆盖的地区。 如何选择最少的广播台&#xff0c;让所有的地区都可以接收到信号&#xff1f; 广播台覆盖地区k1北京、上海、天津…

wordpress使用category order and taxonomy terms order插件实现分类目录的拖拽排序

文章目录 引入实现效果安装插件使用插件 引入 使用docker快速搭建wordpress服务&#xff0c;并指定域名访问 上一节我们使用docker快速搭建了wordpress服务&#xff0c;可以看到基础的wordpress服务已经集成基础的用户管理、文章发布、页面编辑、文章分类等功能&#xff0c;但…

C++ -- 类型转换

目录 C语言中的类型转换 为什么C需要四种类型转换 C 类型转换 static_cast reinterpret_cast const_cast 添加关键字 volatile dynamic_cast 补充 RTTI 总结 C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型…

华为OD机试真题-会议接待-2023年OD统一考试(B卷)

题目描述: 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。 约束: 1、一个团只能上一辆车,并且代表团人数(代表团数量小于30,每个代表团人数小于30)小于…