x265-1.8版本-common/framedata.cpp注释

本文介绍x265编码器中帧数据管理的具体实现,包括帧数据的初始化、内存分配与释放等关键步骤。重点讲解了CTU(Coding Tree Unit)的数据结构及其在帧中的布局方式。

注:问号以及未注释部分 会在x265-1.9版本内更新

/*****************************************************************************
* Copyright (C) 2013 x265 project
*
* Author: Steve Borho <steve@borho.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
*
* This program is also available under a commercial proprietary license.
* For more information, contact us at license @ x265.com.
*****************************************************************************/

#include "framedata.h"
#include "picyuv.h"

using namespace X265_NS;
/** 函数功能    :初始化
/*  调用范围    :只在Frame::allocEncodeData函数中被调用
*/
FrameData::FrameData()
{
    memset(this, 0, sizeof(*this));
}
/** 函数功能    :申请一帧CTU的存储空间,初始化CTU、初始化统计信息
/*  调用范围    :只在Frame::allocEncodeData函数中被调用
* \返回值       :申请空间成功为ture,否则为false
*/
bool FrameData::create(x265_param *param, const SPS& sps)
{
    m_param = param;    //获取配置参数
    m_slice  = new Slice;//实例化
    m_picCTU = new CUData[sps.numCUsInFrame];//申请一帧CTU个数的空间

    m_cuMemPool.create(0, param->internalCsp, sps.numCUsInFrame);//申请CTU内存空间
    for (uint32_t ctuAddr = 0; ctuAddr < sps.numCUsInFrame; ctuAddr++)
        m_picCTU[ctuAddr].initialize(m_cuMemPool, 0, param->internalCsp, ctuAddr);//初始化函数指针,获取CTU数据相应存储位置

    CHECKED_MALLOC(m_cuStat, RCStatCU, sps.numCUsInFrame);
    CHECKED_MALLOC(m_rowStat, RCStatRow, sps.numCuInHeight);
    reinit(sps);//初始化统计信息
    return true;

fail:
    return false;
}
/** 函数功能    :初始化统计信息为0
/*  调用范围    :只在FrameData::create和Frame::reinit函数中被调用
* \返回值       :null
*/
void FrameData::reinit(const SPS& sps)
{
    memset(m_cuStat, 0, sps.numCUsInFrame * sizeof(*m_cuStat));
    memset(m_rowStat, 0, sps.numCuInHeight * sizeof(*m_rowStat));
}
/** 函数功能    :释放内存
/*  调用范围    :只在Frame::destroy()和DPB::~DPB()函数中被调用
*/
void FrameData::destroy()
{
    delete [] m_picCTU;
    delete m_slice;
    delete m_saoParam;

    m_cuMemPool.destroy();

    X265_FREE(m_cuStat);
    X265_FREE(m_rowStat);
}


 

