将点云坐标转换成世界坐标的demo

2023-05-16


pcl_calib.cfg  
#!/usr/bin/env python
PACKAGE = "depth_camera_calib"
NODENAME="depth_camera_calib"
from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()
# gen.add("int_param",    int_t,    0, "An Integer parameter", 50,  0, 100)
# gen.add("double_param", double_t, 0, "A double parameter",    .5, 0,   1)
# gen.add("str_param",    str_t,    0, "A string parameter",  "Hello World")
# gen.add("bool_param",   bool_t,   0, "A Boolean parameter",  True)
#
# # size_enum = gen.enum([ gen.const("Small",      int_t, 0, "A small constant"),
#                       gen.const("Medium",     int_t, 1, "A medium constant"),
#                       gen.const("Large",      int_t, 2, "A large constant"),
#                       gen.const("ExtraLarge", int_t, 3, "An extra large constant")], "An enum to set size")
#
# gen.add("size", int_t, 0, "A size parameter which is edited via an enum", 1, 0, 3, edit_method=size_enum)
#

gen.add("x_min",		double_t, 0, "x_min", -0.1, -0.5, 0.5)
gen.add("x_max",		double_t, 0, "x_max", 0.1, -0.5, 0.5)
gen.add("y_min",		double_t, 0, "y_min", -0.1, -0.5, 0.5)
gen.add("y_max",		double_t, 0, "y_max", 0.1, -0.5, 0.5)
gen.add("z_min",		double_t, 0, "z_min", 0.7, 0, 2)
gen.add("z_max",		double_t, 0, "z_max", 2, 0, 2)
gen.add("calib_xy_1",   bool_t,  0, "calib_xy_1",  False)
gen.add("calib_xy_2",   bool_t,  0, "calib_xy_2",  False)
gen.add("calib_z_1",   bool_t,  0, "calib_z_1",  False)
gen.add("calib_z_2",   bool_t,  0, "calib_z_2",  False)
gen.add("reset_calib",   bool_t,  0, "reset_calib",  False)
gen.add("prt_current_high_point_after_calib",   bool_t,  0, "prt_current_high_point",  False)

exit(gen.generate(PACKAGE, NODENAME, "pclCalib"))



pcl_calib_config.yaml

#red
world_x_1: "-15"
world_y_1: "25"

world_x_2: "15"
world_y_2: "5"

world_z_1: "0.9"
world_z_2: "28"
input_channel: /camera/depth_registered/points
output_channel: /filtered

cal_depth_camera_world.py  
//
// Created by hao on 2022/5/21.
//
#include <ros/ros.h>
// PCL specific includes 。PCL 的相关的头文件
#include <sensor_msgs/PointCloud2.h>
#include <pcl_conversions/pcl_conversions.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
//滤波的头文件
#include <pcl/filters/voxel_grid.h>
#include <dynamic_reconfigure/server.h>

#include "depth_camera_calib/pclCalibConfig.h"
#include<cmath>
#include "tf_cloud_to_world.h"


//申明发布器
ros::Publisher pub;

double x_max=100;
double x_min=-100;
double y_max=100;
double y_min=-100;
double z_max=100;
double z_min=-100;


bool calib_xy_1= false;
bool calib_xy_2= false;

bool calib_z_1= false;
bool calib_z_2= false;



std::vector<double> cal_1_x;
std::vector<double> cal_1_y;
std::vector<double> cal_1_z;
std::vector<double> cal_2_x;
std::vector<double> cal_2_y;
std::vector<double> cal_2_z;

bool calib_xy_1_done= false;
bool calib_xy_2_done= false;
bool calib_z_1_done= false;
bool calib_z_2_done= false;
bool load_calib_txt_done= false;

const std::string CALIB_ID_XY_1="CALIB_ID_XY_1";
const std::string CALIB_ID_XY_2="CALIB_ID_XY_2";
const std::string CALIB_ID_Z_1="CALIB_ID_Z_1";
const std::string CALIB_ID_Z_2="CALIB_ID_Z_2";
const std::string CALIB_ID_NONE="CALIB_ID_NONE";

bool load_calib_txt= false;

bool prt_current_high_point_after_calib=false;

