本学习内容来自机器人工匠阿杰本人仅作学习笔记记录方便后续查看学习。详细内容可自行搜索去看机器人工匠阿杰up主讲的很好。launch文件启动多个节点单独调试某个节点发发送cmd_vel话题让机器人原地沿z轴正向旋转同时订阅发布进行避障模拟#includeros/ros.h #includesensor_msgs/LaserScan.h #includegeometry_msgs/Twist.h ros::Publisher vel_pub; int nCount 0; void LidarCallback(const sensor_msgs::LaserScan msg){ float fMidDist msg.ranges[180]; ROS_INFO(前方测距 range[180] %.2f 米, fMidDist); geometry_msgs::Twist vel_cmd; if(nCount0){ nCount--; return; } if (fMidDist1.5) { vel_cmd.angular.z0.3; nCount 50; }else{ vel_cmd.linear.x0.05; } vel_pub.publish(vel_cmd); } int main(int argc, char *argv[]) { ros::init(argc, argv, lidar_node); ros::NodeHandle n; ros::Subscriber lidar_sub n.subscribe(/scan, 10, LidarCallback); vel_pub n.advertisegeometry_msgs::Twist(cmd_vel,10); ros::spin(); return 0; }imu航向锁定#includeros/ros.h #includesensor_msgs/Imu.h #includetf/tf.h #includegeometry_msgs/Twist.h ros::Publisher vel_pub; void IMUCallback(const sensor_msgs::Imu msg){ // 检测消息包中四元数数据是否存在 if(msg.orientation_covariance[0]0) return; // 四元数转换 转换后的四元术对象quaternion tf::Quaternion quaternion( msg.orientation.x, msg.orientation.y, msg.orientation.z, msg.orientation.w ); // 欧拉角 double roll,pitch,yaw; tf::Matrix3x3(quaternion).getRPY(roll,pitch,yaw); // 弧度转角度 roll roll*180/M_PI; pitch pitch*180/M_PI; yaw yaw*180/M_PI; ROS_INFO(滚转 %.0f 仰俯 %0.f 朝向 %0.f,roll,pitch,yaw); // 速度消息包 geometry_msgs::Twist vel_cmd; // 目标朝向角 double target_yaw 90; // 当前机器人与目标朝向角差 double diff_angle target_yaw-yaw; // 计算速度 vel_cmd.angular.z diff_angle*0.01; vel_cmd.linear.x 0.1; vel_pub.publish(vel_cmd); } int main(int argc, char *argv[]) { setlocale(LC_ALL,); ros::init(argc,argv,imu_node); ros::NodeHandle n; ros::Subscriber imu_sub n.subscribe(/imu/data,10,IMUCallback); vel_pub n.advertisegeometry_msgs::Twist(/cmd_vel,10); ros::spin(); }catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generation message_runtime修改完毕直接catkin_ws 进行 catkin_make 编译sxdsxd:~/catkin_ws$ rosmsg show qq_msgs/Carry string grade int64 star string data sxdsxd:~/catkin_ws$
ros学习笔记15~40
发布时间:2026/6/3 14:32:59
本学习内容来自机器人工匠阿杰本人仅作学习笔记记录方便后续查看学习。详细内容可自行搜索去看机器人工匠阿杰up主讲的很好。launch文件启动多个节点单独调试某个节点发发送cmd_vel话题让机器人原地沿z轴正向旋转同时订阅发布进行避障模拟#includeros/ros.h #includesensor_msgs/LaserScan.h #includegeometry_msgs/Twist.h ros::Publisher vel_pub; int nCount 0; void LidarCallback(const sensor_msgs::LaserScan msg){ float fMidDist msg.ranges[180]; ROS_INFO(前方测距 range[180] %.2f 米, fMidDist); geometry_msgs::Twist vel_cmd; if(nCount0){ nCount--; return; } if (fMidDist1.5) { vel_cmd.angular.z0.3; nCount 50; }else{ vel_cmd.linear.x0.05; } vel_pub.publish(vel_cmd); } int main(int argc, char *argv[]) { ros::init(argc, argv, lidar_node); ros::NodeHandle n; ros::Subscriber lidar_sub n.subscribe(/scan, 10, LidarCallback); vel_pub n.advertisegeometry_msgs::Twist(cmd_vel,10); ros::spin(); return 0; }imu航向锁定#includeros/ros.h #includesensor_msgs/Imu.h #includetf/tf.h #includegeometry_msgs/Twist.h ros::Publisher vel_pub; void IMUCallback(const sensor_msgs::Imu msg){ // 检测消息包中四元数数据是否存在 if(msg.orientation_covariance[0]0) return; // 四元数转换 转换后的四元术对象quaternion tf::Quaternion quaternion( msg.orientation.x, msg.orientation.y, msg.orientation.z, msg.orientation.w ); // 欧拉角 double roll,pitch,yaw; tf::Matrix3x3(quaternion).getRPY(roll,pitch,yaw); // 弧度转角度 roll roll*180/M_PI; pitch pitch*180/M_PI; yaw yaw*180/M_PI; ROS_INFO(滚转 %.0f 仰俯 %0.f 朝向 %0.f,roll,pitch,yaw); // 速度消息包 geometry_msgs::Twist vel_cmd; // 目标朝向角 double target_yaw 90; // 当前机器人与目标朝向角差 double diff_angle target_yaw-yaw; // 计算速度 vel_cmd.angular.z diff_angle*0.01; vel_cmd.linear.x 0.1; vel_pub.publish(vel_cmd); } int main(int argc, char *argv[]) { setlocale(LC_ALL,); ros::init(argc,argv,imu_node); ros::NodeHandle n; ros::Subscriber imu_sub n.subscribe(/imu/data,10,IMUCallback); vel_pub n.advertisegeometry_msgs::Twist(/cmd_vel,10); ros::spin(); }catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generation message_runtime修改完毕直接catkin_ws 进行 catkin_make 编译sxdsxd:~/catkin_ws$ rosmsg show qq_msgs/Carry string grade int64 star string data sxdsxd:~/catkin_ws$