《Ubuntu20.04环境下的ROS进阶学习7》

一、使用nav_msgs消息包显示小车轨迹

        在我们跑实验的时候通常希望看到小车的轨迹,在ROS1中可以将小车的路径存储在nav_msgs::Path 这种消息类型里,发布出来后使用rviz来显示小车轨迹。

二、了解nav_msgs消息包

        那么首先我们要来了解一下nav_msgs这个消息包了。这里可以下载common_interfaces这个功能包,里面有常用的很多种消息包可供选择。

使用  git clone https://github.com/ros2/common_interfaces.git

其中nav_msgs消息包中有四种消息格式分别是:

①  GridCells.msg  :一般用于显示网格单元的状态,通常用于显示区域中的障碍和自用空间。

②  MapMetaData.msg  :提供关于栅格地图的元数据,通常与①一起用。

③  OccupancyGrid.msg  :表示一个二维栅格地图,用于描述环境的占用状态。

④  Odometry.msg  :提供有关机器人位姿和速度的信息,通常用于定位和导航。

⑤  Path.msg  :表示一条路径,通常用于导航算法中的路径规划和跟踪。

这里我们选择第五种消息包,显示一条路径。

这里如果你直接去查看这些消息格式是比较麻烦的,因为他们通常会递归很久才会找到终止条件,即基例,我们可以使用 rosmsg show nav_msgs/Path.msg 来查看这个消息格式。

通过观察缩进可以看到消息的子父类关系。

三、使用nav_msgs::Path.h操作一把

a、编写程序

/*
本文件由jk编辑,本文件主要目的是通过一个小例程了解nav_msgs的使用

*/

//C++库相关
#include <iostream>
#include <cmath>


//ROS库相关
#include <ros/ros.h>
#include <nav_msgs/Path.h>


using namespace std;

int main(int argc , char ** argv)
{
	//初始化ros
	ros::init(argc , argv , "nav_path_pub");
	
	ros::NodeHandle node;
	
	//创建一个路径的发布者
	ros::Publisher Path_pub_car0 = node.advertise<nav_msgs::Path>("/path_car0" , 10);
	
	//创建路径的消息存储数据
	nav_msgs::Path nav_path_msgs_car0;
	
	//设置发布频率
	ros::Rate loop_rate(10);
	
	//从传感器获取的位置信息 x , y , z 这里我们不关心z轴信息,则忽视它
	double path_x = 0;
	double path_y = 0.2;
	
	//从传感器获取的角度
	double roll = 0.0;
	double pitch = 0.0;
	double yaw = 0.0;
	
	cout << "i will go while" << endl;
	while(ros::ok())
	{
		//退出循环条件
		if(path_x > 10)
		{
			cout << "i will break" << endl;
			break;
		}
		
		
		//获取路径 , 这里大概率是从您的传感器获得的数据
		path_x = path_x + 0.1;
		path_y = path_y * (-1);
		cout << "path_x = " << path_x << endl;
		cout << "path_y = " << path_y << endl;
		//获取角度 , 这里大概率是从您的传感器获得的数据
		double Quaternion_w = cos(0.5*roll)*cos(0.5*pitch)*cos(0.5*yaw) + sin(0.5*roll)*sin(0.5*pitch)*sin(0.5*yaw);
		double Quaternion_x = sin(0.5*roll)*cos(0.5*pitch)*cos(0.5*yaw) - cos(0.5*roll)*sin(0.5*pitch)*sin(0.5*yaw);
		double Quaternion_y = cos(0.5*roll)*sin(0.5*pitch)*cos(0.5*yaw) + sin(0.5*roll)*cos(0.5*pitch)*sin(0.5*yaw);
		double Quaternion_z = cos(0.5*roll)*cos(0.5*pitch)*sin(0.5*yaw) - sin(0.5*roll)*sin(0.5*pitch)*cos(0.5*yaw);
		
		//这里创建一个临时的变量存储位置和姿态信息
		geometry_msgs::PoseStamped this_pose_stamped;
		//创建一个存储时间的临时变量,用于给header.stamp赋值 获得当前的时间
		ros::Time current_time = ros::Time::now();
		
		//下面是存储要发布的数据	注意这里的frame_id 可能会需要修改 
		nav_path_msgs_car0.header.stamp = current_time;
		nav_path_msgs_car0.header.frame_id = "map";
		this_pose_stamped.header.stamp = current_time;
		this_pose_stamped.header.frame_id = "map";
		this_pose_stamped.pose.position.x = path_x;
		this_pose_stamped.pose.position.y = path_y;
		this_pose_stamped.pose.position.z = 0.0;
		this_pose_stamped.pose.orientation.w = Quaternion_w;
		this_pose_stamped.pose.orientation.x = Quaternion_x;
		this_pose_stamped.pose.orientation.y = Quaternion_y;
		this_pose_stamped.pose.orientation.z = Quaternion_z;

		nav_path_msgs_car0.poses.push_back(this_pose_stamped);
		
		//将上面的数据发布出去
		Path_pub_car0.publish(nav_path_msgs_car0);
		
		//设置发布频率
		loop_rate.sleep();
		
	}
	
	
	return 0;
}