void do_prt_current_high_point(std::vector<pcl::PointXYZRGBA>* keep_points){
    double _x=0;
    double _y=0;
    double _z=100;

    for (auto &point:*keep_points){
//        选择距离相机最近的点,就是z最小的点
        if (point.z<_z){
            _x=point.x;
            _y=point.y;
            _z=point.z;
        }
    }
    double world_x=0;
    double world_y=0;
    double world_z=0;

    tf_cloud_to_world tf;
    tf.cloud_to_world(_x,_y,_z,world_x,world_y,world_z);

    ROS_INFO("highest point: world coordinate: %f %f %f",world_x,world_y,world_z);
    sleep(1);

}



void write_txt(const std::string& calib_id,int data_size)
{
    double sum_x=0;
    double sum_y=0;
    double sum_z=0;
    double avg_x=0;
    double avg_y=0;
    double avg_z=0;

    if (calib_id==CALIB_ID_XY_1){
        for (auto &value:cal_1_x)
            sum_x+=value;
        for (auto &value:cal_1_y)
            sum_y+=value;

        avg_x= round(sum_x/data_size*10000)/10000;
        avg_y= round(sum_y/data_size*10000)/10000;
        avg_z=-100;
    }
    else if (calib_id==CALIB_ID_XY_2){
        for (auto &value:cal_2_x)
            sum_x+=value;
        for (auto &value:cal_2_y)
            sum_y+=value;

        avg_x= round(sum_x/data_size*10000)/10000;
        avg_y= round(sum_y/data_size*10000)/10000;
        avg_z=-100;
    }

    else if (calib_id==CALIB_ID_Z_1){
        for (auto &value:cal_1_z)
            sum_z+=value;

        avg_x= -100;
        avg_y= -100;
        avg_z= round(sum_z/data_size*10000)/10000;
    }
    else if (calib_id==CALIB_ID_Z_2){
        for (auto &value:cal_2_z)
            sum_z+=value;

        avg_x= -100;
        avg_y= -100;
        avg_z= round(sum_z/data_size*10000)/10000;
    }
    else {
        avg_x= -100;
        avg_y= -100;
        avg_z=-100;
    }

    try {

        //世界坐标从档案里读取
        std::ofstream outfile("/home/hao/Documents/depth_camera_calib.txt", std::ios::out|std::ios::app);
        std::string point1_world_x;
        std::string point1_world_y;
        std::string point1_world_z;
        ros::param::get("world_x_1",point1_world_x);
        ros::param::get("world_y_1",point1_world_y);
        ros::param::get("world_z_1",point1_world_z);
        std::string point2_world_x;
        std::string point2_world_y;
        std::string point2_world_z;
        ros::param::get("world_x_2",point2_world_x);
        ros::param::get("world_y_2",point2_world_y);
        ros::param::get("world_z_2",point2_world_z);

        if (calib_id==CALIB_ID_XY_1) {
            outfile <<"cloud_x_1:" << avg_x << std::endl;
            outfile <<"cloud_y_1:" << avg_y << std::endl;
            outfile <<"world_x_1:" << point1_world_x << std::endl;
            outfile <<"world_y_1:" << point1_world_y << std::endl;
            calib_xy_1_done= true;
        }
        else if (calib_id==CALIB_ID_XY_2) {
            outfile <<"cloud_x_2:" << avg_x << std::endl;
            outfile <<"cloud_y_2:" << avg_y << std::endl;
            outfile <<"world_x_2:" << point2_world_x << std::endl;
            outfile <<"world_y_2:" << point2_world_y << std::endl;
            calib_xy_2_done= true;
        }
        else if (calib_id==CALIB_ID_Z_1) {
            outfile <<"cloud_z_1:" << avg_z << std::endl;
            outfile <<"world_z_1:" << point1_world_z << std::endl;
            calib_z_1_done= true;
        }
        else if (calib_id==CALIB_ID_Z_2) {
            outfile <<"cloud_z_2:" << avg_z << std::endl;
            outfile <<"world_z_2:" << point2_world_z << std::endl;
            calib_z_2_done= true;
        }
        outfile.close();
    }catch(...)
    {
        std::cout<<"write txt error"<<std::endl;
    }
}


