头像

jinyc




离线:12小时前


最近来访(76)
用户头像
魅影骑士
用户头像
V1
用户头像
im0use
用户头像
我要出去乱说
用户头像
拿不到offer不改名
用户头像
不想罚坐
用户头像
我怀念的
用户头像
油泼面
用户头像
jswjc555
用户头像
逃离这世俗
用户头像
Patavix
用户头像
zxt
用户头像
-摆烂王-
用户头像
头号玩家
用户头像
utopia_5
用户头像
迷人的源
用户头像
acwubf
用户头像
编程浪子
用户头像
HAMRUS
用户头像
𐂂暮杪十二

活动打卡代码 AcWing 4273. 链表合并

jinyc
8天前
#include<iostream>
#include<vector>

#define x first
#define y second

using namespace std;

typedef pair<int,int> PII;

const int N=1e5+10;

int h1,h2,n;
int v[N],ne[N];

int main(){
    cin>>h1>>h2>>n;
    while(n--){
        int addr,value,next;
        cin>>addr>>value>>next;
        v[addr]=value,ne[addr]=next;
    }

    vector<PII> a,b,c;
    for(int i=h1;i!=-1;i=ne[i]) a.push_back({i,v[i]});
    for(int i=h2;i!=-1;i=ne[i]) b.push_back({i,v[i]});

    if(a.size()<b.size()) swap(a,b);

    for(int i=0,j=b.size()-1;i<a.size();i+=2,--j){
        c.push_back(a[i]);
        if(i+1<a.size()) c.push_back(a[i+1]);
        if(j>=0) c.push_back(b[j]);
    }

    for(int i=0;i<c.size();++i){
        printf("%05d %d ",c[i].x,c[i].y);
        if(i+1<c.size()) printf("%05d\n",c[i+1].x);
        else printf("-1");
    }

    return 0;
}



jinyc
9天前

import module_name。
即import后直接接模块名。在这种情况下,Python会在两个地方寻找这个模块,第一是sys.path(通过运行代码import sys; print(sys.path)查看),os这个模块所在的目录就在列表sys.path中,一般安装的Python库的目录都可以在sys.path中找到(前提是要将Python的安装目录添加到电脑的环境变量),所以对于安装好的库,我们直接import即可。第二个地方就是运行文件(这里是m1.py)所在的目录,因为m2.py和运行文件在同一目录下,所以上述写法没有问题。

Twist类

geometry_msgs/Twist

geometry_msgs/Vector3 linear
    float64 x
    float64 y
    float64 z
geometry_msgs/Vector3 angular
    float64 x
    float64 y
    float64 z


活动打卡代码 AcWing 4269. 校庆

jinyc
10天前
#include<iostream>
#include<unordered_set>

using namespace std;

int main(){
    int n,m;
    unordered_set<string> hash;
    cin>>n;
    int cnt=0;
    string name;
    while(n--){
        cin>>name;
        hash.insert(name);
    }

    cin>>m;
    string a,b;
    while(m--){
        cin>>name;
        if(hash.count(name)){
            ++cnt;
            if(a.empty()||name.substr(6,8)<a.substr(6,8)) a=name;
        }
        else{
            if(b.empty()||name.substr(6,8)<b.substr(6,8)) b=name;
        }
    }

    cout<<cnt<<endl;
    if(cnt) cout<<a<<endl;
    else cout<<b<<endl;
    return 0;
}



jinyc
10天前

src文件夹由一个个package软件包组成,一个软件包中可以包含一个或多个节点的文件。在package中,必须包含的文件是:cmakelist.txt (描述package的编译规则),package.xml(package的信息描述)和src(源代码文件)。其他文件夹还包括:msg(自定义消息), srv(自定义服务), launch(launch文件), scripts(可执行脚本)等。

一个ROS工作空间内,存在着两个类型的src文件夹。一个用于存放pacakge,一个用于存放源代码,级别不一样。对于msg文件夹,如果一个节点使用了自定义的msg格式,就必须在package中自定义一个msg文件夹,但有时在pacakge外部也会存在类似的msg文件夹,例如styx_msgs,虽然型式看上去像msg,但其本质是一个package。

ROS目录(/opt/ros/mel/)包含用户在安装ROS时选择的功能包和ROS运行程序

