首页 > 编程知识 正文

执行系统的功能,执行系统的功能是什么

时间:2023-05-04 09:23:25 阅读:262653 作者:2240

将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:WindowsSystem32cmd.exe /k "D:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7ToolsVsDevCmd.bat" -arch=amd64 -host_arch=amd64&& set ChocolateyInstall=c:optchocolatey&& c:optrosmelodicx64setup.bat 以古月居21讲中发布话题为例


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

mkdir c:catkin_wssrccd c:catkin_wssrccatkin_init_workspace

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

cd c:catkin_wscatkin_make

结果如下:

3、创建功能包

cd c:catkin_wssrccatkin_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,队列长度10ros::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_wscatkin_make

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

C:ros_wssrclearning_topicsrcvelocity_publisher.cpp: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请 将该文件保存为 Unicode 格式以防止数据丢失C:ros_wssrclearning_topicsrcvelocity_publisher.cpp(28): error C2065: “vel_msg”: 未声明的标识符C:ros_wssrclearning_topicsrcvelocity_publisher.cpp(29): error C2065: “vel_msg”: 未声明的标识符C:ros_wssrclearning_topicsrcvelocity_publisher.cpp(32): error C2065: “vel_msg”: 未声明的标识符C:ros_wssrclearning_topicsrcvelocity_publisher.cpp(33): error C2065: “vel_msg”: 未声明的标识符C:ros_wssrclearning_topicsrcvelocity_publisher.cpp(37): error C2065: “loop_rate”: 未声明的标识符NMAKE : fatal error U1077: “D:PROGRA~1MICROS~12017COMMUN~1VCToolsMSVC1416~1.270binHostx64x64cl.exe”: 返回 代码“0x2”Stop.NMAKE : fatal error U1077: “"D:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023binHostX64x64nmake.exe"”: 返回代码“0x2”Stop.NMAKE : fatal error U1077: “"D:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.16.27023binHostX64x64nmake.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 develsetup.bat

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

实验过程

1、双击ROS命令窗口快捷方式,输入roscore。

2、运行海龟仿真器

3、运行自己功能包指令
直接在命令窗口输入指令的话他会出现错误提示。

我们需要先执行以下命令,才能让小海龟顺利跑起来。

cd c:catkin_wscatkin_makecd develsetup.batrosrun learning_topic velocity_publisher

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。