bool add_vector(const std::string& calib_id,std::vector<pcl::PointXYZRGBA>* keep_points,int data_size){

    double _x=0;
    double _y=0;
    double _z=100;

    for (auto &point:*keep_points){
//        选择距离相机最近的点,就是z最小的点
          if (point.z<_z){
            _x=point.x;
            _y=point.y;
            _z=point.z;
          }
    }

    if (calib_id==CALIB_ID_XY_1 && cal_1_x.size()<(data_size+1)){
        cal_1_x.push_back(_x);
        cal_1_y.push_back(_y);
    }
    else if (calib_id==CALIB_ID_XY_2 && cal_2_x.size()<(data_size+1)){
        cal_2_x.push_back(_x);
        cal_2_y.push_back(_y);
    }
    else if (calib_id==CALIB_ID_Z_1 && cal_1_z.size()<(data_size+1)){
        cal_1_z.push_back(_z);
    }
    else if (calib_id==CALIB_ID_Z_2 && cal_2_z.size()<(data_size+1)){
        cal_2_z.push_back(_z);
    }





    if ((calib_id==CALIB_ID_XY_1 && cal_1_x.size()==data_size) ||
        (calib_id==CALIB_ID_XY_2 && cal_2_x.size()==data_size)||
        (calib_id==CALIB_ID_Z_1 && cal_1_z.size()==data_size)||
        (calib_id==CALIB_ID_Z_2 && cal_2_z.size()==data_size))

    {
        write_txt(calib_id,data_size);
    }



    return true;
}





void do_calib(std::vector<pcl::PointXYZRGBA>* keep_points,int data_size)
{
    std::string calib_id;

    if (calib_xy_1 && !calib_xy_2 && !calib_z_1 && !calib_z_2)
        calib_id=CALIB_ID_XY_1;
    else if(!calib_xy_1 && calib_xy_2 && !calib_z_1 && !calib_z_2)
        calib_id=CALIB_ID_XY_2;
    else if(!calib_xy_1 && !calib_xy_2 && calib_z_1 && !calib_z_2)
        calib_id=CALIB_ID_Z_1;
    else if(!calib_xy_1 && !calib_xy_2 && !calib_z_1 && calib_z_2)
        calib_id=CALIB_ID_Z_2;
    else
        calib_id=CALIB_ID_NONE;

    if ((calib_id == CALIB_ID_NONE) ||
    (calib_id == CALIB_ID_XY_1 && calib_xy_1_done) ||
    (calib_id == CALIB_ID_XY_2 && calib_xy_2_done) ||
    (calib_id == CALIB_ID_Z_1 && calib_z_1_done) ||
    (calib_id == CALIB_ID_Z_2 && calib_z_2_done) )
        { return; }
    else {add_vector(calib_id,keep_points,data_size);}






}






void dynamic_cb(depth_camera_calib::pclCalibConfig &config, uint32_t level) {
//    ROS_INFO("Reconfigure Request: x_max:%f x_min:%f y_max:%f y_min:%f  z_max:%f z_min:%f calib_xy_1:%s calib_xy_2:%s calib_z_1:%s calib_z_2:%s reset_calib:%s",
//             config.x_max,
//             config.x_min,
//             config.y_max,
//             config.y_min,
//             config.z_max,
//             config.z_min,
//
//             config.calib_xy_1?"True":"False",
//             config.calib_xy_2?"True":"False",
//             config.calib_z_1?"True":"False",
//             config.calib_z_2?"True":"False",
//             config.reset_calib?"True":"False"
//             );

    x_max=config.x_max;
    x_min=config.x_min;
    y_max=config.y_max;
    y_min=config.y_min;
    z_max=config.z_max;
    z_min=config.z_min;

    calib_xy_1=config.calib_xy_1;
    calib_xy_2=config.calib_xy_2;
    calib_z_1=config.calib_z_1;
    calib_z_2=config.calib_z_2;

//    load_calib_txt=config.load_calib_txt;
    prt_current_high_point_after_calib=config.prt_current_high_point_after_calib;

    if (config.reset_calib) {
        ROS_INFO("Reconfigure Request: reset all");

        calib_xy_1_done = false;
        calib_xy_2_done= false;
        calib_z_1_done= false;
        calib_z_2_done= false;
        cal_1_x.clear();
        cal_1_y.clear();
        cal_1_z.clear();
        cal_2_x.clear();
        cal_2_y.clear();
        cal_2_z.clear();


    }


}