b、修改CMakeList.txt 和 package.xml文件

        这里就不多展示了,之前的文章都有过详细说明。

c、使用rviz展示效果

        这里需要添加Path,选择合适的话题和坐标系就可以显示路径了。

### 回答1: 在Ubuntu 20.04上安装ROS的具体步骤包括:1. 安装软件包管理工具:sudo apt update && sudo apt install -y git wget2. 安装ROS的源文件:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'3. 设置密钥:sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C6544. 安装ROS:sudo apt update && sudo apt install -y ros-noetic-desktop-full5. 初始化rosdep:sudo rosdep init && rosdep update6. 设置环境变量:echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc && source ~/.bashrc7. 安装ROS工具:sudo apt install -y python-rosinstall python-rosinstall-generator python-wstool build-essential ### 回答2: 在Ubuntu 20.04下安装ROS的具体步骤如下: 1. 首先,确保系统已经更新到最新版本。可以使用以下命令: ``` sudo apt update sudo apt upgrade ``` 2. 添加ROS软件包仓库到系统源列表。可以使用以下命令: ``` sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' ``` 3. 添加ROS密钥到系统密钥链中。可以使用以下命令: ``` sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654 ``` 4. 更新软件包索引。可以使用以下命令: ``` sudo apt update ``` 5. 安装ROS。可以根据需要选择安装完整版或基础版。以安装完整版Melodic为例,可以使用以下命令: ``` sudo apt install ros-melodic-desktop-full ``` 6. 初始化ROS环境变量。可以使用以下命令: ``` echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 7. 安装ROS依赖项。可以使用以下命令: ``` sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential ``` 8. 初始化rosdep。可以使用以下命令: ``` sudo rosdep init rosdep update ``` 9. 创建和管理工作空间。可以使用以下命令: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 以上就是在Ubuntu 20.04下安装ROS的具体步骤。根据自己的需要和ROS版本,可以适当进行调整。 ### 回答3: 在Ubuntu 20.04下安装ROS的具体步骤如下: 1. 在终端中更新apt软件包索引,使用以下命令: ``` sudo apt update ``` 2. 安装ROS密钥和软件源,使用以下命令: ``` sudo apt install curl curl -sSL http://wiki.ros.org.cn/ubuntu-cn/SourceList?action=AttachFile&do=get&target=ubuntu-1804-melodic.sources.list > /etc/apt/sources.list.d/ros-latest.list ``` 3. 设置ROS密钥,使用以下命令: ``` sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 4. 更新apt软件包索引,使用以下命令: ``` sudo apt update ``` 5. 安装ROS,使用以下命令(默认安装完整版桌面): ``` sudo apt install ros-melodic-desktop-full ``` 6. 初始化ROS,使用以下命令: ``` sudo rosdep init rosdep update ``` 7. 设置ROS环境变量,在终端中打开`~/.bashrc`文件,使用以下命令: ``` gedit ~/.bashrc ``` 8. 在文件末尾添加以下行,保存并关闭文件: ``` source /opt/ros/melodic/setup.bash ``` 9. 更新当前终端的环境变量,使用以下命令: ``` source ~/.bashrc ``` 10. 安装ROS工具,使用以下命令: ``` sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential ``` 11. 验证ROS安装是否成功,使用以下命令查看已安装的ROS包列表: ``` apt list | grep ros-melodic ``` 至此,您已经成功在Ubuntu 20.04下安装了ROS。您可以通过其他教程了解如何创建ROS工作空间,并开始使用ROS进行开发和工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值