for Robot Artificial Inteligence

모듈을 때와서 쉽게 Debug 혹은 vscode debug 하는 방법

|

1) 모듈 때와서 테스트 하기

// g++ eigen_test.cpp -o eigen_test -I /usr/include/eigen3/

#include <iostream>
#include <Eigen/Dense>

using namespace std;
using Eigen::MatrixXd;

int main()
{
    MatrixXd m = MatrixXd::::Random()
}

위와 같이 모듈을 따와서 해본다.

2) VSCODE DEBUG모드

  • cmake .. -DCMAKE_BUILD_TYPE=Debug

  • vscode의 디버그 가서 node.js debug 아래와 같이 만들기

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "debug_image_database_management Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/home/chan/Project/visual_database_management/bin/image_database_management_program",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },



        {
            "name": "clang++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "lldb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: clang++ build active file",
            "miDebuggerPath": "/usr/bin/lldb-mi"
        }
    ]
}

VSCODE DEBUG 팁

Debug actions#

  • Continue / Pause F5.
  • Step Over F10.
  • Step Into F11.
  • Step Out Shift+F11.
  • Restart Ctrl+Shift+F5.
  • Stop Shift+F5.

OPTIMIZE MODE

cmake .. -DCMAKE_BUILD_TYPE=Release

Comment  Read more

ROS SPIN을 이제 이해하다니...

|

ROS spin 돌아야만 그떄부터 callback reading을 한다!!!

이 바보 지금 이걸 이해하다니 ㅠㅠ

즉 Initialization으로 모든 ros subscribe or publisher 준비를 다 해놓고 로스 스핀을 돌면서 받으면

CALLBACK이 돌면서 스핀을 돌때마다 데이터를 받고 스핀돌때마다 퍼블리시를 한다.


Initialization(); // subscribe, publisher, everything that need to be Initialization done here

ros::spin(); // it start to read topic at callback and publish it by publisher.

Comment  Read more

데이터들을 pointer로 관리를 하면서 하나씩 읽는 것이 cost에 좋다.

|

m_cloud_indices = std::make_shared<const std::vector<PointType>>(indices);
m_normal_ptr = std::make_shared<const Eigen::MatrixXf>(normals);
m_cloud_indices = std::make_shared<const std::vector<PointType>>(indices);

copy를 하지 않고, read를 하는게 efficient 하다

Comment  Read more

각 벡터 Quaternion 각도 구하는 법, quaternion times its conjugate transpose meaning?

|

각 벡터 Quaternion 각도 구하는 법

https://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another

https://math.stackexchange.com/questions/3174308/norm-of-quaternion

https://stackoverflow.com/questions/69936813/what-is-a-meaning-of-q-q-adjoint-mean\

SVD를 구하는 이유는, 두 eigen vector에 대한 multiply는 Orthogonal Matrix 이다. 즉, A,B라는 두 포인트가 있다면, 두 매트릭스간에 Rotation Matrix를 구하는 것이다.

quaternion times its conjugate transpose meaning

포인트(Vector)의 quaternion, rotation matrix를 구할 수 있다.

quaternion times its conjugate transpose -> Eigen Decommission -> U(eigen vector) * sigma(eigen value) * V(eigen vector) -> U * V = Orthogonal matrix(Mapping Rotation)

이런 식으로 Rotation Matrix를 구할 수 있다.

참고 : 유투브에 “how to quaternions produce 3d rotation”, “quaternion and 3d rotation, explained interactively”

Comment  Read more

CMAKE 유용 정보 및 컴파일 방법들

|

catkin_make –only-pkg-with-deps

  • 특정 패키지만 컴퍼일 할때 쓰인다.

catkin_make -DCMAKE_BUILD_TYPE=Release

  • Release버전으로 컴파일을 할때 최적화된 버전으로 object 를 만든다.

catkin_make -DCMAKE_BUILD_TYPE=Debug

  • Debug 버전으로 break를 걸면서 디버그를 보고 싶을때 사용된다.(ros debug)

CMAKE_IGNORE.txt

  • 보통 workspace에 많은 Package들이 있는데, 이는 현재 필요 없는 패키지까지 컴파일 함으로 컴파일 하는데 많은 시간을 소비하게 됩니다 이때 패키지 안에 CMAKE_IGNORE를 넣어주면 컴파일할때 그 패키지는 무시한다.

Comment  Read more