//回调函数
void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& cloud_msg)
{
//    std::string frame_id=cloud_msg->head->frame_id;
    auto* cloud = new pcl::PCLPointCloud2; //原始的点云的数据格式
    pcl::PCLPointCloud2ConstPtr cloudPtr(cloud);
    pcl_conversions::toPCL(*cloud_msg, *cloud);

    pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud_points(new pcl::PointCloud<pcl::PointXYZRGBA>());

    pcl::fromPCLPointCloud2(*cloud, *cloud_points);

    auto *keep_points=new std::vector<pcl::PointXYZRGBA>();
    for (auto &point:*cloud_points){
        if (point.x <= x_max && point.x >= x_min && point.y <= y_max && point.y >= y_min && point.z <= z_max && point.z >= z_min) {
            keep_points->push_back(point);
        }
    }


    auto* filtered_cloud(new pcl::PointCloud<pcl::PointXYZRGBA>());

    filtered_cloud->width=keep_points->size();
    filtered_cloud->height=1;
    filtered_cloud->resize(filtered_cloud->width*filtered_cloud->height);

    for (size_t i = 0; i < keep_points->size(); ++i)   //循环填充点云数据
    {
        filtered_cloud->points[i]=(*keep_points)[i];

    }

    pcl::PCLPointCloud2 filtered_cloud2;
    pcl::toPCLPointCloud2 (*filtered_cloud, filtered_cloud2);

    sensor_msgs::PointCloud2 senser_msg_cloud2;//声明的输出的点云的格式

    pcl_conversions::moveFromPCL(filtered_cloud2, senser_msg_cloud2);//第一个参数是输入,后面的是输出

    senser_msg_cloud2.header.frame_id="camera_depth_optical_frame";

    pub.publish (senser_msg_cloud2);


    do_calib(keep_points,5);

//    if (load_calib_txt && !load_calib_txt_done){
//
//    }


    if(prt_current_high_point_after_calib){
        do_prt_current_high_point(keep_points);
    }


}



