ROS第一次課作業分享
2021年夏季學期學院開設了ROS的相關課程,最近在複習相關知識,正好做一下整理。下面是第一次作業的要求:
- 編寫一個ROS節點,具備以下功能:
- 讀取小海龜模擬器的/turtle1/pose話題;
- 每次讀取出新的位置後,計算上一次的位置與本次位置的距離,並累加求和;
- 持續重新整理顯示小海龜走過的距離總和;
- 啟動小海龜模擬器和小海龜的鍵盤控制節點,隨機控制小海龜運動,並不停的重新整理小海龜走過的路徑總和;
- 將自己執行時的小海龜介面和持續重新整理顯示路徑總和的終端視窗一起顯示並截圖,放在word檔案中上交。程式原始碼也放word裡。
修改後的pose_subscriber.cpp檔案如下:
#include <ros/ros.h>
#include "turtlesim/Pose.h"
double sum = 0;
double x;
double y;
double delta;
int count = 1;
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
if(!count)
{
delta = sqrt((x - msg->x) * (x - msg->x) + (y - msg->y) * (y - msg->y));
x = msg->x;
y = msg->y;
sum = sum + delta;
ROS_INFO("sum: %lf", sum);
}
else
{
x = msg->x;
y = msg->y;
count=0;
}
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "pose_subscriber");
ros::NodeHandle n;
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
ros::spin();
return 0;
}
依次每個視窗輸入即可
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun learning_topic pose_subscriber
將游標放在rosrun turtlesim turtle_teleop_key那個介面,鍵盤操縱小海龜移動。