柴CK《机器人操作系统入门》笔记

举报
ReCclay 发表于 2022/02/22 01:19:02 2022/02/22
【摘要】 一、仿真参数 启动仿真界面 roslaunch robot_sim_demo robot_spawn.launch 1 方向控制 rosrun robot_sim_demo robot_keybo...

一、仿真参数

启动仿真界面

roslaunch robot_sim_demo robot_spawn.launch

  
 
  • 1

方向控制

rosrun robot_sim_demo robot_keyboard_teleop.py

  
 
  • 1

二、roscpptopic_demo

功能简述:两个node(进程),一个发布模拟的GPS消息(格式自定义,包括坐标和工作状态),另一个接收并处理该消息(计算到原点的距离)。

步骤:
①、package

cd ~/tutorial_ws/src
catkin_create_pkg topic_demo roscpp rospy std_msgs

  
 
  • 1
  • 2

②、msg

cd topic_demo
mkdir msg
cd msg
vi gps.msg

  
 
  • 1
  • 2
  • 3
  • 4

gps.msg

float32 x
float32 y
string state

  
 
  • 1
  • 2
  • 3

编译之后会生成gps文件,路径为:~/tutorial_ws/devel/include/topic_demo/gps.h
该msg使用方式如下

#include <topic_demo/gps.h>
...
topic_demo::gps msg;
...

  
 
  • 1
  • 2
  • 3
  • 4

③、talker.cpp

#include <ros/ros.h> //#ros程序必备
#include <topic_demo/gps.h>

int main(int argc, char** argv)
{
	ros::int(argc, argv, "talker"); //解析参数,命名当前节点node
	ros::NodeHandle nh;//创建句柄,实例化node
	topic_demo::gps msg;//创建gps消息
	msg.x = 1.0;
	msg.y = 1.0;
	msg.state = "working";
	ros::Publisher pub = nh.advertise<topic_demo::gps>("gps_info", 1);//创建publisher,gps_info为topic名称,1为消息队列长度
	ros::Rate loop_rate(1.0);//定义循环发布频率
	while(ros::ok())
	{
		msg.x = 1.03 * msg.x;
		msg.y = 1.03 * msg.y;
		ROS_INFO("Talker:GPS: x = %f, y = %f", msg.x, msg.y);//输出当前msg,类似printf
		pub.publish(msg);//发布消息
		loop_rate.sleep();//定义发布评论,sleep
	}
	return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

④、listener.cpp
⑤、CMakeList.txt & package.xml

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/102720529

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。