int main (int argc, char** argv){

    ros::init(argc, argv, "depth_camera_calib");
    ros::NodeHandle nh;



    dynamic_reconfigure::Server<depth_camera_calib::pclCalibConfig> server;
    dynamic_reconfigure::Server<depth_camera_calib::pclCalibConfig>::CallbackType f;
    f = boost::bind(&dynamic_cb, _1, _2);
    server.setCallback(f);

    std::string input_channel;
    std::string output_channel;
    ros::param::get("input_channel",input_channel);
    ros::param::get("output_channel",output_channel);

//    std::cout<<"input_channel:"<<input_channel<<std::endl;
//    std::cout<<"output_channel:"<<output_channel<<std::endl;

    //设定点云call back
    ros::Subscriber sub = nh.subscribe<sensor_msgs::PointCloud2> (input_channel, 1, cloud_cb);

    //设定点云处理后的 publisher
    pub = nh.advertise<sensor_msgs::PointCloud2> (output_channel, 1);

    ROS_INFO("Spinning node");
    ros::spin();
    return 0;



}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将点云坐标转换成世界坐标的demo 的相关文章

  • STM32CUBEMX使用PWM+DMA驱动WS2812

    STM32CUBEMX使用PWM 43 DMA驱动WS2812 首先在stm32cubemx中设置pwm和dma 我设置了TIM1的CH1为PWM引脚编写DMA响应函数 xff0c 即PWM DMA完成数据发送后的回调函数 PWM DMA
  • Arduino IDE配置STM32开发环境和程序烧录

    Arduino IDE配置STM32开发环境和烧录 前言 xff1a 最近在制作3D打印机 xff0c 自己画了一块STM32F446的3D打印机板子 xff08 RUMBA32 xff09 xff0c 但是在Arduino编译Marlin
  • Altium Designer 20(AD20)的PCB文件在嘉立创下单显示无外型文件解决方法

    Altium Designer 20 AD20 的PCB文件在嘉立创下单显示无外型文件解决方法 如上图 xff0c 在机械层1中生成外形 xff0c 勾选最后两个 如果不行 xff0c 修改宽度为10mil试一下
  • CH552 USB HID键盘

    客制化键盘制作V1 CH552工程 目前正在客制化一个小键盘 xff0c 计划8月中旬在咸鱼上售卖 xff0c 功能包括 xff1a 蓝牙有线双模 xff0c 蓝牙 5 0 xff08 nrf52810 xff09 xff0c 低功耗模式按
  • [pixhawk笔记]5-uORB消息传递

    本文主要内容翻译自官方文档 xff1a https dev px4 io en middleware uorb html 在前一篇笔记中使用uORB完成消息传递 xff0c 实现了一个简单示例程序 xff0c 本文将对uORB进行系统学习
  • 2019全国电赛总结

    准备阶段 xff1a 赛前大约一个星期就开始全力备战电赛 xff0c 由于学校条件不算太好 xff0c 所以选题上就不选放大器设计之类的题目 xff0c 只能选择一些电源题 xff0c 控制题 xff0c 造飞机题 技术准备 xff1a 这
  • UBUNTU使用RTL8811CU网卡(包含树莓派)

    8811cu 8821 github链接 一 普通的Ubuntu系统 xff0c 测试的是ubuntu18 04 下载驱动 从绿联中下载 xff1a 链接 下载解压后 xff0c chmod Linux文件夹 sudo chmod R 77
  • XTDrone ROS安装

    XTDrone ROS安装 本博客是参考XTDrone内容 xff0c 进行ROS安装和配置 参考连接 xff1a XTDrone 梗概ubuntu18的源 xff0c 并更新 参考 xff1a 更改ubunut源 sudo apt upd
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • XTDrone 视觉SLAM环境配置

    基于XTDrone的视觉SLAM章节 xff0c 进行环境配置 中途遇到了一些问题 xff0c 一一解决后成功完成了 xff0c 记录该流程 一 遇到的问题与参考链接 XTDrone相关参考连接 xff1a 链接依赖安装教程 xff1a O
  • XTDrone 视觉惯性里程计(VIO)配置

    XTDrone 视觉惯性里程计 xff08 VIO xff09 配置 参考XTDron进行配置 xff0c 对于依赖的配置写成文档 xff0c 参考主要为 xff1a XTDrone Ceres Solver 2 0 0 1 下载2 0 0
  • ros realsense D435i摄像头配置

    ros realsense D435i摄像头配置 之前在ubunut18中配置了ROS环境 xff0c 现在需要在此基础上 xff0c 配置D435i相机的SDK和ROS包 一 参考 https github com IntelRealSe
  • 树莓派4B(ubuntu mate系统)使用d435i运行vins

    树莓派4B xff08 ubuntu mate系统 xff09 使用d435i运行vins 提示本文为随手笔记 xff0c 并不严谨 xff0c 可参考 xff1a 博客和博客进行配置 树莓派 ubuntu mate 20系统安装ros的步
  • 树莓派3B+增加虚拟内存

    普通ubuntu系统增加虚拟内存参考 xff1a https blog csdn net weixin 42405819 article details 117886557 编译opencv时 xff0c 卡在了91 不动 xff0c 按照
  • ROS主机从机设置

    ROS主机从机设置 在ROS基础上 xff0c 配置主机和从机 xff0c 实现主机和从机的话题联通 配置hosts 在主机和从机的 etc hosts文件中 xff0c 配置如下内容 xff08 也许主机只需要写入 master xff1
  • VINS、MAVROS等的坐标系统一(草稿,未得出明确结果)

    由于不同算法之间的坐标系不同 xff0c 导致计算的结果混乱 xff0c 该博客的目的是记录和统一不同算法之间的坐标系 xff0c 保证坐标系的统一 一 VINS算法 vins算法 xff0c 使用D435I相机 该坐标方向为 xff1a
  • ROS学习笔记9-创建ros消息和服务

    该节内容主要来自于官方文档的两个小节 xff1a 1 使用rosed来编辑 2 创建ros消息的服务 先来看rosed xff1a rosed rosed命令是rosbash的一部分 xff0c 使用rosed可以直接编辑包中的一个文件 x
  • CUAV RTK初步使用体验和感受

    记录使用RTK进行无人机定位并操作的使用体验 一 RTK定位设置 使用的是CUAV制作发售的RTK xff0c 型号为C9P xff0c 目前该产品已经下架 xff0c 上新了C9PS 并不需要太多的设置 xff0c 在飞控接入RTK后 x
  • 记录一次WIN11开机在登录页面循环的问题

    记录一次由于未进行win密码设置 xff0c 导致开机后卡在登录界面无法登录进去的问题 最后完美解决了 1 背景 开机后 xff0c 显示用户登录界面 xff0c 但是和以往不同 xff0c 没有了密码输入框 xff0c 只有一个 登录 按
  • Ubuntu中增加串口的缓冲区

    增加串口缓冲区 xff0c 用于尝试解决px4 ros中显示TX溢出的问题 以下大部分代码和内容均有CHATGPT生成 xff0c 代码已经通过验证 一 通信溢出问题 PX4和ROS的通信溢出可能是由于几个原因造成的 以下是一些建议 xff