/bin 可执行的二进制文件
/etc 与ROS和catkin相关的配置文件
/include 头文件
/lib 库文件
/share ROS功能包
env.* 配置文件
setup.* 配置文件

查找文件内容中包含特定内容的指令
find 文件目录 -type f |xargs grep “查询内容”

find默认查找当前目录和子目录,通过maxdepth限制只查当前目录:
find . -maxdepth 1 -type f -name “*.php”

rqt_graph 椭圆表示节点,方块表示话题




jinyc
11天前

roslaunch 命令运行时首先会检测系统的rosmaster是否运行,如果已经启动,就用现有的rosmaster;
如果没有启动,会先启动rosmaster,然后再执行launch文件中的设置,
一次性把多个节点按照我们预先的配置启动起来。

<launch>                <!--根标签-->
<node>                  <!--需要启动的node及其参数-->
<include>               <!--包含其他launch-->
<machine>               <!--指定运行的机器-->
<env-loader>            <!--设置环境变量-->
<param>                 <!--定义参数到参数服务器-->
<rosparam>              <!--加载yaml文件中的参数到参数服务器-->
<arg>                   <!--定义变量-->
<remap>                 <!--设定 topic 映射-->
<group>                 <!--设定分组-->
</launch>               <!--根标签-->

launch, node这两个 tag 是 launch 文件的核心部分。基本格式如下:

<launch>
    //type是 package 中的可执行文件,如果是 python 或者 Julia 编写的,就可能是 .py 或者 .jl 文件,
    //如果是 c++ 编写的,就是源文件编译之后的可执行文件的名字。

    <node name="xtark_driver" pkg="xtark_driver" type="xtark_driver" output="screen" respawn="true">
    <node pkg="package_name" type="executable_file" name="node_name1"/>
    ...
</launch>

roslaunch 不能保证 node 的启动顺序,因此 launch 文件中所有的 node 都应该对启动顺序有鲁棒性。

转自 https://www.jianshu.com/p/e55850b87c7d



活动打卡代码 AcWing 4268. 性感素数

jinyc
13天前
#include<iostream>
#include<alogrithm>

using namespace std;

bool is_prime(int x){
    if(x<2) return false;
    for(int i=2;i<=x/i;++i)
        if(x%i==0) 
            return false;
    return true;
}

int main(){
    int n;
    cin>>n;

    for(int i=n-6;i<=n+6;i+=12){
        if(is_prime(n)&&is_prime(i)){
            cout<<"Yes"<<endl;
            cout<<i<<endl;
            return 0;
        }
    }

    for(int i=n+1;;++i){
        if(is_prime(i)&&(is_prime(i+6)||is_prime(i-6))){
            cout<<"No"<<endl;
            cout<<i<<endl;
            return 0;
        }
    }
}



jinyc
13天前

xtark_driver.h

//串口通信四个不同类型信息
#define sendType_velocity    0x11
#define sendType_pid         0x12
#define sendType_params      0x13
#define sendType_wheelspeed  0x14

//串口通信状态机
enum packetFinderState

xtark_driver.cpp

ros::NodeHandle nh_;        //公共句柄
//私有句柄,用来获取launch文件中的参数,好处是只会从当前节点获取参数不会从整个ROS获取参数
ros::NodeHandle nh_p_("~"); 




jinyc
14天前

f = boost::bind(&XtarkDriver::dynamic_reconfig_callback,this,_1,_2);

一般来说boost::bind有两种方式的调用,一种是对自由方法,也取非类方法, 一种是对类方法。
对自由方法来说,直接boost::bind(函数名, 参数1,参数2,...)
对类方法来说,直接boost::bind(&类名::方法名,类实例指针,参数1,参数2)


转载自 https://blog.csdn.net/bj318318/article/details/116200356

如果一个类将()运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象。

函数对象是一个对象,但是使用的形式看起来像函数调用,实际上也执行了函数调用。
#include <iostream>
using namespace std;
class CAverage
{
public:
    double operator()(int a1, int a2, int a3)
    {  //重载()运算符
        return (double)(a1 + a2 + a3) / 3;
    }
};
int main()
{
    CAverage average;  //能够求三个整数平均数的函数对象
    cout << average(3, 2, 3);  //等价于 cout << average.operator(3, 2, 3);
    return 0;
}
转载自 http://c.biancheng.net/view/354.html



