栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【RK3399Pro学习笔记】六、ROS发布者Publisher的编程实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【RK3399Pro学习笔记】六、ROS发布者Publisher的编程实现

目录
  • 如何实现一个发布者
  • C++
    • 创建功能包
    • 编写程序
    • 配置CMakeLists.txt
    • 编译并运行发布者
  • python
    • 创建并编写脚本
    • 运行

平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro
固件版本: Tinker_Edge_R-Debian-Stretch-v1.0.13-20210702


记录自【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 —— 古月居GYH P10 10.发布者Publisher的编程实现

如何实现一个发布者
  1. 初始化ROS节点;
  2. 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
  3. 创建消息数据;
  4. 按照一定频率循环发布消息。
C++ 创建功能包
cd ~/catkin_workspace/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
编写程序
nano ~/catkin_workspace/src/learning_topic/src/velocity_publisher.cpp


 
#include 
#include 

int main(int argc, char **argv)
{
	// ROS节点初始化
	ros::init(argc, argv, "velocity_publisher");

	// 创建节点句柄
	ros::NodeHandle n;

	// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
	ros::Publisher turtle_vel_pub = n.advertise("/turtle1/cmd_vel", 10);

	// 设置循环的频率
	ros::Rate loop_rate(10);

	int count = 0;
	while (ros::ok())
	{
	    // 初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;

	    // 发布消息
		turtle_vel_pub.publish(vel_msg);
		ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
				vel_msg.linear.x, vel_msg.angular.z);

	    // 按照循环频率延时
	    loop_rate.sleep();
	}

	return 0;
}
配置CMakeLists.txt
nano ~/catkin_workspace/src/learning_topic/CMakeLists.txt

在Build内,Install前加入

add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

设置需要编译的代码和生成的可执行文件;
设置链接库;

编译并运行发布者
cd ~/catkin_workspace
catkin_make

# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher

# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph


python 创建并编写脚本
cd ~/catkin_workspace/src/learning_topic
mkdir scripts
cd ~/catkin_workspace/src/learning_topic/scripts
nano velocity_publisher.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
########################################################################

# 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist

import rospy
from geometry_msgs.msg import Twist

def velocity_publisher():
	# ROS节点初始化
    rospy.init_node('velocity_publisher', anonymous=True)

	# 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
    turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)

	#设置循环的频率
    rate = rospy.Rate(10) 

    while not rospy.is_shutdown():
		# 初始化geometry_msgs::Twist类型的消息
        vel_msg = Twist()
        vel_msg.linear.x = 0.5
        vel_msg.angular.z = 0.2

		# 发布消息
        turtle_vel_pub.publish(vel_msg)
    	rospy.loginfo("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
				vel_msg.linear.x, vel_msg.angular.z)

		# 按照循环频率延时
        rate.sleep()

if __name__ == '__main__':
    try:
        velocity_publisher()
    except rospy.ROSInterruptException:
        pass
运行
sudo chmod +x ~/catkin_workspace/src/learning_topic/scripts/velocity_publisher.py

# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher.py

# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号