随机推荐

  • GRBL代码使用与修改

    下载官方grbl代码 xff0c 并进行修改使其正确 1 问题 xff1a 购买了328p单片机 xff0c 购买了grbl的底板 xff0c 但是烧录之后无法正常使用 问题发现 xff1a 引脚错误了 xff0c 官方代码中的引脚需要修改
  • ubuntu使用rc.local开机自启USB设备读写权限

    无人机飞控为ACM0 xff0c 串口USB为USB0 xff0c 使用rc为其开机自启给与权限 大部分由chagpt生成 xff0c 已验证 首先 xff0c 创建一个新的 etc rc local 文件 xff08 如果尚不存在 xff
  • Friendlycore增加inodes数量

    背景 xff1a 为Nanopim1安装了core系统 xff0c tf卡大小64G xff0c 安装后正常扩展到了整个tf卡 xff0c 但是在安装hass的docker显示磁盘空间不够 xff0c 最终发现是inode被用完了 其ino
  • UORB

    转载地址 xff1a http blog arm so armteg pixhawk 183 0503 html Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixh
  • rCS启动脚本分析

    转载地址 xff1a http wellmakers com p 61 401 还有一篇很重要的文章 xff0c 讲述了整个系统的大致启动过程 xff1a http blog chinaunix net uid 29786319 id 43
  • PID通俗解释

    转载地址 xff1a http blog gkong com liaochangchu 117560 ashx PID是比例 积分 微分的简称 xff0c PID控制的难点不是编程 xff0c 而是控制器的参数整定 参数整定的关键是正确地理
  • Kali Linux中安装Xfce的步骤2-1

    Kali Linux默认安装的是桌面环境是Gnome xff0c 可以通过以下方法在Kali Linux中安装Xfce xff0c 从而修改其桌面环境 1 Xfce介绍 Xfce是XForms Common Enviroment的简写 其可
  • STM32CubeMX教程之简介及基本使用

    STM32CubeMX是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言代码 xff0c 支持多种工具链 xff0c 比如MDK IAR For ARM TrueStudio等 尤
  • Linux 文件流与目录流管理

    Linux 应用开发 04 文件流与目录流管理 本课目标 1 编程目标 xff1a a 实现磁盘文件的拷贝操作 b 缓冲区类型对磁盘真正写入操作的影响 2 理解文件流操作以及缓冲区概念 3 掌握ansi c 文件流相关操作函数 4 理解与掌
  • tensorflow InvalidArgumentError: Cannot serialize protocol buffer of type tensorflow.GraphDef 错误分析

    训练nfm模型 xff0c 每2000个step进行保存 一开始模型训练正常 xff0c 但是在使用tf train Saver的save方法保存模型时出现了如下错误 xff1a tensorflow python framework er
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 八款值得尝试的精美的Linux发行版,你用过哪几款?

    Linux发行版各式各样 xff0c 每个发行版都有自己的特点 xff0c 在这篇文章中 xff0c 将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版 xff0c 包括对初学者友好和流行的发行版 elementary
  • VINS-mono 解析 生成用于回环检测的字典文件

    VINS回环检测使用的是FAST xff08 Features from Accelerated Segment Test xff09 特征点检测 xff0c 并利用BRIEF描述子存储特征 挑选了两个实时性较好的检测和描述 BRIEF提供
  • 将git下载的c++项目用vs打开

    首先确定下载的项目里包括CMakeLists txt的文件 然后在文件所在目录用cmd或power shell输入以下命令 以2017版本为例 cmake G 34 Visual Studio 15 2017 Win64 34 中间那个 表
  • 用 verilog 实现 minst 数字识别

    用verilog实现minst 的数字识别 可以用modelsim看结果 如果要部署到fpga上 PL的资源要非常非常多 代码下载 包含5个仿真文件 https download csdn net download howard789 13
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境
  • 4自由度机械臂正逆解公式推导与代码实现

    视频链接 四自由度机械臂逆解抓取 含代码 哔哩哔哩 bilibili 代码 import math P 61 7 5 A1 61 12 1 A2 61 8 2 A3 61 8 2 A4 61 18 5 MAX LEN 61 A2 43 A3
  • 无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0) 解决办法

    将 SolidSQUAD 的Program Files里的所有文件夹覆盖到安装目录下 xff0c 如果是默认安装 xff0c 就是复制到C Program Files SOLIDWORKS Corp下 xff08 而不是C Program
  • 打开被独占的文件方法(二) -- 修改句柄访问权限

    打开被独占的文件方法 二 修改句柄访问权限 2010年06月08日 星期二 11 40 来自 xff1a http hi baidu com wsh chb blog item 1dfafadd4da473d48d1029a8 html 修
  • 将点云坐标转换成世界坐标的demo

    pcl calib cfg usr bin env python PACKAGE 61 34 depth camera calib 34 NODENAME 61 34 depth camera calib 34 from dynamic r