Windows 10下安装ROS系统并执行ROS功能包

将ros包移植到Windows 10系统

在移植之初,读者需要先在Windows系统中安装好ROS系统,本教程安装的melodic版本,为 Windows 构建 ROS 项目需要 Visual Studio,这里安装的是 Visual Studio 2017 (Community)。
具体安装过程可以参考以下两个连接
ROS on Windows installation
视频教程

温馨提示
按照Ros 用于 Windows 移植说明书,需要将ROS的工作区放到C盘的根目录。因为Visual Studio 2017体积过于庞大,我这里安装在D盘,在运行ros程序的时候只要在创建 ROS 命令窗口快捷方式时修改好相应的路径,也能够使得程序正常运行。
例如我在创建ROS命令窗口快捷方式时的设置:

C:\Windows\System32\cmd.exe /k "D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64&& set ChocolateyInstall=c:\opt\chocolatey&& c:\opt\ros\melodic\x64\setup.bat

以古月居21讲中发布话题为例

话题模型
1、Windows系统中创建ROS工作空间
在Windows系统和在Linux系统创建功能包没有太大区别,我这里将catkin_ws设置在c盘的根目录下。

mkdir c:\catkin_ws\src
cd c:\catkin_ws\src
catkin_init_workspace

2、Windows系统中编译ROS工作空间
输入以下两条指令,这个时候虽然没有功能包,但是是可以正常编译的。

cd c:\catkin_ws
catkin_make

结果如下:
结果
3、创建功能包

cd c:\catkin_ws\src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

4、在learning_topic中的创建一个c++文件,输入以下代码。(有古月居21讲的例程代码,可以直接将learning_topic中的velocity_publisher.cpp文件复制过来。)
如果是新手,不知道这部分代码什么意思可以去看这个视频。古月居21讲

/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
 
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

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<geometry_msgs::Twist>("/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("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
				vel_msg.linear.x, vel_msg.angular.z);

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

	return 0;
}

5、配置CMakeLists.txt中的编译规则
设置需要编译的代码和生成的可执行文件,设置链接库。
这里执行的操作是将以下两句话拷贝到learning_topic目录下的CMakeLists.txt中照片所示的位置。

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

在这里插入图片描述
6、再次进行编译

cd c:\catkin_ws
catkin_make

再次执行编译出现了如下报错:

C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请 将该文件保存为 Unicode 格式以防止数据丢失
C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp(28): error C2065: “vel_msg”: 未声明的标识符
C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp(29): error C2065: “vel_msg”: 未声明的标识符
C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp(32): error C2065: “vel_msg”: 未声明的标识符
C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp(33): error C2065: “vel_msg”: 未声明的标识符
C:\ros_ws\src\learning_topic\src\velocity_publisher.cpp(37): error C2065: “loop_rate”: 未声明的标识符
NMAKE : fatal error U1077: “D:\PROGRA~1\MICROS~1\2017\COMMUN~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\cl.exe”: 返回 代码“0x2”
Stop.
NMAKE : fatal error U1077: “"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.
Invoking "nmake" failed

解决这个问题需要使用Visual Studio 2017打开我们创建的(或者直接复制过来的)velocity_publisher.cpp文件,点击"文件",点击"高级保存选项",在编码这栏中选择Unicode(UTF-8 带签名)- 代码页65001,然后点击确定即可。
参考网页
在这里插入图片描述
再次保存文件,再次执行catkin_make指令。
编译成功

7、在执行程序之前,需要设置坏境变量
在Linux系统中执行要运行这个发布者的程序需要进行以下步骤
在这里插入图片描述
在Windows系统中只有第三行命令的执行的方式不同,在cmd中不能识别source这个命令,而且在Windows系统中在devel文件中生成的是setup.bat文件,windows系统中与source devel/setup.bash执行相同效果的是,进入到devel文件,并执行setup.bat文件。

cd devel
setup.bat

这就走完了在windows下执行一个发布者程序的所有坑。

实验过程

1、双击ROS命令窗口快捷方式,输入roscore。
在这里插入图片描述
2、运行海龟仿真器
在这里插入图片描述
3、运行自己功能包指令
直接在命令窗口输入指令的话他会出现错误提示。
在这里插入图片描述
我们需要先执行以下命令,才能让小海龟顺利跑起来。

cd c:\catkin_ws
catkin_make
cd devel
setup.bat
rosrun learning_topic velocity_publisher

在这里插入图片描述

##存在的问题
在linux中,每次执行source devel/setup.bash会很麻烦,一般会将该命令加入到隐藏文件.bashrc文件中,这样就不用每次在终端执行这条指令。
在Windows中,我考虑的解决办法是右击ROS命令窗口快解方式,点击属性,在目标那一栏加入&& c:\catkin_ws\devel\setup.bat,这样可以起到相同的效果。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41802388/article/details/112865672