jinyc
15天前

回调过程中被调用的函数被称作回调函数,调用的函数叫主调函数

怎么使用带参数的回调函数?

#include<stdio.h>

int Callback_1(int x) // Callback Function 1
{
    printf("Hello, this is Callback_1: x = %d ", x);
    return 0;
}

int Handle(int y, int (*Callback)(int))
{
    printf("Entering Handle Function. ");
    Callback(y);
    printf("Leaving Handle Function. ");
}

int main()
{
    int a = 2;
    printf("Entering Main Function. ");
    Handle(a, Callback_1);
    printf("Leaving Main Function. ");
    return 0;
}

运行结果
Entering Main Function.
Entering Handle Function.
Hello, this is Callback_1: x = 2
Leaving Handle Function.

this指针的一个示例

#include <iostream>

using namespace std;

class Box
{
   public:
      // 构造函数定义
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      int compare(Box box)
      {
         return this->Volume() > box.Volume();
      }
   private:
      double length;     // Length of a box
      double breadth;    // Breadth of a box
      double height;     // Height of a box
};

int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // Declare box1
   Box Box2(8.5, 6.0, 2.0);    // Declare box2

   if(Box1.compare(Box2))
   {
      cout << "Box2 is smaller than Box1" <<endl;
   }
   else
   {
      cout << "Box2 is equal to or larger than Box1" <<endl;
   }
   return 0;
}

输出结果:
Constructor called.
Constructor called.
Box2 is equal to or larger than Box1

cmd_sub_ = nh_.subscribe<geometry_msgs::Twist>("cmd_vel",10,&XtarkDriver::cmd_vel_callback,this);
//this 指的是Twist

使用boost.bind绑定class的成员函数作为boost thread的入口


class HelloWorld
{
public:
    void hello();
    void entry();
};

void HelloWorld::hello() 
{ 
    std::cout << "Hello world, I'm a thread!" << std::endl;
}

int main(int argc, char* argv[]) 
{ 
    HelloWorld hw;
    hw.entry();
    return 0;
}
void HelloWorld::entry()
{
    boost::thread thrd(boost::bind(&HelloWorld::hello,this));
    thrd.join();
}

this指针是 T * const 类型,表示不能重定向它的指向,顶层const 指针常量(指针是一个常量)

int * const p = &a;

底层const 常量指针(指向常量的指针)

int const * p = &a;  等价于 const int * p = &a;

转载自 https://blog.csdn.net/fangfanglovezhou/article/details/124553770




jinyc
16天前

n.param[HTML_REMOVED](“my_param”, s,”default_value”);

//代表将名字为my_param的参数值赋值给s变量,没有参数值时则使用默认参数值

  nh_param.param<string>("imageTopic", imageTopic, "/pandora/sensor/pandora/camera/front_color");
  nh_param.param<string>("targetPoseTopic", targetPoseTopic, "/target_pose_img");

//意思就是launch文件里面有这个imageTopic(前面这个)的参数值的赋值,
//则赋值给imageTopic(后面这个),后面的/pandora/sensor/pandora/camera/front_color就会忽略。
//否则就用/pandora/sensor/pandora/camera/front_color

转载自 https://blog.csdn.net/sinat_16643223/article/details/112433971

ROS中提供了的参数服务器机制,用户可以将参数以yaml文件格式保存在本地,程序运行(运行launch文件)时动态载入,修改参数并不需要重新编译。
转载 https://blog.csdn.net/qq_35358125/article/details/107023972

Boost串口通信 boost::asio::serial_port基本使用

boost::asio::serial_port::baud_rate      
//波特率

boost::asio::serial_port::parity            
//奇偶校验,可以为serial_port::parity::none / odd / even。

boost::asio::serial_port::flow_control      
//流量控制, 可以为serial_port::flow_control::type,enum类型,可以是none software hardware

boost::asio::serial_port::stop_bits          
//停止位,可以为serial_port::stop_bits::one /onepointfive /two

boost::asio::serial_port::character_size   
//字符大小

转载自 https://blog.csdn.net/keeplearning365/article/details/108718410
https://blog.csdn.net/misskissc/article/details/11877791

boost::asio::serial_port 串口通信类 使用 封装
转载自 https://blog.csdn.net/misskissc/article/details/11877791