capturerunner.h 如下 #ifndef CAPTURERUNNER_H #define CAPTURERUNNER_H #include <thread> #include <atomic> #include "../common/XThreadPool.h" #include "../logger/logger.h" extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libavutil/fifo.h> } #define min_time_interval 40 struct CaptureRunnerParam { Capture* capt; // 视频捕获对象指针 AVFifo* fifo; // AVFifo帧数据队列 }; class CaptureRunner : public XTask { public: int Init(void* param); void Deinit(void); int Start(int time); int Stop(void); int Run(); private: std::atomic<bool> m_is_running; Logger::ptr m_logger; Capture* m_capt; AVFifo* m_fifo; int m_time_interval; }; #endif // CAPTURERUNNER_H capturerunner.cpp如下 #include "capturerunner.h" #include <chrono> using namespace std; int CaptureRunner::Init(void* param) { CaptureRunnerParam* c = (CaptureRunnerParam*)param; this->m_capt = c->capt; this->m_fifo = c->fifo; this->m_logger = DefaultLogger(); return 0; } void CaptureRunner::Deinit() { if(m_is_running) { this->Stop(); } return; } int CaptureRunner::Start(int time) { this->m_time_interval = time; Run(); return 0; } int CaptureRunner::Stop() { m_is_running = false; return 0; } int CaptureRunner::Run() { if(m_is_running) { m_logger->Error("Running now"); return -1; } m_is_running = true; int ret = 0; while(m_is_running) { AVFrame* frame = m_capt->CaptureFrame(); if(!frame) { m_logger->Error("readfile failed"); this_thread::sleep_for(chrono::seconds(1)); continue; } // 将帧写入AVFifo ret = av_fifo_write(m_fifo, &frame, 1); if(ret < 0) { m_logger->Error("write to fifo failed"); av_frame_free(&frame); continue; } if(m_time_interval > min_time_interval) { this_thread::sleep_for(chrono::milliseconds(m_time_interval)); } else { this_thread::sleep_for(chrono::milliseconds(min_time_interval)); } } return 0; } capt_test.cpp如下 #include <signal.h> #include <atomic> #include "../common/XThreadPool.h" #include "test.h" #include "../capt/capture.h" #include "../capt/capturerunner.h" extern "C" { #include <libavutil/fifo.h> #include <libavutil/imgutils.h> } using namespace std; Logger::ptr Logger2 = DefaultLogger(); class capt_write : public XTask { public: int Run(); void Stop(); int Init(CaptureRunnerParam* param); void Deinit(); atomic<bool> is_running; AVFifo* fifo; FILE* fp; AVPixelFormat pix_fmt; int width, height; }; int capt_write::Init(CaptureRunnerParam* par) { this->fifo = par->fifo; this->fp = fopen("/home/kylin/zxk/test20241029/output.yuv", "wb"); if(!fp) { Logger2->Error("Failed to open output file"); return -1; } // 从捕获对象获取参数 this->width = par->capt->m_width; this->height = par->capt->m_height; this->pix_fmt = par->capt->m_pixel_fmt; return 0; } int capt_write::Run() { if(is_running) { Logger2->Error("Running now"); return -1; } is_running = true; while(is_running) { if(av_fifo_can_read(fifo) <= 0) { Logger2->Warning("Fifo empty"); this_thread::sleep_for(chrono::seconds(1)); continue; } AVFrame* frame = nullptr; av_fifo_read(fifo, &frame, 1); if(!frame) { Logger2->Warning("frame is NULL"); continue; } // 计算各分量大小 size_t y_bytes = width * height; size_t u_bytes = 0, v_bytes = 0; switch(pix_fmt) { case AV_PIX_FMT_YUYV422: y_bytes = width * height * 2; // YUYV packed格式 break; case AV_PIX_FMT_YUV420P: u_bytes = width * height / 4; v_bytes = width * height / 4; break; case AV_PIX_FMT_BGR0: y_bytes = width * height * 4; // BGR0 packed格式 break; } // 写入文件 fwrite(frame->data[0], 1, y_bytes, fp); if(u_bytes > 0) fwrite(frame->data[1], 1, u_bytes, fp); if(v_bytes > 0) fwrite(frame->data[2], 1, v_bytes, fp); av_frame_free(&frame); } return 0; } void capt_write::Deinit() { if(is_running) { Stop(); } if(fp) { fclose(fp); } } void capt_write::Stop() { is_running = false; } bool stop2 = false; void sigint_handler02(int sig_num) { stop2 = true; } // 初始化V4L2捕获参数 void init_v4l2(CaptParam& c) { c.width = 1280; c.height = 720; c.file_name = "/dev/video0"; c.pixel_fmt = AV_PIX_FMT_YUYV422; c.v4l2_buffer_type = V4L2_BUF_TYPE_VIDEO_CAPTURE; c.v4l2_memory_type = V4L2_MEMORY_MMAP; c.v4l2_pixel_fmt = V4L2_PIX_FMT_YUYV; } // 初始化文件捕获参数 void init_file(CaptParam& c) { c.file_name = "/home/kylin/zxk/test20241021/testyuv.yuv"; c.width = 1280; c.height = 720; c.pixel_fmt = AV_PIX_FMT_YUV420P; } // 初始化屏幕捕获参数 void init_screen(CaptParam& c) { c.width = 1920; c.height = 1080; c.pixel_fmt = AV_PIX_FMT_BGR0; } int capt_test() { CaptParam c; // 选择一种捕获方式初始化 (取消注释对应的行) //init_v4l2(c); // V4L2捕获 init_file(c); // 文件捕获 //init_screen(c); // 屏幕捕获 // 创建AVFifo AVFifo* fifo = av_fifo_alloc2(10 * 1024 * 1024, 1, 0); // 10MB缓冲区 // 创建捕获对象 (与上面选择的初始化方式对应) //Capture* capt = new V4L2Capture; Capture* capt = new FileCapture; //Capture* capt = new ScreenCapture; capt->Init(&c); // 设置任务参数 CaptureRunnerParam param; param.capt = capt; param.fifo = fifo; // 创建任务 auto c1 = make_shared<CaptureRunner>(); auto c2 = make_shared<capt_write>(); c1->Init(&param); c2->Init(&param); // 启动线程池 XThreadPool pool; pool.Init(2); pool.Start(); pool.AddTask(c1); pool.AddTask(c2); // 主循环 signal(SIGINT, sigint_handler02); signal(SIGKILL, sigint_handler02); while(!stop2) { this_thread::sleep_for(chrono::milliseconds(100)); } // 清理 c2->Deinit(); this_thread::sleep_for(chrono::milliseconds(1000)); c1->Deinit(); capt->Deinit(); av_fifo_freep2(&fifo); pool.Stop(); return 0; } CMakeLists.txt 如下 cmake_minimum_required(VERSION 3.15) project(CaptureTest) set(CMAKE_CXX_STANDARD 11) #添加头文件搜索路径 include_directories( ${CMAKE_SOURCE_DIR}/include /home/zhanghan/include /home/zhanghan/Log/Log-lib/include /usr/local/include ) #添加静态库路径 link_directories( /home/zhanghan/Log ) # 查找FFmpeg相关库 find_package(PkgConfig REQUIRED) pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswscale libavdevice ) # 添加FFmpeg头文件 include_directories(${FFMPEG_INCLUDE_DIRS}) # 所有源文件 set(SOURCES main.cpp capt_test.cpp ../logger/logger.cpp ../logger/formatter.cpp ../logger/logsink.cpp ../logger/asynlopper.cpp ../capt/capturerunner.cpp ../capt/capture.cpp ../common/XThreadPool.cpp ../capt/ScreenCapture.cpp ../capt/V4L2Capture.cpp ../capt/FileCapture.cpp ) add_executable(capture_test ${SOURCES}) # 链接库 target_link_libraries(capture_test pthread ${FFMPEG_LIBRARIES} log ) 错误信息如下 zhanghan@zhanghan-virtual-machine:~/daima/2/test2/build$ make -- Configuring done -- Generating done -- Build files have been written to: /home/zhanghan/daima/2/test2/build Consolidate compiler generated dependencies of target capture_test [ 7%] Building CXX object CMakeFiles/capture_test.dir/capt_test.cpp.o In file included from /home/zhanghan/daima/2/test2/capt_test.cpp:6: /home/zhanghan/daima/2/test2/../capt/capturerunner.h:19:5: error: ‘AVFifo’ does not name a type 19 | AVFifo* fifo; // AVFifo帧数据队列 | ^~~~~~ /home/zhanghan/daima/2/test2/../capt/capturerunner.h:34:5: error: ‘AVFifo’ does not name a type 34 | AVFifo* m_fifo; | ^~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:25:5: error: ‘AVFifo’ does not name a type 25 | AVFifo* fifo; | ^~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp: In member function ‘int capt_write::Init(CaptureRunnerParam*)’: /home/zhanghan/daima/2/test2/capt_test.cpp:32:11: error: ‘class capt_write’ has no member named ‘fifo’ 32 | this->fifo = par->fifo; | ^~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:32:23: error: ‘struct CaptureRunnerParam’ has no member named ‘fifo’ 32 | this->fifo = par->fifo; | ^~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:40:30: error: ‘int Capture::m_width’ is protected within this context 40 | this->width = par->capt->m_width; | ^~~~~~~ In file included from /home/zhanghan/daima/2/test2/capt_test.cpp:5: /home/zhanghan/daima/2/test2/../capt/capture.h:87:9: note: declared protected here 87 | int m_width; | ^~~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:40:30: note: field ‘int Capture::m_width’ can be accessed via ‘int Capture::GetWidth() const’ 40 | this->width = par->capt->m_width; | ^~~~~~~ | GetWidth() /home/zhanghan/daima/2/test2/capt_test.cpp:41:31: error: ‘int Capture::m_height’ is protected within this context 41 | this->height = par->capt->m_height; | ^~~~~~~~ In file included from /home/zhanghan/daima/2/test2/capt_test.cpp:5: /home/zhanghan/daima/2/test2/../capt/capture.h:88:9: note: declared protected here 88 | int m_height; | ^~~~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:41:31: note: field ‘int Capture::m_height’ can be accessed via ‘int Capture::GetHeight() const’ 41 | this->height = par->capt->m_height; | ^~~~~~~~ | GetHeight() /home/zhanghan/daima/2/test2/capt_test.cpp:42:32: error: ‘AVPixelFormat Capture::m_pixel_fmt’ is protected within this context 42 | this->pix_fmt = par->capt->m_pixel_fmt; | ^~~~~~~~~~~ In file included from /home/zhanghan/daima/2/test2/capt_test.cpp:5: /home/zhanghan/daima/2/test2/../capt/capture.h:89:19: note: declared protected here 89 | AVPixelFormat m_pixel_fmt; | ^~~~~~~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:42:32: note: field ‘AVPixelFormat Capture::m_pixel_fmt’ can be accessed via ‘AVPixelFormat Capture::GetPixelFmt() const’ 42 | this->pix_fmt = par->capt->m_pixel_fmt; | ^~~~~~~~~~~ | GetPixelFmt() /home/zhanghan/daima/2/test2/capt_test.cpp: In member function ‘virtual int capt_write::Run()’: /home/zhanghan/daima/2/test2/capt_test.cpp:55:29: error: ‘fifo’ was not declared in this scope; did you mean ‘mkfifo’? 55 | if(av_fifo_can_read(fifo) <= 0) { | ^~~~ | mkfifo /home/zhanghan/daima/2/test2/capt_test.cpp:55:12: error: ‘av_fifo_can_read’ was not declared in this scope; did you mean ‘av_fifo_generic_read’? 55 | if(av_fifo_can_read(fifo) <= 0) { | ^~~~~~~~~~~~~~~~ | av_fifo_generic_read /home/zhanghan/daima/2/test2/capt_test.cpp:62:22: error: ‘fifo’ was not declared in this scope; did you mean ‘mkfifo’? 62 | av_fifo_read(fifo, &frame, 1); | ^~~~ | mkfifo /home/zhanghan/daima/2/test2/capt_test.cpp:62:9: error: ‘av_fifo_read’ was not declared in this scope; did you mean ‘avio_read’? 62 | av_fifo_read(fifo, &frame, 1); | ^~~~~~~~~~~~ | avio_read /home/zhanghan/daima/2/test2/capt_test.cpp: In function ‘int capt_test()’: /home/zhanghan/daima/2/test2/capt_test.cpp:149:5: error: ‘AVFifo’ was not declared in this scope 149 | AVFifo* fifo = av_fifo_alloc2(10 * 1024 * 1024, 1, 0); // 10MB缓冲区 | ^~~~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:149:13: error: ‘fifo’ was not declared in this scope; did you mean ‘mkfifo’? 149 | AVFifo* fifo = av_fifo_alloc2(10 * 1024 * 1024, 1, 0); // 10MB缓冲区 | ^~~~ | mkfifo /home/zhanghan/daima/2/test2/capt_test.cpp:149:20: error: ‘av_fifo_alloc2’ was not declared in this scope; did you mean ‘av_fifo_alloc’? 149 | AVFifo* fifo = av_fifo_alloc2(10 * 1024 * 1024, 1, 0); // 10MB缓冲区 | ^~~~~~~~~~~~~~ | av_fifo_alloc /home/zhanghan/daima/2/test2/capt_test.cpp:161:11: error: ‘struct CaptureRunnerParam’ has no member named ‘fifo’ 161 | param.fifo = fifo; | ^~~~ /home/zhanghan/daima/2/test2/capt_test.cpp:188:5: error: ‘av_fifo_freep2’ was not declared in this scope; did you mean ‘av_fifo_freep’? 188 | av_fifo_freep2(&fifo); | ^~~~~~~~~~~~~~ | av_fifo_freep 如何解决?
06-06
h3c@h3c-H3C-X5-030t:~/catkin_ws$ roslaunch wpr_simulation wpb_gmapping.launch ... logging to /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/roslaunch-h3c-H3C-X5-030t-16583.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://h3c-H3C-X5-030t:38259/ SUMMARY ======== PARAMETERS * /axis_angular: 0 * /axis_linear: 1 * /gazebo/enable_ros_network: True * /joy_node/deadzone: 0.12 * /joy_node/dev: /dev/input/js0 * /robot_description: <?xml version="1.... * /rosdistro: noetic * /rosversion: 1.17.4 * /scale_angular: 1.0 * /scale_linear: 0.5 * /use_sim_time: True NODES / bed (gazebo_ros/spawn_model) bookshelft (gazebo_ros/spawn_model) chair_0 (gazebo_ros/spawn_model) chair_1 (gazebo_ros/spawn_model) chair_2 (gazebo_ros/spawn_model) chair_3 (gazebo_ros/spawn_model) cupboard_0 (gazebo_ros/spawn_model) cupboard_1 (gazebo_ros/spawn_model) dinning_table_0 (gazebo_ros/spawn_model) dinning_table_1 (gazebo_ros/spawn_model) dinning_table_2 (gazebo_ros/spawn_model) dinning_table_3 (gazebo_ros/spawn_model) gazebo (gazebo_ros/gzserver) gazebo_gui (gazebo_ros/gzclient) joint_state_publisher (joint_state_publisher/joint_state_publisher) joy_node (joy/joy_node) kitchen_table (gazebo_ros/spawn_model) lidar_filter (wpr_simulation/lidar_filter) robot_state_publisher (robot_state_publisher/robot_state_publisher) rviz (rviz/rviz) slam_gmapping (gmapping/slam_gmapping) sofa (gazebo_ros/spawn_model) spawn_urdf (gazebo_ros/spawn_model) tea_table (gazebo_ros/spawn_model) teleop_js_node (wpr_simulation/teleop_js_node) ROS_MASTER_URI=http://localhost:11311 process[gazebo-1]: started with pid [16599] process[gazebo_gui-2]: started with pid [16604] process[bed-3]: started with pid [16608] process[sofa-4]: started with pid [16610] process[tea_table-5]: started with pid [16611] process[bookshelft-6]: started with pid [16612] process[kitchen_table-7]: started with pid [16613] process[cupboard_0-8]: started with pid [16614] process[cupboard_1-9]: started with pid [16615] process[dinning_table_0-10]: started with pid [16616] process[dinning_table_1-11]: started with pid [16617] process[dinning_table_2-12]: started with pid [16618] process[dinning_table_3-13]: started with pid [16619] process[chair_0-14]: started with pid [16623] process[chair_1-15]: started with pid [16625] process[chair_2-16]: started with pid [16626] process[chair_3-17]: started with pid [16627] process[spawn_urdf-18]: started with pid [16628] process[robot_state_publisher-19]: started with pid [16629] process[joint_state_publisher-20]: started with pid [16631] process[lidar_filter-21]: started with pid [16637] process[slam_gmapping-22]: started with pid [16647] process[rviz-23]: started with pid [16662] process[joy_node-24]: started with pid [16688] process[teleop_js_node-25]: started with pid [16701] [ERROR] [1757056623.055226400]: Couldn't open joystick /dev/input/js0. Will retry every second. INFO: cannot create a symlink to latest log directory: [Errno 17] File exists: '/home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6' -> '/home/h3c/.ros/log/latest' [INFO] [1757056623.283041076]: Finished loading Gazebo ROS API Plugin. [INFO] [1757056623.283804852]: waitForService: Service [/gazebo/set_physics_properties] has not been advertised, waiting... [INFO] [1757056623.334556790]: Finished loading Gazebo ROS API Plugin. [INFO] [1757056623.335576156]: waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting... [INFO] [1757056624.063954592]: waitForService: Service [/gazebo/set_physics_properties] is now available. [ERROR] [1757056624.072195, 0.000000]: Spawn service failed. Exiting. [INFO] [1757056624.075687100, 266.729000000]: Physics dynamic reconfigure ready. Warning: TF_REPEATED_DATA ignoring data with redundant timestamp for frame odom (parent map) at time 266.871000 according to authority unknown_publisher at line 277 in /tmp/binarydeb/ros-noetic-tf2-0.7.10/src/buffer_core.cpp [WARN] [1757056624.344992822, 266.821000000]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame odom (parent map) at time 266.871000 according to authority unknown_publisher ../src/intel/isl/isl.c:2105: FINISHME: ../src/intel/isl/isl.c:isl_surf_supports_ccs: CCS for 3D textures is disabled, but a workaround is available. [sofa-4] process has died [pid 16610, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -file /home/h3c/catkin_ws/src/wpr_simulation/models/sofa.model -x -1.0 -y -3.9 -z 0 -Y 1.57 -urdf -model sofa __name:=sofa __log:=/home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/sofa-4.log]. log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/sofa-4*.log [bed-3] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/bed-3*.log [tea_table-5] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/tea_table-5*.log [bookshelft-6] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/bookshelft-6*.log [cupboard_1-9] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/cupboard_1-9*.log [cupboard_0-8] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/cupboard_0-8*.log [kitchen_table-7] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/kitchen_table-7*.log [dinning_table_1-11] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/dinning_table_1-11*.log terminate called after throwing an instance of 'gazebo::common::Exception' [chair_0-14] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/chair_0-14*.log [dinning_table_3-13] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/dinning_table_3-13*.log [dinning_table_2-12] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/dinning_table_2-12*.log [chair_1-15] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/chair_1-15*.log [INFO] [1757056627.039204251, 268.774000000]: <initialOrientationAsReference> is unset, using default value of false to comply with REP 145 (world as orientation reference) [INFO] [1757056627.039250418, 268.774000000]: <robotNamespace> set to: // [INFO] [1757056627.039258829, 268.774000000]: <topicName> set to: imu/data [INFO] [1757056627.039264766, 268.774000000]: <frameName> set to: imu_link [INFO] [1757056627.039284535, 268.774000000]: <updateRateHZ> set to: 100 [INFO] [1757056627.039292202, 268.774000000]: <gaussianNoise> set to: 0 [INFO] [1757056627.039308366, 268.774000000]: <xyzOffset> set to: 0 0 0 [INFO] [1757056627.039324369, 268.774000000]: <rpyOffset> set to: 0 -0 0 ../src/intel/isl/isl.c:2105: FINISHME: ../src/intel/isl/isl.c:isl_surf_supports_ccs: CCS for 3D textures is disabled, but a workaround is available. [INFO] [1757056627.147319215, 268.774000000]: Camera Plugin: Using the 'robotNamespace' param: '/' [INFO] [1757056627.148798957, 268.774000000]: Camera Plugin (ns = /) <tf_prefix_>, set to "" [INFO] [1757056627.169137370, 268.774000000]: Camera Plugin: Using the 'robotNamespace' param: '/' [INFO] [1757056627.170343672, 268.774000000]: Camera Plugin (ns = /) <tf_prefix_>, set to "" [INFO] [1757056627.194344383, 268.774000000]: Camera Plugin: Using the 'robotNamespace' param: '/' [INFO] [1757056627.195809856, 268.774000000]: Camera Plugin (ns = /) <tf_prefix_>, set to "" [chair_3-17] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/chair_3-17*.log [INFO] [1757056627.287370743, 268.774000000]: Laser Plugin: Using the 'robotNamespace' param: '/' [INFO] [1757056627.287421234, 268.774000000]: Starting Laser Plugin (ns = /) [INFO] [1757056627.288334105, 268.774000000]: Laser Plugin (ns = /) <tf_prefix_>, set to "" [INFO] [1757056627.328058953, 268.774000000]: WPR using gains: yaw: 500 x: 40000 y: 30000 [INFO] [1757056627.328091266, 268.774000000]: robotBaseFrame for WPR plugin: base_footprint [dinning_table_0-10] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/dinning_table_0-10*.log Aborted (core dumped) [gazebo_gui-2] process has died [pid 16604, exit code 134, cmd /opt/ros/noetic/lib/gazebo_ros/gzclient __name:=gazebo_gui __log:=/home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/gazebo_gui-2.log]. log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/gazebo_gui-2*.log Laser Pose= -1.34429e-10 1.57666e-10 -8.866e-12 [spawn_urdf-18] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/spawn_urdf-18*.log [chair_2-16] process has finished cleanly log file: /home/h3c/.ros/log/423fb52a-8a27-11f0-bbfc-d5ac9570cff6/chair_2-16*.log
最新发布
09-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值